88from opencage .batch import OpenCageBatchGeocoder
99from opencage .version import __version__
1010
11+
1112def 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+
2527def 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
6281def 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+
83129def api_key_type (apikey ):
84130 pattern = re .compile (r"^(oc_gc_)?[0-9a-f]{32}$" )
85131
0 commit comments