diff options
author | Nejc Habjan <hab.nejc@gmail.com> | 2021-05-15 12:10:45 +0200 |
---|---|---|
committer | Nejc Habjan <hab.nejc@gmail.com> | 2021-05-15 12:10:45 +0200 |
commit | 42520705a97289ac895a6b110d34d6c115e45500 (patch) | |
tree | 7304a61559b4e309acf3d5eede4e2eadb9c7e745 /gitlab/cli.py | |
parent | f35c73e50918e4d55b70323669f394e52e75cde9 (diff) | |
download | gitlab-42520705a97289ac895a6b110d34d6c115e45500.tar.gz |
fix(cli): fix parsing CLI objects to classnames
Diffstat (limited to 'gitlab/cli.py')
-rw-r--r-- | gitlab/cli.py | 26 |
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: |