Skip to content

Commit 78516a2

Browse files
committed
CLI: add an output column -status-
1 parent 22443d4 commit 78516a2

File tree

2 files changed

+15
-10
lines changed

2 files changed

+15
-10
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ options:
134134
--output FILENAME Output file name
135135
--headers If the first row should be treated as a header row
136136
--input-columns Comma-separated list of integers (default '1')
137-
--add-columns Comma-separated list of output columns (default 'lat,lng,_type,_category,country_code,country,state,county,_normalized_city,postcode,road,house_number,confidence,formatted')
137+
--add-columns Comma-separated list of output columns (default 'lat,lng,_type,_category,country_code,country,state,county,_normalized_city,postcode,road,house_number,confidence,formatted,json,status')
138138
--workers Number of parallel geocoding requests (default 1)
139139
--timeout Timeout in seconds (default 10)
140140
--retries Number of retries (default 5)

opencage/batch.py

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
from tqdm import tqdm
1212
import certifi
1313
import backoff
14-
from opencage.geocoder import OpenCageGeocode, OpenCageGeocodeError, _query_for_reverse_geocoding
14+
from opencage.geocoder import OpenCageGeocode, OpenCageGeocodeError, _query_for_reverse_geocoding, floatify_latlng
1515

1616
class OpenCageBatchGeocoder():
1717

@@ -36,7 +36,7 @@ async def geocode(self, csv_input, csv_output):
3636
self.log(test['error'])
3737
return
3838
if test['free'] is True and self.options.workers > 1:
39-
sys.stderr.write(f"Free trial account detected. Resetting number of workers to 1.\n")
39+
sys.stderr.write("Free trial account detected. Resetting number of workers to 1.\n")
4040
self.options.workers = 1
4141

4242
if self.options.headers:
@@ -174,15 +174,18 @@ def on_backoff(details):
174174
async def _geocode_one_address():
175175
async with OpenCageGeocode(self.options.api_key, domain=self.options.api_domain, sslcontext=self.sslcontext, user_agent_comment=self.user_agent_comment) as geocoder:
176176
geocoding_results = None
177-
params = { 'no_annotations': 1, **self.options.optional_api_params }
177+
response = None
178+
params = { 'no_annotations': 1, 'raw_response': True, **self.options.optional_api_params }
178179

179180
try:
180181
if self.options.command == 'reverse':
181182
if ',' in address:
182183
lon, lat = address.split(',')
183-
geocoding_results = await geocoder.reverse_geocode_async(lon, lat, **params)
184+
response = await geocoder.reverse_geocode_async(lon, lat, **params)
185+
geocoding_results = floatify_latlng(response['results'])
184186
else:
185-
geocoding_results = await geocoder.geocode_async(address, **params)
187+
response = await geocoder.geocode_async(address, **params)
188+
geocoding_results = floatify_latlng(response['results'])
186189
except OpenCageGeocodeError as exc:
187190
self.log(str(exc))
188191
except Exception as exc:
@@ -199,20 +202,22 @@ async def _geocode_one_address():
199202
'row_id': row_id,
200203
'thread_id': threading.get_native_id(),
201204
'request': geocoder.url + '?' + urlencode(geocoder._parse_request(address, params)),
202-
'response': geocoding_result
205+
'response': response
203206
})
204207

205-
await self.write_one_geocoding_result(csv_output, row_id, geocoding_result, original_columns)
208+
await self.write_one_geocoding_result(csv_output, row_id, geocoding_result, response, original_columns)
206209
except Exception as exc:
207210
traceback.print_exception(exc, file=sys.stderr)
208211

209212
await _geocode_one_address()
210213

211-
async def write_one_geocoding_result(self, csv_output, row_id, geocoding_result, original_columns):
214+
async def write_one_geocoding_result(self, csv_output, row_id, geocoding_result, raw_response, original_columns):
212215
row = original_columns
213216

214217
for column in self.options.add_columns:
215-
if geocoding_result is None:
218+
if column == 'status':
219+
row.append(self.deep_get_result_value(raw_response, ['status', 'message']))
220+
elif geocoding_result is None:
216221
row.append('')
217222
elif column in geocoding_result:
218223
row.append(self.deep_get_result_value(geocoding_result, [column], ''))

0 commit comments

Comments
 (0)