From 1450f4f332af6b2bbf86213d061f25a4a88e068d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20BAPTISTE?= Date: Mon, 18 May 2020 11:01:53 +0200 Subject: [PATCH] fix: Makes TimePartitioning printable representation evaluable --- google/cloud/bigquery/table.py | 11 +++++++++-- tests/unit/test_table.py | 4 ++-- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/google/cloud/bigquery/table.py b/google/cloud/bigquery/table.py index e66d24e74..cbd0d2ee6 100644 --- a/google/cloud/bigquery/table.py +++ b/google/cloud/bigquery/table.py @@ -2128,7 +2128,14 @@ def to_api_repr(self): return self._properties def _key(self): - return tuple(sorted(self._properties.items())) + properties = self._properties.copy() + if "type" in properties.keys(): + properties["type_"] = properties.pop("type") + if "requirePartitionFilter" in properties.keys(): + properties["require_partition_filter"] = properties.pop("requirePartitionFilter") + if "expirationMs" in properties.keys(): + properties["expiration_ms"] = properties.pop("expirationMs") + return tuple(sorted(properties.items())) def __eq__(self, other): if not isinstance(other, TimePartitioning): @@ -2142,7 +2149,7 @@ def __hash__(self): return hash(self._key()) def __repr__(self): - key_vals = ["{}={}".format(key, val) for key, val in self._key()] + key_vals = ["{}={}".format(key, repr(val)) for key, val in self._key()] return "TimePartitioning({})".format(",".join(key_vals)) diff --git a/tests/unit/test_table.py b/tests/unit/test_table.py index 72275fc53..be8252c4b 100644 --- a/tests/unit/test_table.py +++ b/tests/unit/test_table.py @@ -3743,7 +3743,7 @@ def test___hash__not_equals(self): def test___repr___minimal(self): time_partitioning = self._make_one() - expected = "TimePartitioning(type=DAY)" + expected = "TimePartitioning(type_='DAY')" self.assertEqual(repr(time_partitioning), expected) def test___repr___explicit(self): @@ -3752,7 +3752,7 @@ def test___repr___explicit(self): time_partitioning = self._make_one( type_=TimePartitioningType.DAY, field="name", expiration_ms=10000 ) - expected = "TimePartitioning(" "expirationMs=10000," "field=name," "type=DAY)" + expected = "TimePartitioning(" "expiration_ms=10000," "field=name," "type_='DAY')" self.assertEqual(repr(time_partitioning), expected) def test_set_expiration_w_none(self):