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 ```bash
python3 run.py \ 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} \ -o ${OUTPUT_FILE_NAME} \
-s ${WIDTH},${HEIGHT} -s ${WIDTH},${HEIGHT}
``` ```
@ -31,7 +31,7 @@ python3 run.py \
Example: Example:
```bash ```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 ### ### 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> <table>
<tr><td>Option</td><td>Value</td><td>Description</td></tr> <tr><td>Option</td><td>Value</td><td>Description</td></tr>
<tr> <tr>
<td><tt>-bbox</tt>, <tt>--boundary-box</tt></td> <td><tt>-b</tt>, <tt>--boundary-box</tt></td>
<td> <td>
<tt>&lt;longitude 1&gt;,&lt;latitude 1&gt;,&lt;longitude <tt>&lt;longitude 1&gt;,&lt;latitude 1&gt;,&lt;longitude
2&gt;,&lt;latitude 2&gt;</tt> 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 = argparse.ArgumentParser()
parser.add_argument('-i', '--input', dest='input_file_name') parser.add_argument(
parser.add_argument('-o', '--output', dest='output_file_name', "-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) required=True)
parser.add_argument('-bbox', '--boundary-box', dest='boundary_box', parser.add_argument(
required=True) "-s", "--size",
parser.add_argument('-nn', '--no-draw-nodes', dest='draw_nodes', metavar="<width>,<height>",
action='store_false', default=True) help="output SVG file size in pixels",
parser.add_argument('-nw', '--no-draw-ways', dest='draw_ways', dest="size")
action='store_false', default=True) parser.add_argument(
parser.add_argument('--captions', '--no-draw-captions', dest='draw_captions', "-nn", "--no-draw-nodes",
default='main') dest="draw_nodes",
parser.add_argument('--show-missed-tags', dest='show_missed_tags', action="store_false",
action='store_true') default=True)
parser.add_argument('--no-show-missed-tags', dest='show_missed_tags', parser.add_argument(
action='store_false') "-nw", "--no-draw-ways", dest="draw_ways", action="store_false",
parser.add_argument('--overlap', dest='overlap', default=12, type=int) default=True)
parser.add_argument('-s', '--size', dest='size') parser.add_argument(
parser.add_argument('--show-index', dest='show_index', "--captions", "--no-draw-captions", dest="draw_captions",
action='store_true') default="main")
parser.add_argument('--no-show-index', dest='show_index', parser.add_argument(
action='store_false') "--show-missing-tags", dest="show_missing_tags", action="store_true")
parser.add_argument('--mode', dest='mode', default='normal') parser.add_argument(
parser.add_argument('--seed', dest='seed', default='') "--no-show-missing-tags", dest="show_missing_tags", action="store_false")
parser.add_argument('--level', dest='level', default=None) 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:]) arguments = parser.parse_args(args[1:])
@ -47,17 +69,17 @@ def parse_options(args):
def write_line(number, total): def write_line(number, total):
length = 20 length = 20
parts = length * 8 parts = length * 8
boxes = [' ', '', '', '', '', '', '', ''] boxes = [" ", "", "", "", "", "", "", ""]
if number == -1: if number == -1:
print('%3s' % '100' + ' %' + (length * '') + '') print("%3s" % "100" + " %" + (length * "") + "")
elif number % 1000 == 0: elif number % 1000 == 0:
p = number / float(total) p = number / float(total)
l = int(p * parts) l = int(p * parts)
fl = int(l / 8) fl = int(l / 8)
pr = int(l - fl * 8) pr = int(l - fl * 8)
print(('%3s' % str(int(p * 1000) / 10)) + ' %' + (fl * '') + print(("%3s" % str(int(p * 1000) / 10)) + " %" + (fl * "") +
boxes[pr] + ((length - fl - 1) * ' ') + '') boxes[pr] + ((length - fl - 1) * " ") + "")
sys.stdout.write("\033[F") sys.stdout.write("\033[F")