Skip to content

Commit fc071a0

Browse files
Samuel ScullySamuel Scully
authored andcommitted
Autofix flake8 lint
1 parent 6d52a30 commit fc071a0

21 files changed

+187
-55
lines changed

.flake8

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
[flake8]
22
max-line-length = 110
33
exclude = .git,__pycache__,build,dist
4-
ignore =
4+
ignore = W503
5+
per-file-ignores =
6+
__init__.py: F401

opencage/batch.py

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import backoff
1414
from opencage.geocoder import OpenCageGeocode, OpenCageGeocodeError, _query_for_reverse_geocoding, floatify_latlng
1515

16+
1617
class OpenCageBatchGeocoder():
1718

1819
""" Called from command_line.py
@@ -83,9 +84,9 @@ async def test_request(self):
8384
with suppress(KeyError):
8485
free = result['rate']['limit'] == 2500
8586

86-
return { 'error': None, 'free': free }
87+
return {'error': None, 'free': free}
8788
except Exception as exc:
88-
return { 'error': exc }
89+
return {'error': exc}
8990

9091
async def read_input(self, csv_input, queue):
9192
any_warnings = False
@@ -132,18 +133,20 @@ async def read_one_line(self, row, row_id):
132133
if self.options.command == 'reverse':
133134

134135
if len(address) != 2:
135-
self.log(f"Line {row_id} - Expected two comma-separated values for reverse geocoding, got {address}")
136+
self.log(
137+
f"Line {row_id} - Expected two comma-separated values for reverse geocoding, got {address}")
136138
else:
137139
# _query_for_reverse_geocoding attempts to convert into numbers. We rather have it fail
138140
# now than during the actual geocoding
139141
try:
140142
_query_for_reverse_geocoding(address[0], address[1])
141-
except:
142-
self.log(f"Line {row_id} - Does not look like latitude and longitude: '{address[0]}' and '{address[1]}'")
143+
except BaseException:
144+
self.log(
145+
f"Line {row_id} - Does not look like latitude and longitude: '{address[0]}' and '{address[1]}'")
143146
warnings = True
144147
address = []
145148

146-
return { 'row_id': row_id, 'address': ','.join(address), 'original_columns': row, 'warnings': warnings }
149+
return {'row_id': row_id, 'address': ','.join(address), 'original_columns': row, 'warnings': warnings}
147150

148151
async def worker(self, csv_output, queue, progress):
149152
while True:
@@ -163,8 +166,8 @@ async def geocode_one_address(self, csv_output, row_id, address, original_column
163166
def on_backoff(details):
164167
if not self.options.quiet:
165168
sys.stderr.write("Backing off {wait:0.1f} seconds afters {tries} tries "
166-
"calling function {target} with args {args} and kwargs "
167-
"{kwargs}\n".format(**details))
169+
"calling function {target} with args {args} and kwargs "
170+
"{kwargs}\n".format(**details))
168171

169172
@backoff.on_exception(backoff.expo,
170173
asyncio.TimeoutError,
@@ -175,7 +178,7 @@ async def _geocode_one_address():
175178
async with OpenCageGeocode(self.options.api_key, domain=self.options.api_domain, sslcontext=self.sslcontext, user_agent_comment=self.user_agent_comment) as geocoder:
176179
geocoding_results = None
177180
response = None
178-
params = { 'no_annotations': 1, 'raw_response': True, **self.options.optional_api_params }
181+
params = {'no_annotations': 1, 'raw_response': True, **self.options.optional_api_params}
179182

180183
try:
181184
if self.options.command == 'reverse':
@@ -211,7 +214,13 @@ async def _geocode_one_address():
211214

212215
await _geocode_one_address()
213216

214-
async def write_one_geocoding_result(self, csv_output, row_id, geocoding_result, raw_response, original_columns):
217+
async def write_one_geocoding_result(
218+
self,
219+
csv_output,
220+
row_id,
221+
geocoding_result,
222+
raw_response,
223+
original_columns):
215224
row = original_columns
216225

217226
for column in self.options.add_columns:
@@ -226,9 +235,12 @@ async def write_one_geocoding_result(self, csv_output, row_id, geocoding_result,
226235
elif column in geocoding_result['geometry']:
227236
row.append(self.deep_get_result_value(geocoding_result, ['geometry', column], ''))
228237
elif column == 'FIPS':
229-
row.append(self.deep_get_result_value(geocoding_result, ['annotations', 'FIPS', 'county'], ''))
238+
row.append(
239+
self.deep_get_result_value(
240+
geocoding_result, [
241+
'annotations', 'FIPS', 'county'], ''))
230242
elif column == 'json':
231-
row.append(json.dumps(geocoding_result, separators=(',', ':'))) # Compact JSON
243+
row.append(json.dumps(geocoding_result, separators=(',', ':'))) # Compact JSON
232244
else:
233245
row.append('')
234246

opencage/command_line.py

Lines changed: 61 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
from opencage.batch import OpenCageBatchGeocoder
99
from opencage.version import __version__
1010

11+
1112
def main(args=sys.argv[1:]):
1213
options = parse_args(args)
1314

@@ -22,6 +23,7 @@ def main(args=sys.argv[1:]):
2223

2324
geocoder(csv_input=reader, csv_output=writer)
2425

26+
2527
def parse_args(args):
2628
if len(args) == 0:
2729
print("To display help use 'opencage -h', 'opencage forward -h' or 'opencage reverse -h'", file=sys.stderr)
@@ -33,13 +35,27 @@ def parse_args(args):
3335
subparsers = parser.add_subparsers(dest='command')
3436
subparsers.required = True
3537

36-
subparser_forward = subparsers.add_parser('forward', help="Forward geocode a file (input is address, add coordinates)")
37-
subparser_reverse = subparsers.add_parser('reverse', help="Reverse geocode a file (input is coordinates, add full address)")
38+
subparser_forward = subparsers.add_parser(
39+
'forward', help="Forward geocode a file (input is address, add coordinates)")
40+
subparser_reverse = subparsers.add_parser(
41+
'reverse', help="Reverse geocode a file (input is coordinates, add full address)")
3842

3943
for subparser in [subparser_forward, subparser_reverse]:
4044
subparser.add_argument("--api-key", required=True, type=api_key_type, help="Your OpenCage API key")
41-
subparser.add_argument("--input", required=True, type=argparse.FileType('r', encoding='utf-8'), help="Input file name", metavar='FILENAME')
42-
subparser.add_argument("--output", required=True, type=str, help="Output file name", metavar='FILENAME')
45+
subparser.add_argument(
46+
"--input",
47+
required=True,
48+
type=argparse.FileType(
49+
'r',
50+
encoding='utf-8'),
51+
help="Input file name",
52+
metavar='FILENAME')
53+
subparser.add_argument(
54+
"--output",
55+
required=True,
56+
type=str,
57+
help="Output file name",
58+
metavar='FILENAME')
4359

4460
add_optional_arguments(subparser)
4561

@@ -49,7 +65,10 @@ def parse_args(args):
4965
if options.overwrite:
5066
os.remove(options.output)
5167
else:
52-
print(f"Error: The output file '{options.output}' already exists. You can add --overwrite to your command.", file=sys.stderr)
68+
print(
69+
f"Error: The output file '{
70+
options.output}' already exists. You can add --overwrite to your command.",
71+
file=sys.stderr)
5372
sys.exit(1)
5473

5574
if 0 in options.input_columns:
@@ -60,18 +79,44 @@ def parse_args(args):
6079

6180

6281
def add_optional_arguments(parser):
63-
parser.add_argument("--headers", action="store_true", help="If the first row should be treated as a header row")
82+
parser.add_argument(
83+
"--headers",
84+
action="store_true",
85+
help="If the first row should be treated as a header row")
6486
default_input_cols = '1,2' if re.match(r'.*reverse', parser.prog) else '1'
65-
parser.add_argument("--input-columns", type=comma_separated_type(int), default=default_input_cols, help=f"Comma-separated list of integers (default '{default_input_cols}')", metavar='')
87+
parser.add_argument(
88+
"--input-columns",
89+
type=comma_separated_type(int),
90+
default=default_input_cols,
91+
help=f"Comma-separated list of integers (default '{default_input_cols}')",
92+
metavar='')
6693
default_add_cols = 'lat,lng,_type,_category,country_code,country,state,county,_normalized_city,postcode,road,house_number,confidence,formatted'
67-
parser.add_argument("--add-columns", type=comma_separated_type(str), default=default_add_cols, help=f"Comma-separated list of output columns (default '{default_add_cols}')", metavar='')
68-
parser.add_argument("--workers", type=ranged_type(int, 1, 20), default=1, help="Number of parallel geocoding requests (default 1)", metavar='')
69-
parser.add_argument("--timeout", type=ranged_type(int, 1, 60), default=10, help="Timeout in seconds (default 10)", metavar='')
70-
parser.add_argument("--retries", type=ranged_type(int, 1, 60), default=10, help="Number of retries (default 5)", metavar='')
71-
parser.add_argument("--api-domain", type=str, default="api.opencagedata.com", help="API domain (default api.opencagedata.com)", metavar='')
72-
parser.add_argument("--optional-api-params", type=comma_separated_dict_type, default="", help="Extra parameters for each request (e.g. language=fr,no_dedupe=1)", metavar='')
73-
parser.add_argument("--limit", type=int, default=0, help="Stop after this number of lines in the input", metavar='')
74-
parser.add_argument("--unordered", action="store_true", help="Allow the output lines to be in different order (can be faster)")
94+
parser.add_argument(
95+
"--add-columns",
96+
type=comma_separated_type(str),
97+
default=default_add_cols,
98+
help=f"Comma-separated list of output columns (default '{default_add_cols}')",
99+
metavar='')
100+
parser.add_argument("--workers", type=ranged_type(int, 1, 20), default=1,
101+
help="Number of parallel geocoding requests (default 1)", metavar='')
102+
parser.add_argument("--timeout", type=ranged_type(int, 1, 60), default=10,
103+
help="Timeout in seconds (default 10)", metavar='')
104+
parser.add_argument("--retries", type=ranged_type(int, 1, 60), default=10,
105+
help="Number of retries (default 5)", metavar='')
106+
parser.add_argument("--api-domain", type=str, default="api.opencagedata.com",
107+
help="API domain (default api.opencagedata.com)", metavar='')
108+
parser.add_argument("--optional-api-params", type=comma_separated_dict_type, default="",
109+
help="Extra parameters for each request (e.g. language=fr,no_dedupe=1)", metavar='')
110+
parser.add_argument(
111+
"--limit",
112+
type=int,
113+
default=0,
114+
help="Stop after this number of lines in the input",
115+
metavar='')
116+
parser.add_argument(
117+
"--unordered",
118+
action="store_true",
119+
help="Allow the output lines to be in different order (can be faster)")
75120
parser.add_argument("--dry-run", action="store_true", help="Read the input file but no geocoding")
76121
parser.add_argument("--no-progress", action="store_true", help="Display no progress bar")
77122
parser.add_argument("--quiet", action="store_true", help="No progress bar and no messages")
@@ -80,6 +125,7 @@ def add_optional_arguments(parser):
80125

81126
return parser
82127

128+
83129
def api_key_type(apikey):
84130
pattern = re.compile(r"^(oc_gc_)?[0-9a-f]{32}$")
85131

opencage/geocoder.py

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,11 @@
1717

1818
DEFAULT_DOMAIN = 'api.opencagedata.com'
1919

20+
2021
def backoff_max_time():
2122
return int(os.environ.get('BACKOFF_MAX_TIME', '120'))
2223

24+
2325
class OpenCageGeocodeError(Exception):
2426

2527
"""Base class for all errors/exceptions that can happen when geocoding."""
@@ -38,7 +40,7 @@ def __init__(self, bad_value):
3840
self.bad_value = bad_value
3941

4042
def __unicode__(self):
41-
return "Input must be a unicode string, not "+repr(self.bad_value)[:100]
43+
return "Input must be a unicode string, not " + repr(self.bad_value)[:100]
4244

4345
__str__ = __unicode__
4446

@@ -104,8 +106,8 @@ class SSLError(OpenCageGeocodeError):
104106
def __unicode__(self):
105107
"""Convert exception to a string."""
106108
return ("SSL Certificate error connecting to OpenCage API. This is usually due to "
107-
"outdated CA root certificates of the operating system. "
108-
)
109+
"outdated CA root certificates of the operating system. "
110+
)
109111

110112
__str__ = __unicode__
111113

@@ -131,7 +133,13 @@ class OpenCageGeocode:
131133

132134
session = None
133135

134-
def __init__(self, key, protocol='https', domain=DEFAULT_DOMAIN, sslcontext=None, user_agent_comment=None):
136+
def __init__(
137+
self,
138+
key,
139+
protocol='https',
140+
domain=DEFAULT_DOMAIN,
141+
sslcontext=None,
142+
user_agent_comment=None):
135143
"""Constructor."""
136144
self.key = key
137145

@@ -334,8 +342,8 @@ def _parse_request(self, query, params):
334342
if not isinstance(query, str):
335343
raise InvalidInputError(bad_value=query)
336344

337-
data = { 'q': query, 'key': self.key }
338-
data.update(params) # Add user parameters
345+
data = {'q': query, 'key': self.key}
346+
data.update(params) # Add user parameters
339347
return data
340348

341349

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
#/usr/bin/env python
1+
#!/usr/bin/env python
22

33
import os
44
import sys

test/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
import sys
2-
sys.path.insert(0,'.')
2+
sys.path.insert(0, '.')

0 commit comments

Comments
 (0)