81 lines
2.7 KiB
Python
81 lines
2.7 KiB
Python
|
#
|
||
|
# Copyright 2022 Google Inc. All rights reserved.
|
||
|
#
|
||
|
#
|
||
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may not
|
||
|
# use this file except in compliance with the License. You may obtain a copy of
|
||
|
# the License at
|
||
|
#
|
||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||
|
#
|
||
|
# Unless required by applicable law or agreed to in writing, software
|
||
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||
|
# License for the specific language governing permissions and limitations under
|
||
|
# the License.
|
||
|
#
|
||
|
|
||
|
"""Performs requests to the Google Maps Address Validation API."""
|
||
|
from googlemaps import exceptions
|
||
|
|
||
|
|
||
|
_ADDRESSVALIDATION_BASE_URL = "https://addressvalidation.googleapis.com"
|
||
|
|
||
|
|
||
|
def _addressvalidation_extract(response):
|
||
|
"""
|
||
|
Mimics the exception handling logic in ``client._get_body``, but
|
||
|
for addressvalidation which uses a different response format.
|
||
|
"""
|
||
|
body = response.json()
|
||
|
return body
|
||
|
|
||
|
# if response.status_code in (200, 404):
|
||
|
# return body
|
||
|
|
||
|
# try:
|
||
|
# error = body["error"]["errors"][0]["reason"]
|
||
|
# except KeyError:
|
||
|
# error = None
|
||
|
|
||
|
# if response.status_code == 403:
|
||
|
# raise exceptions._OverQueryLimit(response.status_code, error)
|
||
|
# else:
|
||
|
# raise exceptions.ApiError(response.status_code, error)
|
||
|
|
||
|
|
||
|
def addressvalidation(client, addressLines, regionCode=None , locality=None, enableUspsCass=None):
|
||
|
"""
|
||
|
The Google Maps Address Validation API returns a verification of an address
|
||
|
See https://developers.google.com/maps/documentation/address-validation/overview
|
||
|
request must include parameters below.
|
||
|
:param addressLines: The address to validate
|
||
|
:type addressLines: array
|
||
|
:param regionCode: (optional) The country code
|
||
|
:type regionCode: string
|
||
|
:param locality: (optional) Restrict to a locality, ie:Mountain View
|
||
|
:type locality: string
|
||
|
:param enableUspsCass For the "US" and "PR" regions only, you can optionally enable the Coding Accuracy Support System (CASS) from the United States Postal Service (USPS)
|
||
|
:type locality: boolean
|
||
|
"""
|
||
|
|
||
|
params = {
|
||
|
"address":{
|
||
|
"addressLines": addressLines
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if regionCode is not None:
|
||
|
params["address"]["regionCode"] = regionCode
|
||
|
|
||
|
if locality is not None:
|
||
|
params["address"]["locality"] = locality
|
||
|
|
||
|
if enableUspsCass is not False or enableUspsCass is not None:
|
||
|
params["enableUspsCass"] = enableUspsCass
|
||
|
|
||
|
return client._request("/v1:validateAddress", {}, # No GET params
|
||
|
base_url=_ADDRESSVALIDATION_BASE_URL,
|
||
|
extract_body=_addressvalidation_extract,
|
||
|
post_json=params)
|
||
|
|