From cc47b0b7464e6c47562b70761ed7f86470708a03 Mon Sep 17 00:00:00 2001 From: Patrick Elmer Date: Tue, 15 Aug 2023 08:41:27 +0900 Subject: [PATCH] Refactor code and add option -ab=c --- .gitignore | 1 + pargv.py | 47 +++++++++++++++++++++++------------------------ 2 files changed, 24 insertions(+), 24 deletions(-) diff --git a/.gitignore b/.gitignore index f8b73e7..86c0beb 100644 --- a/.gitignore +++ b/.gitignore @@ -138,3 +138,4 @@ dmypy.json # Cython debug symbols cython_debug/ +.vscode diff --git a/pargv.py b/pargv.py index 3061bcc..cacdf71 100644 --- a/pargv.py +++ b/pargv.py @@ -18,30 +18,29 @@ def parse_args(argv=None): args.append(arg.replace('-', '_')) kwargs = {} - values = [] + value = None for arg in argv[len(args):]: - if not arg.startswith('-'): - values.append(arg) - continue - if len(values): - kwargs[key] = values - values = [] - key = arg[:2].lstrip('-') + arg[2:].replace('-', '_') - if arg.startswith('--'): - if '=' in arg: - key, value = key.split('=') - values.append(value) - kwargs[key] = values - else: - kwargs[key] = True - elif arg.startswith('-'): - for k in key: - kwargs[k] = True - key = arg[-1] - if len(values): - kwargs[key] = values - for k, v in kwargs.items(): - if isinstance(v, list) and len(v) == 1: - kwargs[k] = v[0] + if not arg.startswith('-'): + if isinstance(kwargs[key], bool): + kwargs[key] = arg + elif isinstance(kwargs[key], str): + kwargs[key] = [kwargs[key]] + [arg] + elif isinstance(kwargs[key], list): + kwargs[key].append(arg) + continue + + key = arg[:2].lstrip('-') + arg[2:].replace('-', '_') + + if '=' in key: + key, value = key.split('=') + + if not arg.startswith('--'): + for k in key[:-1]: + kwargs[k] = True + key = key[-1] + + kwargs[key] = value if value else True + value = None + return (args, kwargs)