diff options
Diffstat (limited to 'gitlab')
-rw-r--r-- | gitlab/__init__.py | 7 | ||||
-rw-r--r-- | gitlab/cli.py | 19 |
2 files changed, 22 insertions, 4 deletions
diff --git a/gitlab/__init__.py b/gitlab/__init__.py index 93e8b82..52fc7db 100644 --- a/gitlab/__init__.py +++ b/gitlab/__init__.py @@ -643,6 +643,11 @@ class GitlabObject(object): requiredCreateAttrs = [] #: Attributes that are optional when creating a new object optionalCreateAttrs = [] + #: Attributes that are required when updating an object + requiredUpdateAttrs = None + #: Attributes that are optional when updating an object + optionalUpdateAttrs = None + idAttr = 'id' shortPrintAttr = None @@ -1086,6 +1091,7 @@ class ProjectLabel(GitlabObject): idAttr = 'name' requiredDeleteAttrs = ['name'] requiredCreateAttrs = ['name', 'color'] + requiredUpdateAttrs = [] # FIXME: new_name is only valid with update optionalCreateAttrs = ['new_name'] @@ -1157,6 +1163,7 @@ class Project(GitlabObject): _url = '/projects' _constructorTypes = {'owner': 'User', 'namespace': 'Group'} requiredCreateAttrs = ['name'] + requiredUpdateAttrs = [] optionalCreateAttrs = ['default_branch', 'issues_enabled', 'wall_enabled', 'merge_requests_enabled', 'wiki_enabled', 'snippets_enabled', 'public', 'visibility_level', diff --git a/gitlab/cli.py b/gitlab/cli.py index 9c07e82..d678439 100644 --- a/gitlab/cli.py +++ b/gitlab/cli.py @@ -103,12 +103,23 @@ def populate_sub_parser_by_class(cls, sub_parser): for x in cls.optionalCreateAttrs] elif action_name == UPDATE: + id_attr = cls.idAttr.replace('_', '-') + sub_parser_action.add_argument("--%s" % id_attr, + required=True) + + attrs = (cls.requiredUpdateAttrs + if cls.requiredUpdateAttrs is not None + else cls.requiredCreateAttrs) [sub_parser_action.add_argument("--%s" % x.replace('_', '-'), required=True) - for x in cls.requiredCreateAttrs] + for x in attrs] + + attrs = (cls.optionalUpdateAttrs + if cls.optionalUpdateAttrs is not None + else cls.optionalCreateAttrs) [sub_parser_action.add_argument("--%s" % x.replace('_', '-'), required=False) - for x in cls.optionalCreateAttrs] + for x in attrs] if cls in extra_actions: for action_name in sorted(extra_actions[cls]): @@ -182,7 +193,7 @@ def do_delete(cls, gl, what, args): if not cls.canDelete: die("%s objects can't be deleted" % what) - o = do_get(cls, args, what, args) + o = do_get(cls, gl, what, args) try: o.delete() except Exception as e: @@ -193,7 +204,7 @@ def do_update(cls, gl, what, args): if not cls.canUpdate: die("%s objects can't be updated" % what) - o = do_get(cls, args, what, args) + o = do_get(cls, gl, what, args) try: for k, v in args.items(): o.__dict__[k] = v |