- header_list = [] # used for checking uniqueness
- columns = []
- prior_header = None
- i = 0
- skipped = 0
- # Read column headers until end or 2 consecutive skipped headers
- for header in headers:
- # LOGGER.info('header = {}'.format(json.dumps(header, indent=2, sort_keys=True)))
- column_index = i + 1
- column_letter = colnum_string(column_index)
- header_value = header.get('formattedValue')
- if header_value: # NOT skipped
- column_is_skipped = False
- skipped = 0
- column_name = '{}'.format(header_value)
- if column_name in header_list:
- raise Exception('DUPLICATE HEADER ERROR: SHEET: {}, COL: {}, CELL: {}1'.format(
- sheet_title, column_name, column_letter))
- header_list.append(column_name)
-
- first_value = None
- try:
- first_value = first_values[i]
- except IndexError as err:
- raise Exception('NO VALUE IN 2ND ROW FOR HEADER ERROR. SHEET: {}, COL: {}, CELL: {}2. {}'.format(
- sheet_title, column_name, column_letter, err))
-
- column_effective_value = first_value.get('effectiveValue', {})
-
- col_val = None
- if column_effective_value == {}:
- column_effective_value_type = 'stringValue'
- LOGGER.info('WARNING: NO VALUE IN 2ND ROW FOR HEADER. SHEET: {}, COL: {}, CELL: {}2.'.format(
+ first_value = None
+ try:
+ first_value = first_values[i]
+ except IndexError as err:
+ raise Exception('NO VALUE IN 2ND ROW FOR HEADER ERROR. SHEET: {}, COL: {}, CELL: {}2. {}'.format(
+ sheet_title, column_name, column_letter, err))
+
+ column_effective_value = first_value.get('effectiveValue', {})
+
+ col_val = None
+ if column_effective_value == {}:
+ column_effective_value_type = 'stringValue'
+ LOGGER.info('WARNING: NO VALUE IN 2ND ROW FOR HEADER. SHEET: {}, COL: {}, CELL: {}2.'.format(
+ sheet_title, column_name, column_letter))
+ LOGGER.info(' Setting column datatype to STRING')
+ else:
+ for key, val in column_effective_value.items():
+ if key in ('numberValue', 'stringValue', 'boolValue'):
+ column_effective_value_type = key
+ col_val = str(val)
+ elif key in ('errorType', 'formulaType'):
+ col_val = str(val)
+ raise Exception('DATA TYPE ERROR 2ND ROW VALUE: SHEET: {}, COL: {}, CELL: {}2, TYPE: {}, VALUE: {}'.format(
+ sheet_title, column_name, column_letter, key, col_val))
+
+ column_number_format = first_values[i].get('effectiveFormat', {}).get(
+ 'numberFormat', {})
+ column_number_format_type = column_number_format.get('type')
+
+ # Determine datatype for sheet_json_schema
+ #
+ # column_effective_value_type = numberValue, stringValue, boolValue;
+ # INVALID: errorType, formulaType
+ # https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/other#ExtendedValue
+ #
+ # column_number_format_type = UNEPECIFIED, TEXT, NUMBER, PERCENT, CURRENCY, DATE,
+ # TIME, DATE_TIME, SCIENTIFIC
+ # https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/cells#NumberFormatType
+ #
+ column_format = None # Default
+ if column_effective_value == {}:
+ col_properties = {'type': ['null', 'string']}
+ column_gs_type = 'stringValue'
+ LOGGER.info('WARNING: 2ND ROW VALUE IS BLANK: SHEET: {}, COL: {}, CELL: {}2'.format(