Refactor arguments parsing.

This commit is contained in:
Sergey Vartanov 2020-08-25 07:51:38 +03:00
parent 25a61f5a14
commit a916a3bf45
3 changed files with 53 additions and 69 deletions

View file

@ -23,7 +23,7 @@ You can run it using:
```bash
python3 run.py \
-bbox ${LONGITUDE_1},${LATITUDE_1},${LONGITUDE_2},${LATITUDE_2} \
-b ${LONGITUDE_1},${LATITUDE_1},${LONGITUDE_2},${LATITUDE_2} \
-o ${OUTPUT_FILE_NAME} \
-s ${WIDTH},${HEIGHT}
```
@ -31,7 +31,7 @@ python3 run.py \
Example:
```bash
python3 run.py -bbox 2.284,48.86,2.29,48.865 -o map.svg -s 1000,1000
python3 run.py -b 2.284,48.86,2.29,48.865 -o map.svg -s 1000,1000
```
### Main arguments ###
@ -41,7 +41,7 @@ python3 run.py -bbox 2.284,48.86,2.29,48.865 -o map.svg -s 1000,1000
<table>
<tr><td>Option</td><td>Value</td><td>Description</td></tr>
<tr>
<td><tt>-bbox</tt>, <tt>--boundary-box</tt></td>
<td><tt>-b</tt>, <tt>--boundary-box</tt></td>
<td>
<tt>&lt;longitude 1&gt;,&lt;latitude 1&gt;,&lt;longitude
2&gt;,&lt;latitude 2&gt;</tt>

View file

@ -1,38 +0,0 @@
"""
Utility for network connections.
Author: Sergey Vartanov (me@enzet.ru)
"""
import json
import os
import urllib
import urllib3
import time
from datetime import datetime, timedelta
from typing import Dict, List
def get_data(address: str, parameters: Dict[str, str], is_secure: bool=False, name: str=None) -> bytes:
"""
Construct Internet page URL and get its descriptor.
:param address: first part of URL without "http://"
:param parameters: URL parameters
:param is_secure: https or http
:param name: name to display in logs
:return: connection descriptor
"""
url = "http" + ("s" if is_secure else "") + "://" + address
if len(parameters) > 0:
url += "?" + urllib.parse.urlencode(parameters)
if not name:
name = url
print("getting " + name)
pool_manager = urllib3.PoolManager()
url = url.replace(" ", "_")
urllib3.disable_warnings()
result = pool_manager.request("GET", url)
pool_manager.clear()
time.sleep(2)
return result.data

View file

@ -11,30 +11,52 @@ def parse_options(args):
parser = argparse.ArgumentParser()
parser.add_argument('-i', '--input', dest='input_file_name')
parser.add_argument('-o', '--output', dest='output_file_name',
parser.add_argument(
"-i", "--input",
dest="input_file_name",
metavar="<path>",
help="input XML file name (if not specified, file will be downloaded"
"using OpenStreetMap API)")
parser.add_argument(
"-o", "--output",
dest="output_file_name",
metavar="<path>",
default="map.svg",
help="output SVG file name (map.svg by default)")
parser.add_argument(
"-b", "--boundary-box",
dest="boundary_box",
metavar="<lon1>,<lat1>,<lon2>,<lat2>",
help="geo boundary box, use \"m\" instead of \"-\" for negative values",
required=True)
parser.add_argument('-bbox', '--boundary-box', dest='boundary_box',
required=True)
parser.add_argument('-nn', '--no-draw-nodes', dest='draw_nodes',
action='store_false', default=True)
parser.add_argument('-nw', '--no-draw-ways', dest='draw_ways',
action='store_false', default=True)
parser.add_argument('--captions', '--no-draw-captions', dest='draw_captions',
default='main')
parser.add_argument('--show-missed-tags', dest='show_missed_tags',
action='store_true')
parser.add_argument('--no-show-missed-tags', dest='show_missed_tags',
action='store_false')
parser.add_argument('--overlap', dest='overlap', default=12, type=int)
parser.add_argument('-s', '--size', dest='size')
parser.add_argument('--show-index', dest='show_index',
action='store_true')
parser.add_argument('--no-show-index', dest='show_index',
action='store_false')
parser.add_argument('--mode', dest='mode', default='normal')
parser.add_argument('--seed', dest='seed', default='')
parser.add_argument('--level', dest='level', default=None)
parser.add_argument(
"-s", "--size",
metavar="<width>,<height>",
help="output SVG file size in pixels",
dest="size")
parser.add_argument(
"-nn", "--no-draw-nodes",
dest="draw_nodes",
action="store_false",
default=True)
parser.add_argument(
"-nw", "--no-draw-ways", dest="draw_ways", action="store_false",
default=True)
parser.add_argument(
"--captions", "--no-draw-captions", dest="draw_captions",
default="main")
parser.add_argument(
"--show-missing-tags", dest="show_missing_tags", action="store_true")
parser.add_argument(
"--no-show-missing-tags", dest="show_missing_tags", action="store_false")
parser.add_argument("--overlap", dest="overlap", default=12, type=int)
parser.add_argument(
"--show-index", dest="show_index", action="store_true")
parser.add_argument(
"--no-show-index", dest="show_index", action="store_false")
parser.add_argument("--mode", dest="mode", default="normal")
parser.add_argument("--seed", dest="seed", default="")
parser.add_argument("--level", dest="level", default=None)
arguments = parser.parse_args(args[1:])
@ -47,17 +69,17 @@ def parse_options(args):
def write_line(number, total):
length = 20
parts = length * 8
boxes = [' ', '', '', '', '', '', '', '']
boxes = [" ", "", "", "", "", "", "", ""]
if number == -1:
print('%3s' % '100' + ' %' + (length * '') + '')
print("%3s" % "100" + " %" + (length * "") + "")
elif number % 1000 == 0:
p = number / float(total)
l = int(p * parts)
fl = int(l / 8)
pr = int(l - fl * 8)
print(('%3s' % str(int(p * 1000) / 10)) + ' %' + (fl * '') +
boxes[pr] + ((length - fl - 1) * ' ') + '')
print(("%3s" % str(int(p * 1000) / 10)) + " %" + (fl * "") +
boxes[pr] + ((length - fl - 1) * " ") + "")
sys.stdout.write("\033[F")