Skip to content

Commit b253462

Browse files
authored
more robust fetch values from result data structure (#58)
1 parent a49a1ef commit b253462

File tree

2 files changed

+37
-4
lines changed

2 files changed

+37
-4
lines changed

opencage/batch.py

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -213,11 +213,13 @@ async def write_one_geocoding_result(self, csv_output, row_id, geocoding_result,
213213
if geocoding_result is None:
214214
row.append('')
215215
elif column in geocoding_result:
216-
row.append(geocoding_result[column])
216+
row.append(self.deep_get_result_value(geocoding_result, [column], ''))
217217
elif column in geocoding_result['components']:
218-
row.append(geocoding_result['components'][column])
218+
row.append(self.deep_get_result_value(geocoding_result, ['components', column], ''))
219219
elif column in geocoding_result['geometry']:
220-
row.append(geocoding_result['geometry'][column])
220+
row.append(self.deep_get_result_value(geocoding_result, ['geometry', column], ''))
221+
elif column == 'FIPS':
222+
row.append(self.deep_get_result_value(geocoding_result, ['annotations', 'FIPS', 'county'], ''))
221223
else:
222224
row.append('')
223225

@@ -235,7 +237,14 @@ async def write_one_geocoding_result(self, csv_output, row_id, geocoding_result,
235237
csv_output.writerow(row)
236238
self.write_counter = self.write_counter + 1
237239

238-
239240
def log(self, message):
240241
if not self.options.quiet:
241242
sys.stderr.write(f"{message}\n")
243+
244+
def deep_get_result_value(self, data, keys, default=None):
245+
for key in keys:
246+
if isinstance(data, dict):
247+
data = data.get(key, default)
248+
else:
249+
return default
250+
return data

test/test_batch.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
from opencage.batch import OpenCageBatchGeocoder
2+
3+
batch = OpenCageBatchGeocoder({})
4+
5+
def test_deep_get_result_value():
6+
result = {
7+
'annotations': {
8+
'FIPS': {
9+
'state': 'CA'
10+
}
11+
},
12+
'components': {
13+
'street': 'Main Road'
14+
}
15+
}
16+
17+
assert batch.deep_get_result_value(result, ['hello', 'world']) == None
18+
19+
assert batch.deep_get_result_value(result, ['components', 'street']) == 'Main Road'
20+
assert batch.deep_get_result_value(result, ['components', 'city']) == None
21+
assert batch.deep_get_result_value(result, ['components', 'city'], '') == ''
22+
23+
assert batch.deep_get_result_value([], ['hello', 'world']) == None
24+
assert batch.deep_get_result_value(None, ['hello', 'world']) == None

0 commit comments

Comments
 (0)