Package argvsucks
Expand source code
def handle_command_line(arguments, **defaults_or_types):
"""
All arguments are keyworded, except boolean ones.
>>> handle_command_line(["program ···", "start", "end=0", "finish", "n=5", "name=Foo", "lst=a,b,c", "v=0.3", "txt=text"], n=int, start=False, end=bool, lst=list, v=float, txt=str)
{'start': True, 'end': False, 'finish': True, 'n': 5, 'name': 'Foo', 'lst': ['a', 'b', 'c'], 'v': 0.3, 'txt': 'text'}
"""
kwargs = {}
types = defaults_or_types
for param, value in defaults_or_types.items():
if not isinstance(value, type):
types[param] = type(value)
kwargs[param] = value
for item in arguments[1:]:
if "=" in item:
k, v = item.split("=")
if k in types:
if types[k] == int:
kwargs[k] = int(v)
elif types[k] == str:
kwargs[k] = v
elif types[k] == float:
kwargs[k] = float(v)
elif types[k] == bool:
kwargs[k] = bool(int(v))
elif types[k] == list:
kwargs[k] = v.split(",")
else: # pragma: no cover
raise Exception(f"Unhandled type: `{types[k]}`.")
else:
kwargs[k] = v
else:
kwargs[item] = True
return kwargs
Functions
def handle_command_line(arguments, **defaults_or_types)
-
All arguments are keyworded, except boolean ones.
>>> handle_command_line(["program ···", "start", "end=0", "finish", "n=5", "name=Foo", "lst=a,b,c", "v=0.3", "txt=text"], n=int, start=False, end=bool, lst=list, v=float, txt=str) {'start': True, 'end': False, 'finish': True, 'n': 5, 'name': 'Foo', 'lst': ['a', 'b', 'c'], 'v': 0.3, 'txt': 'text'}
Expand source code
def handle_command_line(arguments, **defaults_or_types): """ All arguments are keyworded, except boolean ones. >>> handle_command_line(["program ···", "start", "end=0", "finish", "n=5", "name=Foo", "lst=a,b,c", "v=0.3", "txt=text"], n=int, start=False, end=bool, lst=list, v=float, txt=str) {'start': True, 'end': False, 'finish': True, 'n': 5, 'name': 'Foo', 'lst': ['a', 'b', 'c'], 'v': 0.3, 'txt': 'text'} """ kwargs = {} types = defaults_or_types for param, value in defaults_or_types.items(): if not isinstance(value, type): types[param] = type(value) kwargs[param] = value for item in arguments[1:]: if "=" in item: k, v = item.split("=") if k in types: if types[k] == int: kwargs[k] = int(v) elif types[k] == str: kwargs[k] = v elif types[k] == float: kwargs[k] = float(v) elif types[k] == bool: kwargs[k] = bool(int(v)) elif types[k] == list: kwargs[k] = v.split(",") else: # pragma: no cover raise Exception(f"Unhandled type: `{types[k]}`.") else: kwargs[k] = v else: kwargs[item] = True return kwargs