3838import aiohttp
3939import backoff
4040import certifi
41+ import pkg_resources
4142from tqdm import tqdm
42- from opencage .geocoder import OpenCageGeocode , SSLError
43+ import opencage
44+ from opencage .geocoder import OpenCageGeocode , OpenCageGeocodeError
4345
4446# Use certificates from the certifi package instead of those of the operating system
4547# https://pypi.org/project/certifi/
5052
5153
5254
53-
54-
5555API_KEY = ''
5656FILENAME_INPUT_CSV = 'file_to_geocode.csv'
5757FILENAME_OUTPUT_CSV = 'file_geocoded.csv'
7070
7171
7272
73+ # Check OpenCage geocoder is the latest version
74+ #
75+ minimum_required_version = '2.3.1'
76+ package_version = pkg_resources .get_distribution ('opencage' ).version
77+ if pkg_resources .parse_version (package_version ) < pkg_resources .parse_version (minimum_required_version ):
78+ sys .stderr .write (f"At least version { minimum_required_version } of opencage geocoder package required. " )
79+ sys .stderr .write (f"Try upgrading by running 'pip install --upgrade opencage'.\n " )
80+ sys .exit (1 )
7381
7482
83+ # Check API key present
84+ #
85+ if len (API_KEY ) < 32 :
86+ sys .stderr .write (f"API_KEY '{ API_KEY } ' does not look valid.\n " )
87+ sys .exit (1 )
7588
7689
90+ # Don't overwrite output file
91+ #
7792if os .path .exists (FILENAME_OUTPUT_CSV ):
7893 sys .stderr .write (f"The output file '{ FILENAME_OUTPUT_CSV } ' already exists.\n " )
7994 sys .exit (1 )
@@ -144,6 +159,8 @@ def backoff_hdlr(details):
144159async def geocode_one_address (address , address_id ):
145160 async with OpenCageGeocode (API_KEY , domain = API_DOMAIN , sslcontext = sslcontext ) as geocoder :
146161 global FORWARD_OR_REVERSE
162+
163+ geocoding_results = None
147164 try :
148165 if FORWARD_OR_REVERSE == 'reverse' or \
149166 (FORWARD_OR_REVERSE == 'guess' and guess_text_is_coordinate_pair (address )):
@@ -159,9 +176,8 @@ async def geocode_one_address(address, address_id):
159176 # countrycode, language, etc
160177 # see the full list: https://opencagedata.com/api#forward-opt
161178 geocoding_results = await geocoder .geocode_async (address , no_annotations = 1 )
162- except SSLError as exc :
163- sys .stderr .write (str (exc ))
164-
179+ except OpenCageGeocodeError as exc :
180+ sys .stderr .write (str (exc ) + "\n " )
165181 except Exception as exc :
166182 traceback .print_exception (exc , file = sys .stderr )
167183
0 commit comments