From 88981327180e6227e0f5e14fb463dc03d22005f7 Mon Sep 17 00:00:00 2001 From: Jacob McKenzie Date: Tue, 3 Mar 2026 11:10:04 -0700 Subject: [PATCH] Added three new fields to the Metadata struct: IANATimeZone (string), IANAUTCOffset (float32), and IANADST (bool). These three new fields are accessible via setting a new feature flag "iana-timezone" --- smartystreets_python_sdk/client_builder.py | 7 +++++++ .../us_street/metadata.py | 3 +++ test/us_street/client_test.py | 19 +++++++++++++++++++ 3 files changed, 29 insertions(+) diff --git a/smartystreets_python_sdk/client_builder.py b/smartystreets_python_sdk/client_builder.py index 5d92c62..3072e82 100644 --- a/smartystreets_python_sdk/client_builder.py +++ b/smartystreets_python_sdk/client_builder.py @@ -213,6 +213,13 @@ def with_feature_component_analysis(self): """ return self.with_custom_comma_separated_query('features', 'component-analysis') + def with_feature_iana_timezone(self): + """ + Adds to the request query to use the IANA timezone feature. + :return: Returns self to accommodate method chaining + """ + return self.with_custom_comma_separated_query('features', 'iana-timezone') + def build_international_street_api_client(self): self.ensure_url_prefix_not_null(self.INTERNATIONAL_STREET_API_URL) return InternationalStreetClient(self.build_sender(), self.serializer) diff --git a/smartystreets_python_sdk/us_street/metadata.py b/smartystreets_python_sdk/us_street/metadata.py index b10e43f..4d96628 100644 --- a/smartystreets_python_sdk/us_street/metadata.py +++ b/smartystreets_python_sdk/us_street/metadata.py @@ -20,4 +20,7 @@ def __init__(self, obj): self.time_zone = obj.get('time_zone', None) self.utc_offset = obj.get('utc_offset', None) self.obeys_dst = obj.get('dst', None) + self.iana_time_zone = obj.get('iana_time_zone', None) + self.iana_utc_offset = obj.get('iana_utc_offset', None) + self.iana_dst = obj.get('iana_dst', None) self.is_ews_match = obj.get('ews_match', None) diff --git a/test/us_street/client_test.py b/test/us_street/client_test.py index 2b83e6d..703b8b7 100644 --- a/test/us_street/client_test.py +++ b/test/us_street/client_test.py @@ -158,6 +158,9 @@ def test_full_json_response_deserialization(self): "time_zone": "Mountain", "utc_offset": -7, "dst": true, + "iana_time_zone": "America/Denver", + "iana_utc_offset": -7.0, + "iana_dst": true, "ews_match": true }, "analysis": { @@ -270,6 +273,9 @@ def test_full_json_response_deserialization(self): self.assertEqual(actual_candidate.metadata.time_zone, "Mountain") self.assertEqual(actual_candidate.metadata.utc_offset, -7) self.assertEqual(actual_candidate.metadata.obeys_dst, True) + self.assertEqual(actual_candidate.metadata.iana_time_zone, "America/Denver") + self.assertEqual(actual_candidate.metadata.iana_utc_offset, -7.0) + self.assertEqual(actual_candidate.metadata.iana_dst, True) self.assertEqual(actual_candidate.metadata.is_ews_match, True) self.assertEqual(actual_candidate.analysis.dpv_match_code, "S") self.assertEqual(actual_candidate.analysis.dpv_footnotes, "AACCRR") @@ -348,3 +354,16 @@ def test_explicit_match_strict_with_candidates(self): self.assertNotIn('match', sender.request.parameters) self.assertEqual(3, sender.request.parameters['candidates']) + def test_with_feature_iana_timezone(self): + from smartystreets_python_sdk import ClientBuilder, StaticCredentials + builder = ClientBuilder(StaticCredentials('auth-id', 'auth-token')) + builder.with_feature_iana_timezone() + self.assertEqual('iana-timezone', builder.custom_queries['features']) + + def test_with_feature_iana_timezone_and_component_analysis_should_append(self): + from smartystreets_python_sdk import ClientBuilder, StaticCredentials + builder = ClientBuilder(StaticCredentials('auth-id', 'auth-token')) + builder.with_feature_component_analysis() + builder.with_feature_iana_timezone() + self.assertEqual('component-analysis,iana-timezone', builder.custom_queries['features']) +