From: Ian Jackson Date: Sun, 20 Oct 2019 17:57:27 +0000 (+0100) Subject: make-secnet-sites: Use argparse rather than ad-hoc parser X-Git-Tag: v0.5.0~24 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=secnet.git;a=commitdiff_plain;h=a43fb27e0b884c9ff4b118b454a36db272380b99 make-secnet-sites: Use argparse rather than ad-hoc parser This is much less ridiculous now. Signed-off-by: Ian Jackson --- diff --git a/make-secnet-sites b/make-secnet-sites index e344886..1e6a65b 100755 --- a/make-secnet-sites +++ b/make-secnet-sites @@ -60,6 +60,7 @@ import sys import os import getopt import re +import argparse import ipaddress @@ -79,24 +80,30 @@ if version_info.major == 2: # for python2 import io open=lambda f,m='r': io.open(f,m,encoding='utf-8') -# Are we being invoked from userv? -service=0 -# If we are, which group does the caller want to modify? -group=None - -if len(sys.argv)<2: - inputfile=None - of=sys.stdout -else: - if sys.argv[1]=='-u': - if len(sys.argv)!=6: +def parse_args(): + global service + global inputfile + global header + global groupfiledir + global sitesfile + global group + global user + global of + + ap = argparse.ArgumentParser(description='process secnet sites files') + ap.add_argument('--userv', '-u', action='store_true', + help='userv service fragment update mode') + ap.add_argument('--prefix', '-P', nargs=1, + help='set prefix') + ap.add_argument('arg',nargs=argparse.REMAINDER) + av = ap.parse_args() + #print(repr(av), file=sys.stderr) + service = 1 if av.userv else 0 + if service: + if len(av.arg)!=4: print("Wrong number of arguments") sys.exit(1) - service=1 - header=sys.argv[2] - groupfiledir=sys.argv[3] - sitesfile=sys.argv[4] - group=sys.argv[5] + (header, groupfiledir, sitesfile, group) = av.arg if "USERV_USER" not in os.environ: print("Environment variable USERV_USER not found") sys.exit(1) @@ -113,16 +120,14 @@ else: print("caller not in group %s"%group) sys.exit(1) else: - if sys.argv[1]=='-P': - prefix=sys.argv[2] - sys.argv[1:3]=[] - if len(sys.argv)>3: + if len(av.arg)>3: print("Too many arguments") sys.exit(1) - inputfile=sys.argv[1] - of=sys.stdout - if len(sys.argv)>2: - of=open(sys.argv[2],'w') + (inputfile, outputfile) = (av.arg + [None]*2)[0:2] + if outputfile is None: of=sys.stdout + else: of=open(sys.argv[2],'w') + +parse_args() # Classes describing possible datatypes in the configuration file