From 33b4c1f873b8dea40a6bd85577fbf49b5e49fbbc Mon Sep 17 00:00:00 2001 From: seankane-msft Date: Thu, 17 Jun 2021 14:28:02 -0400 Subject: [PATCH 1/8] adding repr and str methods to models for easier debugging when issues happen --- .../azure/data/tables/_models.py | 70 +++++++++++++++++++ 1 file changed, 70 insertions(+) diff --git a/sdk/tables/azure-data-tables/azure/data/tables/_models.py b/sdk/tables/azure-data-tables/azure/data/tables/_models.py index a5835fea79ee..934e7afb64f8 100644 --- a/sdk/tables/azure-data-tables/azure/data/tables/_models.py +++ b/sdk/tables/azure-data-tables/azure/data/tables/_models.py @@ -78,6 +78,16 @@ def __init__(self, **kwargs): # pylint: disable=super-init-not-called self.expiry = kwargs.get('expiry') self.permission = kwargs.get('permission') + def __str__(self): + # type: () -> str + return "start={}, expiry={}, permission={}".format( + self.start, self.expiry, self.permission + ) + + def __repr__(self): + # type: () -> str + return "TableAccessPolicy({})".format(self.__str__()) + class TableAnalyticsLogging(GeneratedLogging): """Azure Analytics Logging settings. @@ -114,6 +124,16 @@ def _from_generated(cls, generated): ) ) + def __str__(self): + # type: () -> str + return "version={}, delete={}, read={}, write={}, retention_policy={}".format( + self.version, self.delete, self.read, self.write, self.retention_policy + ) + + def __repr__(self): + # type: () -> str + return "TableAnalyticsLogging({})".format(self.__str__()) + class TableMetrics(GeneratedMetrics): """A summary of request statistics grouped by API in hour or minute aggregates. @@ -153,6 +173,16 @@ def _from_generated(cls, generated): ) ) + def __str__(self): + # type: () -> str + return "version={}, enabled={}, include_apis={}, retention_policy={}".format( + self.version, self.enabled, self.include_apis, self.retention_policy + ) + + def __repr__(self): + # type: () -> str + return "TableMetrics({})".format(self.__str__()) + class TableRetentionPolicy(GeneratedRetentionPolicy): def __init__(self, **kwargs): # pylint: disable=super-init-not-called @@ -191,6 +221,14 @@ def _from_generated(cls, generated, **kwargs): # pylint: disable=unused-argumen days=generated.days, ) + def __str__(self): + # type: () -> str + return u"enabled={}, days={}".format(self.enabled, self.days) + + def __repr__(self): + # type; () -> str + return u"TableRetentionPolicy({})".format(self.__str__()) + class TableCorsRule(object): """CORS is an HTTP feature that enables a web application running under one @@ -256,6 +294,16 @@ def _from_generated(cls, generated): max_age_in_seconds=generated.max_age_in_seconds, ) + def __str__(self): + # type: () -> str + return "allowed_origins={}, allowed_methods={}, allowed_headers={}, exposed_headers={}, max_age_in_seconds={}".format( + self.allowed_origins, self.allowed_methods, self.allowed_headers, self.exposed_headers, self.max_age_in_seconds + ) + + def __repr__(self): + # type: () -> str + return u"TableCorsRules({})".format(self.__str__()) + class TablePropertiesPaged(PageIterator): """An iterable of Table properties. @@ -400,6 +448,10 @@ def __str__(self): + ("d" if self.delete else "") ) + def __repr__(self): + # type: () -> str + return "".format(self.__str__()) + @classmethod def from_string( cls, @@ -481,6 +533,14 @@ def _from_generated(cls, generated, **kwargs): # pylint: disable=unused-argumen # type: (TableQueryResponse, Any) -> TableItem return cls(generated.table_name) # type: ignore + def __str__(self): + # type: () -> str + return "name={}".format(self.name) + + def __repr__(self): + # type: () -> str + return u"TableItem({})".format(self.__str__()) + class TablePayloadFormat(object): """ @@ -546,8 +606,13 @@ def __init__(self, **kwargs): self._str = ("s" if self.service else "") + ("o" if self.object else "") def __str__(self): + # type: () -> str return self._str + def __repr__(self): + # type: () -> str + return u" ResourceTypes @@ -617,8 +682,13 @@ def __init__(self, **kwargs): ) def __str__(self): + # type: () -> str return self._str + def __repr__(self): + # type: () -> str + return u"AccountSasPermissions(_str={})".format(self._str) + @classmethod def from_string(cls, permission, **kwargs): # type: (str, Dict[str, Any]) -> AccountSasPermissions From 8790ebe13a7fe9f1284e5ae8587741ce0b2ce0a0 Mon Sep 17 00:00:00 2001 From: seankane-msft Date: Thu, 17 Jun 2021 15:39:21 -0400 Subject: [PATCH 2/8] string limiting, consistency feedback --- .../azure/data/tables/_models.py | 28 +++++++++++-------- 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/sdk/tables/azure-data-tables/azure/data/tables/_models.py b/sdk/tables/azure-data-tables/azure/data/tables/_models.py index 934e7afb64f8..b31559a8ba54 100644 --- a/sdk/tables/azure-data-tables/azure/data/tables/_models.py +++ b/sdk/tables/azure-data-tables/azure/data/tables/_models.py @@ -86,7 +86,7 @@ def __str__(self): def __repr__(self): # type: () -> str - return "TableAccessPolicy({})".format(self.__str__()) + return "TableAccessPolicy({})".format(self.__str__())[1024:] class TableAnalyticsLogging(GeneratedLogging): @@ -132,7 +132,7 @@ def __str__(self): def __repr__(self): # type: () -> str - return "TableAnalyticsLogging({})".format(self.__str__()) + return "TableAnalyticsLogging({})".format(self.__str__())[1024:] class TableMetrics(GeneratedMetrics): @@ -181,7 +181,7 @@ def __str__(self): def __repr__(self): # type: () -> str - return "TableMetrics({})".format(self.__str__()) + return "TableMetrics({})".format(self.__str__())[1024:] class TableRetentionPolicy(GeneratedRetentionPolicy): @@ -223,11 +223,11 @@ def _from_generated(cls, generated, **kwargs): # pylint: disable=unused-argumen def __str__(self): # type: () -> str - return u"enabled={}, days={}".format(self.enabled, self.days) + return "enabled={}, days={}".format(self.enabled, self.days) def __repr__(self): # type; () -> str - return u"TableRetentionPolicy({})".format(self.__str__()) + return "TableRetentionPolicy({})".format(self.__str__())[1024:] class TableCorsRule(object): @@ -302,7 +302,7 @@ def __str__(self): def __repr__(self): # type: () -> str - return u"TableCorsRules({})".format(self.__str__()) + return "TableCorsRules({})".format(self.__str__())[1024:] class TablePropertiesPaged(PageIterator): @@ -450,7 +450,9 @@ def __str__(self): def __repr__(self): # type: () -> str - return "".format(self.__str__()) + return "TableSasPermissions(read={}, add={}, update={}, delete={})>".format( + self.read, self.add, self.update, self.delete + )[1024:] @classmethod def from_string( @@ -539,7 +541,7 @@ def __str__(self): def __repr__(self): # type: () -> str - return u"TableItem({})".format(self.__str__()) + return "TableItem({})".format(self.__str__())[1024:] class TablePayloadFormat(object): @@ -607,11 +609,11 @@ def __init__(self, **kwargs): def __str__(self): # type: () -> str - return self._str + return "service={}, object={}".format(self.service, self.object) def __repr__(self): # type: () -> str - return u" str - return self._str + return "read={}, write={}, delete={}, list={}, add={}, create={}, update={}, process={}".format( + self.read, self.write, self.delete, self.list, self.add, self.create, self.update, self.process + ) def __repr__(self): # type: () -> str - return u"AccountSasPermissions(_str={})".format(self._str) + return "AccountSasPermissions({})".format(self.__str__())[1024:] @classmethod def from_string(cls, permission, **kwargs): From c7d908644804111a7b8821ac2b3d1abb376738f1 Mon Sep 17 00:00:00 2001 From: seankane-msft Date: Thu, 17 Jun 2021 15:43:45 -0400 Subject: [PATCH 3/8] removing __str__ methods --- .../azure/data/tables/_models.py | 67 ++++++------------- 1 file changed, 19 insertions(+), 48 deletions(-) diff --git a/sdk/tables/azure-data-tables/azure/data/tables/_models.py b/sdk/tables/azure-data-tables/azure/data/tables/_models.py index b31559a8ba54..0c603d4184b7 100644 --- a/sdk/tables/azure-data-tables/azure/data/tables/_models.py +++ b/sdk/tables/azure-data-tables/azure/data/tables/_models.py @@ -80,13 +80,13 @@ def __init__(self, **kwargs): # pylint: disable=super-init-not-called def __str__(self): # type: () -> str - return "start={}, expiry={}, permission={}".format( - self.start, self.expiry, self.permission - ) + return def __repr__(self): # type: () -> str - return "TableAccessPolicy({})".format(self.__str__())[1024:] + return "TableAccessPolicy(start={}, expiry={}, permission={}".format( + self.start, self.expiry, self.permission + )[1024:] class TableAnalyticsLogging(GeneratedLogging): @@ -124,15 +124,11 @@ def _from_generated(cls, generated): ) ) - def __str__(self): - # type: () -> str - return "version={}, delete={}, read={}, write={}, retention_policy={}".format( - self.version, self.delete, self.read, self.write, self.retention_policy - ) - def __repr__(self): # type: () -> str - return "TableAnalyticsLogging({})".format(self.__str__())[1024:] + return "TableAnalyticsLogging(version={}, delete={}, read={}, write={}, retention_policy={})".format( + self.version, self.delete, self.read, self.write, self.retention_policy + )[1024:] class TableMetrics(GeneratedMetrics): @@ -173,15 +169,11 @@ def _from_generated(cls, generated): ) ) - def __str__(self): - # type: () -> str - return "version={}, enabled={}, include_apis={}, retention_policy={}".format( - self.version, self.enabled, self.include_apis, self.retention_policy - ) - def __repr__(self): # type: () -> str - return "TableMetrics({})".format(self.__str__())[1024:] + return "TableMetrics(version={}, enabled={}, include_apis={}, retention_policy={})".format( + self.version, self.enabled, self.include_apis, self.retention_policy + )[1024:] class TableRetentionPolicy(GeneratedRetentionPolicy): @@ -220,14 +212,9 @@ def _from_generated(cls, generated, **kwargs): # pylint: disable=unused-argumen enabled=generated.enabled, days=generated.days, ) - - def __str__(self): - # type: () -> str - return "enabled={}, days={}".format(self.enabled, self.days) - def __repr__(self): # type; () -> str - return "TableRetentionPolicy({})".format(self.__str__())[1024:] + return "TableRetentionPolicy(enabled={}, days={}".format(self.enabled, self.days)[1024:] class TableCorsRule(object): @@ -294,15 +281,11 @@ def _from_generated(cls, generated): max_age_in_seconds=generated.max_age_in_seconds, ) - def __str__(self): - # type: () -> str - return "allowed_origins={}, allowed_methods={}, allowed_headers={}, exposed_headers={}, max_age_in_seconds={}".format( - self.allowed_origins, self.allowed_methods, self.allowed_headers, self.exposed_headers, self.max_age_in_seconds - ) - def __repr__(self): # type: () -> str - return "TableCorsRules({})".format(self.__str__())[1024:] + return "TableCorsRules(allowed_origins={}, allowed_methods={}, allowed_headers={}, exposed_headers={}, max_age_in_seconds={})".format( + self.allowed_origins, self.allowed_methods, self.allowed_headers, self.exposed_headers, self.max_age_in_seconds + )[1024:] class TablePropertiesPaged(PageIterator): @@ -535,13 +518,9 @@ def _from_generated(cls, generated, **kwargs): # pylint: disable=unused-argumen # type: (TableQueryResponse, Any) -> TableItem return cls(generated.table_name) # type: ignore - def __str__(self): - # type: () -> str - return "name={}".format(self.name) - def __repr__(self): # type: () -> str - return "TableItem({})".format(self.__str__())[1024:] + return "TableItem(name={})".format(self.name)[1024:] class TablePayloadFormat(object): @@ -607,13 +586,9 @@ def __init__(self, **kwargs): self.object = kwargs.get('object', False) self._str = ("s" if self.service else "") + ("o" if self.object else "") - def __str__(self): - # type: () -> str - return "service={}, object={}".format(self.service, self.object) - def __repr__(self): # type: () -> str - return "ResourceTypes({})".format(self.__str__())[1024:] + return "ResourceTypes(service={}, object={})".format(self.service, self.object)[1024:] @classmethod def from_string(cls, string): @@ -683,15 +658,11 @@ def __init__(self, **kwargs): + ("p" if self.process else "") ) - def __str__(self): - # type: () -> str - return "read={}, write={}, delete={}, list={}, add={}, create={}, update={}, process={}".format( - self.read, self.write, self.delete, self.list, self.add, self.create, self.update, self.process - ) - def __repr__(self): # type: () -> str - return "AccountSasPermissions({})".format(self.__str__())[1024:] + return "AccountSasPermissions(read={}, write={}, delete={}, list={}, add={}, create={}, update={}, process={})".format( + self.read, self.write, self.delete, self.list, self.add, self.create, self.update, self.process + )[1024:] @classmethod def from_string(cls, permission, **kwargs): From 991a51ad58d0c07e10f96e29d66b6f248a7a9cbc Mon Sep 17 00:00:00 2001 From: seankane-msft Date: Thu, 17 Jun 2021 15:44:33 -0400 Subject: [PATCH 4/8] forgot one --- sdk/tables/azure-data-tables/azure/data/tables/_models.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/sdk/tables/azure-data-tables/azure/data/tables/_models.py b/sdk/tables/azure-data-tables/azure/data/tables/_models.py index 0c603d4184b7..972dc52276aa 100644 --- a/sdk/tables/azure-data-tables/azure/data/tables/_models.py +++ b/sdk/tables/azure-data-tables/azure/data/tables/_models.py @@ -78,10 +78,6 @@ def __init__(self, **kwargs): # pylint: disable=super-init-not-called self.expiry = kwargs.get('expiry') self.permission = kwargs.get('permission') - def __str__(self): - # type: () -> str - return - def __repr__(self): # type: () -> str return "TableAccessPolicy(start={}, expiry={}, permission={}".format( From 0721fd82c202a3efb57f6a666710a557d6a52abf Mon Sep 17 00:00:00 2001 From: seankane-msft Date: Thu, 17 Jun 2021 15:45:36 -0400 Subject: [PATCH 5/8] also missing some closing ) --- sdk/tables/azure-data-tables/azure/data/tables/_models.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sdk/tables/azure-data-tables/azure/data/tables/_models.py b/sdk/tables/azure-data-tables/azure/data/tables/_models.py index 972dc52276aa..e3d2f49781f6 100644 --- a/sdk/tables/azure-data-tables/azure/data/tables/_models.py +++ b/sdk/tables/azure-data-tables/azure/data/tables/_models.py @@ -80,7 +80,7 @@ def __init__(self, **kwargs): # pylint: disable=super-init-not-called def __repr__(self): # type: () -> str - return "TableAccessPolicy(start={}, expiry={}, permission={}".format( + return "TableAccessPolicy(start={}, expiry={}, permission={})".format( self.start, self.expiry, self.permission )[1024:] @@ -210,7 +210,7 @@ def _from_generated(cls, generated, **kwargs): # pylint: disable=unused-argumen ) def __repr__(self): # type; () -> str - return "TableRetentionPolicy(enabled={}, days={}".format(self.enabled, self.days)[1024:] + return "TableRetentionPolicy(enabled={}, days={})".format(self.enabled, self.days)[1024:] class TableCorsRule(object): @@ -429,7 +429,7 @@ def __str__(self): def __repr__(self): # type: () -> str - return "TableSasPermissions(read={}, add={}, update={}, delete={})>".format( + return "TableSasPermissions(read={}, add={}, update={}, delete={})".format( self.read, self.add, self.update, self.delete )[1024:] From 6e803f104184604fbdb61810d71b93da41980d1b Mon Sep 17 00:00:00 2001 From: seankane-msft Date: Tue, 6 Jul 2021 12:52:46 -0400 Subject: [PATCH 6/8] fixing line too long --- sdk/tables/azure-data-tables/azure/data/tables/_models.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/sdk/tables/azure-data-tables/azure/data/tables/_models.py b/sdk/tables/azure-data-tables/azure/data/tables/_models.py index e3d2f49781f6..b94c3d15cb7a 100644 --- a/sdk/tables/azure-data-tables/azure/data/tables/_models.py +++ b/sdk/tables/azure-data-tables/azure/data/tables/_models.py @@ -279,7 +279,8 @@ def _from_generated(cls, generated): def __repr__(self): # type: () -> str - return "TableCorsRules(allowed_origins={}, allowed_methods={}, allowed_headers={}, exposed_headers={}, max_age_in_seconds={})".format( + return "TableCorsRules(allowed_origins={}, allowed_methods={}, " + \ + "allowed_headers={}, exposed_headers={}, max_age_in_seconds={})".format( self.allowed_origins, self.allowed_methods, self.allowed_headers, self.exposed_headers, self.max_age_in_seconds )[1024:] @@ -656,7 +657,8 @@ def __init__(self, **kwargs): def __repr__(self): # type: () -> str - return "AccountSasPermissions(read={}, write={}, delete={}, list={}, add={}, create={}, update={}, process={})".format( + return "AccountSasPermissions(read={}, write={}, delete={}, list={}, add={}, " + \ + "create={}, update={}, process={})".format( self.read, self.write, self.delete, self.list, self.add, self.create, self.update, self.process )[1024:] From 4e6133f2a62552a332edf8a4d56bd4437623dfcd Mon Sep 17 00:00:00 2001 From: seankane-msft Date: Tue, 6 Jul 2021 13:22:41 -0400 Subject: [PATCH 7/8] fixing tests --- sdk/tables/azure-data-tables/azure/data/tables/_models.py | 6 ++---- sdk/tables/azure-data-tables/tests/test_table.py | 3 ++- sdk/tables/azure-data-tables/tests/test_table_async.py | 3 ++- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/sdk/tables/azure-data-tables/azure/data/tables/_models.py b/sdk/tables/azure-data-tables/azure/data/tables/_models.py index b94c3d15cb7a..63c538b88aa5 100644 --- a/sdk/tables/azure-data-tables/azure/data/tables/_models.py +++ b/sdk/tables/azure-data-tables/azure/data/tables/_models.py @@ -279,8 +279,7 @@ def _from_generated(cls, generated): def __repr__(self): # type: () -> str - return "TableCorsRules(allowed_origins={}, allowed_methods={}, " + \ - "allowed_headers={}, exposed_headers={}, max_age_in_seconds={})".format( + return "TableCorsRules(allowed_origins={}, allowed_methods={}, allowed_headers={}, exposed_headers={}, max_age_in_seconds={})".format( # pylint: disable=line-too-long self.allowed_origins, self.allowed_methods, self.allowed_headers, self.exposed_headers, self.max_age_in_seconds )[1024:] @@ -657,8 +656,7 @@ def __init__(self, **kwargs): def __repr__(self): # type: () -> str - return "AccountSasPermissions(read={}, write={}, delete={}, list={}, add={}, " + \ - "create={}, update={}, process={})".format( + return "AccountSasPermissions(read={}, write={}, delete={}, list={}, add={}, create={}, update={}, process={})".format( # pylint: disable=line-too-long self.read, self.write, self.delete, self.list, self.add, self.create, self.update, self.process )[1024:] diff --git a/sdk/tables/azure-data-tables/tests/test_table.py b/sdk/tables/azure-data-tables/tests/test_table.py index 5bdca6ae32d6..6685791104ad 100644 --- a/sdk/tables/azure-data-tables/tests/test_table.py +++ b/sdk/tables/azure-data-tables/tests/test_table.py @@ -334,7 +334,7 @@ def test_set_table_acl_with_empty_signed_identifier(self, tables_storage_account self._assert_policy_datetime(dt, acl['full'].start) signed_identifiers.pop('empty') - signed_identifiers['partial'] = None + signed_identifiers['partial'] = None table.set_table_access_policy(signed_identifiers) acl = table.get_table_access_policy() @@ -397,6 +397,7 @@ def test_set_table_acl_too_many_ids(self, tables_storage_account_name, tables_pr finally: ts.delete_table(table.table_name) + @pytest.mark.live_test_only @tables_decorator def test_account_sas(self, tables_storage_account_name, tables_primary_storage_account_key): account_url = self.account_url(tables_storage_account_name, "table") diff --git a/sdk/tables/azure-data-tables/tests/test_table_async.py b/sdk/tables/azure-data-tables/tests/test_table_async.py index f8f53c4b600f..f91f8fa9347d 100644 --- a/sdk/tables/azure-data-tables/tests/test_table_async.py +++ b/sdk/tables/azure-data-tables/tests/test_table_async.py @@ -278,7 +278,7 @@ async def test_set_table_acl_with_empty_signed_identifier(self, tables_storage_a self._assert_policy_datetime(dt, acl['full'].start) signed_identifiers.pop('empty') - signed_identifiers['partial'] = None + signed_identifiers['partial'] = None await table.set_table_access_policy(signed_identifiers) acl = await table.get_table_access_policy() @@ -338,6 +338,7 @@ async def test_set_table_acl_too_many_ids(self, tables_storage_account_name, tab finally: await ts.delete_table(table.table_name) + @pytest.mark.live_test_only @tables_decorator_async async def test_account_sas(self, tables_storage_account_name, tables_primary_storage_account_key): account_url = self.account_url(tables_storage_account_name, "table") From fa11fd6f28b6173e84b69e0bb3569cbb960ffa32 Mon Sep 17 00:00:00 2001 From: seankane-msft Date: Tue, 6 Jul 2021 13:47:37 -0400 Subject: [PATCH 8/8] one last pylint issue --- sdk/tables/azure-data-tables/azure/data/tables/_models.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk/tables/azure-data-tables/azure/data/tables/_models.py b/sdk/tables/azure-data-tables/azure/data/tables/_models.py index 63c538b88aa5..0953182fc4a1 100644 --- a/sdk/tables/azure-data-tables/azure/data/tables/_models.py +++ b/sdk/tables/azure-data-tables/azure/data/tables/_models.py @@ -280,7 +280,7 @@ def _from_generated(cls, generated): def __repr__(self): # type: () -> str return "TableCorsRules(allowed_origins={}, allowed_methods={}, allowed_headers={}, exposed_headers={}, max_age_in_seconds={})".format( # pylint: disable=line-too-long - self.allowed_origins, self.allowed_methods, self.allowed_headers, self.exposed_headers, self.max_age_in_seconds + self.allowed_origins, self.allowed_methods, self.allowed_headers, self.exposed_headers, self.max_age_in_seconds # pylint: disable=line-too-long )[1024:]