summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGauvain Pocentek <gauvain.pocentek@objectif-libre.com>2015-05-12 18:27:23 +0200
committerGauvain Pocentek <gauvain.pocentek@objectif-libre.com>2015-05-12 18:27:23 +0200
commitede1224dc3f47faf161111ca1a0911db13462b94 (patch)
tree2283b2f67eedc495e000276dee5e758e0a2f350c
parentc2d1f8e4e9fe5d94076da8bc836a99b89f6fe9af (diff)
downloadgitlab-ede1224dc3f47faf161111ca1a0911db13462b94.tar.gz
rework (and fix) the CLI parsing
-rwxr-xr-xbin/gitlab46
1 files changed, 21 insertions, 25 deletions
diff --git a/bin/gitlab b/bin/gitlab
index 5e4d44a..3967be0 100755
--- a/bin/gitlab
+++ b/bin/gitlab
@@ -68,21 +68,12 @@ def clsToWhat(cls):
def populate_sub_parser_by_class(cls, sub_parser):
- sub_parser_class = sub_parser.add_subparsers(
- dest='action',
- title="positional argument",
- description='action with %s' % cls.__name__,
- help='action to do'
- )
for action_name in ACTIONS:
attr = 'can' + action_name.capitalize()
- try:
- y = cls.__dict__[attr]
- except AttributeError:
- y = gitlab.GitlabObject.__dict__[attr]
+ y = getattr(cls, attr) or getattr(gitlab.GitlabObject, attr)
if not y:
continue
- sub_parser_action = sub_parser_class.add_parser(action_name)
+ sub_parser_action = sub_parser.add_parser(action_name)
[sub_parser_action.add_argument("--%s" % x.replace('_', '-'),
required=True)
for x in cls.requiredUrlAttrs]
@@ -119,7 +110,7 @@ def populate_sub_parser_by_class(cls, sub_parser):
if cls in extra_actions:
for action_name in sorted(extra_actions[cls]):
- sub_parser_action = sub_parser_class.add_parser(action_name)
+ sub_parser_action = sub_parser.add_parser(action_name)
d = extra_actions[cls][action_name]
[sub_parser_action.add_argument("--%s" % arg, required=True)
for arg in d['requiredAttrs']]
@@ -235,32 +226,37 @@ def do_project_owned():
if __name__ == "__main__":
ssl_verify = True
timeout = 60
+
parser = argparse.ArgumentParser(
- description='GitLab API Command Line Interface')
- parser.add_argument("-v", "--verbosity", "--fancy",
+ description="GitLab API Command Line Interface")
+ parser.add_argument("-v", "--verbose", "--fancy",
help="increase output verbosity",
action="store_true")
- parser.add_argument("--gitlab", metavar='gitlab',
+ parser.add_argument("--gitlab",
help=("Specifies which python-gitlab.cfg "
"configuration section should be used. "
"If not defined, the default selection "
"will be used."),
required=False)
- subparsers = parser.add_subparsers(
- dest='what',
- title="positional argument",
- description='GitLab object',
- help='GitLab object'
- )
+
+ subparsers = parser.add_subparsers(dest='what')
# populate argparse for all Gitlab Object
+ classes = []
for cls in gitlab.__dict__.values():
try:
if gitlab.GitlabObject in getmro(cls):
- sub_parser = subparsers.add_parser(clsToWhat(cls))
- populate_sub_parser_by_class(cls, sub_parser)
- except Exception:
+ classes.append(cls)
+ except AttributeError:
pass
+ classes.sort()
+
+ for cls in classes:
+ arg_name = clsToWhat(cls)
+ object_group = subparsers.add_parser(arg_name)
+
+ object_subparsers = object_group.add_subparsers(dest='action')
+ populate_sub_parser_by_class(cls, object_subparsers)
arg = parser.parse_args()
d = arg.__dict__
@@ -272,7 +268,7 @@ if __name__ == "__main__":
gitlab_id = arg.gitlab
# conflicts with "gitlab" attribute from GitlabObject class
d.pop("gitlab")
- verbose = arg.verbosity
+ verbose = arg.verbose
action = arg.action
what = arg.what