summaryrefslogtreecommitdiff
path: root/gitlab/cli.py
diff options
context:
space:
mode:
authorNejc Habjan <hab.nejc@gmail.com>2021-05-15 12:10:45 +0200
committerNejc Habjan <hab.nejc@gmail.com>2021-05-15 12:10:45 +0200
commit42520705a97289ac895a6b110d34d6c115e45500 (patch)
tree7304a61559b4e309acf3d5eede4e2eadb9c7e745 /gitlab/cli.py
parentf35c73e50918e4d55b70323669f394e52e75cde9 (diff)
downloadgitlab-42520705a97289ac895a6b110d34d6c115e45500.tar.gz
fix(cli): fix parsing CLI objects to classnames
Diffstat (limited to 'gitlab/cli.py')
-rw-r--r--gitlab/cli.py26
1 files changed, 19 insertions, 7 deletions
diff --git a/gitlab/cli.py b/gitlab/cli.py
index a0efeec..0ee5994 100644
--- a/gitlab/cli.py
+++ b/gitlab/cli.py
@@ -21,11 +21,18 @@ import argparse
import functools
import re
import sys
-from typing import Any, Callable, cast, Dict, Optional, Tuple, TypeVar, Union
+from typing import Any, Callable, cast, Dict, Optional, Tuple, Type, TypeVar, Union
-import gitlab.config # noqa: F401
+from requests.structures import CaseInsensitiveDict
-camel_re = re.compile("(.)([A-Z])")
+import gitlab.config
+from gitlab.base import RESTObject
+
+
+# This regex is based on:
+# https://github.com/jpvanhal/inflection/blob/master/inflection/__init__.py
+camel_upperlower_regex = re.compile(r"([A-Z]+)([A-Z][a-z])")
+camel_lowerupper_regex = re.compile(r"([a-z\d])([A-Z])")
# custom_actions = {
# cls: {
@@ -82,12 +89,17 @@ def die(msg: str, e: Optional[Exception] = None) -> None:
sys.exit(1)
-def what_to_cls(what: str) -> str:
- return "".join([s.capitalize() for s in what.split("-")])
+def what_to_cls(what: str, namespace: Type) -> RESTObject:
+ classes = CaseInsensitiveDict(namespace.__dict__)
+ lowercase_class = what.replace("-", "")
+
+ return classes[lowercase_class]
-def cls_to_what(cls: Any) -> str:
- return camel_re.sub(r"\1-\2", cls.__name__).lower()
+def cls_to_what(cls: RESTObject) -> str:
+ dasherized_uppercase = camel_upperlower_regex.sub(r"\1-\2", cls.__name__)
+ dasherized_lowercase = camel_lowerupper_regex.sub(r"\1-\2", dasherized_uppercase)
+ return dasherized_lowercase.lower()
def _get_base_parser(add_help: bool = True) -> argparse.ArgumentParser: