diff --git a/Makefile b/Makefile index 11680d8..b8acfbd 100644 --- a/Makefile +++ b/Makefile @@ -37,7 +37,7 @@ us_autocomplete_pro_api: PYTHONPATH=. python3 examples/us_autocomplete_pro_example.py us_enrichment_api: - PYTHONPATH=. python3 examples/us_enrichment_example.py + PYTHONPATH=. python3 examples/us_enrichment_example.py && PYTHONPATH=. python3 examples/us_enrichment_etag_example.py && PYTHONPATH=. python3 examples/us_enrichment_business_example.py && PYTHONPATH=. python3 examples/us_enrichment_business_name_search_example.py && PYTHONPATH=. python3 examples/us_enrichment_generic_example.py && PYTHONPATH=. python3 examples/us_enrichment_geo_reference_example.py && PYTHONPATH=. python3 examples/us_enrichment_secondary_example.py && PYTHONPATH=. python3 examples/us_enrichment_secondary_count_example.py us_extract_api: PYTHONPATH=. python3 examples/us_extract_example.py diff --git a/examples/us_enrichment_business_name_search_example.py b/examples/us_enrichment_business_name_search_example.py new file mode 100644 index 0000000..7140f79 --- /dev/null +++ b/examples/us_enrichment_business_name_search_example.py @@ -0,0 +1,66 @@ +import os + +from smartystreets_python_sdk import BasicAuthCredentials, ClientBuilder +from smartystreets_python_sdk.us_enrichment import BusinessLookup + + +def run(): + auth_id = os.environ['SMARTY_AUTH_ID'] + auth_token = os.environ['SMARTY_AUTH_TOKEN'] + + credentials = BasicAuthCredentials(auth_id, auth_token) + client = ClientBuilder(credentials).build_us_enrichment_api_client() + + lookup = BusinessLookup() + lookup.business_name = "delta air" + lookup.city = "atlanta" + + try: + summary_results = client.send_business_lookup(lookup) + except Exception as err: + print(err) + return + + if not summary_results: + print("No response returned for business name {}".format(lookup.business_name)) + return + + summary = summary_results[0] + if not summary.businesses: + print("Business name {} has no business tenants".format(lookup.business_name)) + return + + print("Matching businesses for business_name '{}':".format(lookup.business_name)) + for biz in summary.businesses: + print(" - {} (ID: {})".format(biz.company_name, biz.business_id)) + + first = summary.businesses[0] + print("\nFetching details for business: {} (ID: {})".format(first.company_name, first.business_id)) + + try: + detail_result = client.send_business_detail_lookup(first.business_id) + except Exception as err: + print(err) + return + + if detail_result is None: + print("\nNo detail result returned") + return + + print("\nDetail result:") + print_result(detail_result) + + +def print_result(obj): + for key, value in vars(obj).items(): + if value is None: + continue + if key == 'attributes': + print_result(value) + continue + print("{}: {}".format(key, value)) + print() + + +if __name__ == "__main__": + run() diff --git a/smartystreets_python_sdk/us_enrichment/client.py b/smartystreets_python_sdk/us_enrichment/client.py index 38b079e..7a2e672 100644 --- a/smartystreets_python_sdk/us_enrichment/client.py +++ b/smartystreets_python_sdk/us_enrichment/client.py @@ -107,8 +107,9 @@ def send_lookup(client: Client, lookup, response_class=Response): _is_blank(getattr(lookup, 'smartykey', None)) and _is_blank(getattr(lookup, 'street', None)) and _is_blank(getattr(lookup, 'freeform', None)) + and _is_blank(getattr(lookup, 'business_name', None)) ): - raise SmartyException("Lookup requires one of 'smartykey', 'street', or 'freeform' to be set") + raise SmartyException("Lookup requires one of 'smartykey', 'street', 'freeform', or 'business_name' to be set") request = build_request(lookup) raw = _dispatch(client, request, lookup) @@ -158,7 +159,7 @@ def _url_components(lookup): def _address_parameters(lookup): params = {} - for key in ('freeform', 'street', 'city', 'state', 'zipcode', 'features'): + for key in ('freeform', 'street', 'city', 'state', 'zipcode', 'features', 'business_name'): value = getattr(lookup, key, None) if value: params[key] = value diff --git a/smartystreets_python_sdk/us_enrichment/lookup.py b/smartystreets_python_sdk/us_enrichment/lookup.py index 8268767..5797255 100644 --- a/smartystreets_python_sdk/us_enrichment/lookup.py +++ b/smartystreets_python_sdk/us_enrichment/lookup.py @@ -28,7 +28,7 @@ def add_exclude_attribute(self, attribute): class Lookup(LookupBase): - def __init__(self, smartykey=None, dataset=None, dataSubset=None, features=None, freeform=None, street=None, city=None, state=None, zipcode=None): + def __init__(self, smartykey=None, dataset=None, dataSubset=None, features=None, freeform=None, street=None, city=None, state=None, zipcode=None, business_name=None): super().__init__() self.smartykey = smartykey self.dataset = dataset @@ -40,6 +40,7 @@ def __init__(self, smartykey=None, dataset=None, dataSubset=None, features=None, self.state = state self.zipcode = zipcode self.result = [] + self.business_name = business_name class PrincipalLookup(Lookup): diff --git a/test/us_enrichment/business_summary_test.py b/test/us_enrichment/business_summary_test.py index c141634..a454025 100644 --- a/test/us_enrichment/business_summary_test.py +++ b/test/us_enrichment/business_summary_test.py @@ -54,6 +54,27 @@ def test_business_lookup_with_freeform_builds_url(self): capturing.request.parameters['freeform'], ) + def test_business_lookup_with_business_name_builds_search_param(self): + capturing = RequestCapturingSender() + client, _ = self._client(capturing) + + lookup = BusinessLookup() + lookup.business_name = "Style Studio" + client.send_business_lookup(lookup) + + self.assertEqual("search/business", capturing.request.url_components) + self.assertEqual("Style Studio", capturing.request.parameters['business_name']) + + def test_business_lookup_omits_empty_business_name(self): + capturing = RequestCapturingSender() + client, _ = self._client(capturing) + + lookup = BusinessLookup() + lookup.freeform = "1600 amphitheatre pkwy mountain view ca" + client.send_business_lookup(lookup) + + self.assertNotIn('business_name', capturing.request.parameters) + def test_rejects_whitespace_smartykey_on_summary_lookup(self): capturing = RequestCapturingSender() client, _ = self._client(capturing)