summaryrefslogtreecommitdiff
path: root/src/xi.py
diff options
context:
space:
mode:
authordavidovski <david@davidovski.xyz>2021-10-30 17:58:56 +0100
committerdavidovski <david@davidovski.xyz>2021-10-30 17:58:56 +0100
commit8799108979f6ffb12e28f0c871a0759c9b45e322 (patch)
tree5b2af417bd35d62940ca1def081fbcbe93ec6170 /src/xi.py
parent694d02b42eb247ab93bd15c26f5e70ce1bcd4cd0 (diff)
added argument parsing
Diffstat (limited to 'src/xi.py')
-rw-r--r--src/xi.py89
1 files changed, 88 insertions, 1 deletions
diff --git a/src/xi.py b/src/xi.py
index 8240fc1..0711f0a 100644
--- a/src/xi.py
+++ b/src/xi.py
@@ -1 +1,88 @@
-print("xixixixixi")
+import sys
+
+options = {
+ "y" : {
+ "name" : "no-confirm",
+ "flag" : True,
+ "desc": "will not prompt the user"
+ },
+ "r" : {
+ "name" : "root",
+ "flag" : False,
+ "desc" : "specify the directory to use as the system root",
+ "default" : "/"
+ },
+ "h": {
+ "name": "help",
+ "flag" : True,
+ "desc" : "prints the command usage and exists the program",
+ }
+ }
+
+def parse_args():
+
+ # re-organise the options by name rather than by single letter
+ # a dict with "name": option_leter
+ names = { v["name"] if v["name"] else k : k for k,v in options.items()}
+
+ args = sys.argv
+ index = 1
+
+ # save all of the options into a "parsed" dictionary
+ parsed = {"other" : []}
+
+ while index < len(args):
+ arg = args[index]
+
+ if len(arg) > 1 and arg[0] == "-":
+ option = None
+
+ # is a named argument with a --
+ if arg[1] == "-" and len(arg) > 2 and arg[2:].split("=")[0] in names:
+ option = names[arg[2:].split("=")[0]]
+ # is a single letter argument with a -
+ elif arg[1] in options:
+ option = arg[1]
+ else:
+ parsed["other"].append(arg)
+
+ # add the option and any values ot the parsed dict
+ if option is not None:
+ if options[option]["flag"]:
+ parsed[option] = True
+ else:
+ if "=" in arg:
+ parsed[option] = arg.split("=")[1]
+ else:
+ index += 1
+ parsed[option] = args[index]
+ else:
+ parsed["other"].append(arg)
+
+
+ index += 1
+
+ # add all default values to the parsed options
+ for option in options:
+ if not option in parsed:
+ if options[option]["flag"]:
+ parsed[option] = False
+ else:
+ parsed[option] = options[option]["default"]
+
+ return parsed
+
+def print_usage():
+ for option,o in options.items():
+ name = o["name"]
+ description = o["desc"]
+ d = ("[default=" + o["default"] + "]") if not o["flag"] else ""
+
+ print(f"\t-{option}, --{name}\t{d}")
+ print(f"\t\t{description}\n")
+
+
+opts = parse_args()
+if opts["h"]:
+ print_usage()
+