From 98076e453512ec0b2ce5fe6b5b66ea0a0192cb70 Mon Sep 17 00:00:00 2001 From: Pablo Estrada Date: Wed, 12 Aug 2020 10:52:50 -0700 Subject: [PATCH 1/3] Better error on BQ schema parse --- sdks/python/apache_beam/io/gcp/bigquery_tools.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/sdks/python/apache_beam/io/gcp/bigquery_tools.py b/sdks/python/apache_beam/io/gcp/bigquery_tools.py index da5c26a179fc..c58660f0be56 100644 --- a/sdks/python/apache_beam/io/gcp/bigquery_tools.py +++ b/sdks/python/apache_beam/io/gcp/bigquery_tools.py @@ -39,6 +39,7 @@ import time import uuid from builtins import object +from json.decoder import JSONDecodeError import fastavro from future.utils import iteritems @@ -134,7 +135,11 @@ def parse_table_schema_from_json(schema_string): Returns: A TableSchema of the BigQuery export from either the Query or the Table. """ - json_schema = json.loads(schema_string) + try: + json_schema = json.loads(schema_string) + except JSONDecodeError as e: + raise ValueError('Unable to parse JSON schema: %s - %r' + % (schema_string, e)) def _parse_schema_field(field): """Parse a single schema field from dictionary. From ba838f7cf8fa9b1e0ccf8e5743f141410e1e134d Mon Sep 17 00:00:00 2001 From: Pablo Estrada Date: Wed, 12 Aug 2020 10:59:04 -0700 Subject: [PATCH 2/3] Better error on BQ schema parse --- sdks/python/apache_beam/io/gcp/bigquery_tools.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sdks/python/apache_beam/io/gcp/bigquery_tools.py b/sdks/python/apache_beam/io/gcp/bigquery_tools.py index c58660f0be56..bd1c59d7b3ab 100644 --- a/sdks/python/apache_beam/io/gcp/bigquery_tools.py +++ b/sdks/python/apache_beam/io/gcp/bigquery_tools.py @@ -138,8 +138,8 @@ def parse_table_schema_from_json(schema_string): try: json_schema = json.loads(schema_string) except JSONDecodeError as e: - raise ValueError('Unable to parse JSON schema: %s - %r' - % (schema_string, e)) + raise ValueError( + 'Unable to parse JSON schema: %s - %r' % (schema_string, e)) def _parse_schema_field(field): """Parse a single schema field from dictionary. From 9c6be1052a877172850b1e0b32bd476b296934bc Mon Sep 17 00:00:00 2001 From: Pablo Estrada Date: Wed, 12 Aug 2020 13:27:00 -0700 Subject: [PATCH 3/3] Fixup --- sdks/python/apache_beam/io/gcp/bigquery_tools.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/sdks/python/apache_beam/io/gcp/bigquery_tools.py b/sdks/python/apache_beam/io/gcp/bigquery_tools.py index bd1c59d7b3ab..0daf02878854 100644 --- a/sdks/python/apache_beam/io/gcp/bigquery_tools.py +++ b/sdks/python/apache_beam/io/gcp/bigquery_tools.py @@ -39,7 +39,6 @@ import time import uuid from builtins import object -from json.decoder import JSONDecodeError import fastavro from future.utils import iteritems @@ -68,6 +67,12 @@ except ImportError: pass +try: + # TODO(pabloem): Remove this workaround after Python 2.7 support ends. + from json.decoder import JSONDecodeError +except ImportError: + JSONDecodeError = ValueError + # pylint: enable=wrong-import-order, wrong-import-position _LOGGER = logging.getLogger(__name__)