Skip to content

Commit 47614aa

Browse files
authored
Merge pull request #60 from stac-labs/googleUpdates
Fix some Google util issues
2 parents 73a3321 + 91ce188 commit 47614aa

File tree

2 files changed

+29
-7
lines changed

2 files changed

+29
-7
lines changed

src/stac_utils/google.py

+24-4
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import logging
44
import os
55
import sys
6+
import itertools
67

78
from google.api_core.exceptions import InternalServerError, NotFound
89
from google.api_core.retry import if_exception_type, Retry
@@ -18,6 +19,11 @@
1819

1920
RETRY_EXCEPTIONS = [InternalServerError]
2021

22+
logging.basicConfig()
23+
24+
logger = logging.getLogger(__name__)
25+
logger.setLevel(logging.DEBUG)
26+
2127

2228
def get_credentials(
2329
service_account_blob: dict = None,
@@ -320,13 +326,15 @@ def create_table_from_dataframe(
320326
column_name = dataframe.columns[column_index]
321327
db_column_name = underscore(parameterize(column_name))
322328
column_name_conversion[column_name] = db_column_name
323-
datatype = dataframe.dtypes[column_index].name
329+
datatype = dataframe.dtypes.iloc[column_index].name
324330
if datatype == "object":
325331
column_definitions.append(f"{db_column_name} STRING")
326332
elif datatype == "int64":
327333
column_definitions.append(f"{db_column_name} INT64")
328334
elif datatype == "float64":
329335
column_definitions.append(f"{db_column_name} NUMERIC")
336+
elif datatype == "bool":
337+
column_definitions.append(f"{db_column_name} BOOL")
330338
else:
331339
raise ValueError(f"Unknown data type {datatype} on column {column_name}")
332340

@@ -341,7 +349,14 @@ def create_table_from_dataframe(
341349
"""
342350
print(table_definition_sql)
343351
run_query(table_definition_sql, client=client)
344-
load_data_from_dataframe(client, dataframe, project_name, dataset_name, table_name)
352+
load_data_from_dataframe(
353+
client,
354+
dataframe,
355+
project_name,
356+
dataset_name,
357+
table_name,
358+
retry_exceptions=[NotFound, *RETRY_EXCEPTIONS],
359+
)
345360

346361

347362
def get_table_for_loading(
@@ -396,7 +411,12 @@ def load_data_from_dataframe(
396411
retry=retry_policy,
397412
)
398413

399-
logging.info(f"inserted {len(results)} rows")
414+
print(f"completed insert to {table}")
415+
if len(results) > 0:
416+
# any result from insert_rows_to_dataframe indicates errors in some rows, log them
417+
logger.error(f"Errors encountered inserting to {table}")
418+
errors = itertools.chain(results)
419+
logger.error(errors)
400420

401421

402422
def load_data_from_list(
@@ -423,7 +443,7 @@ def load_data_from_list(
423443
retry_policy = Retry(predicate=if_exception_type(*retry_exceptions))
424444
results = client.insert_rows(table=table, rows=data, retry=retry_policy)
425445

426-
logging.info(f"inserted {len(results)} rows")
446+
logger.info(f"inserted {len(results)} rows")
427447

428448

429449
def upload_data_to_gcs(

src/tests/test_google.py

+5-3
Original file line numberDiff line numberDiff line change
@@ -308,14 +308,14 @@ def test_create_table_from_dataframe(
308308
):
309309
"""Test create table from dataframe"""
310310

311-
mock_df = pd.DataFrame([{"foo": 1, "bar": 2.5, "spam": "spam"}])
311+
mock_df = pd.DataFrame([{"foo": 1, "bar": 2.5, "spam": "spam", "baz": False}])
312312

313313
table_definition_sql = f"""
314314
DROP TABLE IF EXISTS
315315
foo.bar.spam
316316
;
317317
CREATE TABLE foo.bar.spam (
318-
foo INT64, bar NUMERIC, spam STRING
318+
foo INT64, bar NUMERIC, spam STRING, baz BOOL
319319
);
320320
"""
321321

@@ -483,7 +483,9 @@ def test_send_data_to_sheets_with_null_overwrite(self, mock_auth_sheets: MagicMo
483483
mock_auth_sheets.return_value = mock_client
484484
mock_modifier = MagicMock()
485485
mock_client.spreadsheets.return_value.values.return_value = mock_modifier
486-
send_data_to_sheets([[1, None, 2], [3, 4, 5]], "foo", "bar", is_fill_in_nulls=True)
486+
send_data_to_sheets(
487+
[[1, None, 2], [3, 4, 5]], "foo", "bar", is_fill_in_nulls=True
488+
)
487489
mock_modifier.append.assert_not_called()
488490
mock_modifier.update.assert_called_once_with(
489491
spreadsheetId="foo",

0 commit comments

Comments
 (0)