Skip to content

Commit 534a00f

Browse files
committed
feat(api): convert gitlab.const to Enums
This allows accessing the elements by value, i.e.: import gitlab.const gitlab.const.AccessLevel(20)
1 parent 2708f91 commit 534a00f

File tree

1 file changed

+77
-28
lines changed

1 file changed

+77
-28
lines changed

gitlab/const.py

Lines changed: 77 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
# You should have received a copy of the GNU Lesser General Public License
1616
# along with this program. If not, see <http://www.gnu.org/licenses/>.
1717

18+
from enum import Enum, IntEnum
19+
1820
from gitlab.__version__ import __title__, __version__
1921

2022
# NOTE(jlvillal): '_DEPRECATED' only affects users accessing constants via the
@@ -52,42 +54,89 @@
5254
"VISIBILITY_PUBLIC",
5355
]
5456

57+
58+
# https://gitlab.com/gitlab-org/gitlab/-/blob/e97357824bedf007e75f8782259fe07435b64fbb/lib/gitlab/access.rb#L12-18
59+
class AccessLevel(IntEnum):
60+
NO_ACCESS: int = 0
61+
MINIMAL_ACCESS: int = 5
62+
GUEST: int = 10
63+
REPORTER: int = 20
64+
DEVELOPER: int = 30
65+
MAINTAINER: int = 40
66+
OWNER: int = 50
67+
68+
69+
# https://gitlab.com/gitlab-org/gitlab/-/blob/e97357824bedf007e75f8782259fe07435b64fbb/lib/gitlab/visibility_level.rb#L23-25
70+
class Visibility(Enum):
71+
PRIVATE: str = "private"
72+
INTERNAL: str = "internal"
73+
PUBLIC: str = "public"
74+
75+
76+
class NotificationLevel(Enum):
77+
DISABLED: str = "disabled"
78+
PARTICIPATING: str = "participating"
79+
WATCH: str = "watch"
80+
GLOBAL: str = "global"
81+
MENTION: str = "mention"
82+
CUSTOM: str = "custom"
83+
84+
85+
# https://gitlab.com/gitlab-org/gitlab/-/blob/e97357824bedf007e75f8782259fe07435b64fbb/app/views/search/_category.html.haml#L10-37
86+
class SearchScope(Enum):
87+
# all scopes (global, group and project)
88+
PROJECTS: str = "projects"
89+
ISSUES: str = "issues"
90+
MERGE_REQUESTS: str = "merge_requests"
91+
MILESTONES: str = "milestones"
92+
WIKI_BLOBS: str = "wiki_blobs"
93+
COMMITS: str = "commits"
94+
BLOBS: str = "blobs"
95+
USERS: str = "users"
96+
97+
# specific global scope
98+
GLOBAL_SNIPPET_TITLES: str = "snippet_titles"
99+
100+
# specific project scope
101+
PROJECT_NOTES: str = "notes"
102+
103+
55104
DEFAULT_URL: str = "https://gitlab.com"
56105

57-
NO_ACCESS: int = 0
58-
MINIMAL_ACCESS: int = 5
59-
GUEST_ACCESS: int = 10
60-
REPORTER_ACCESS: int = 20
61-
DEVELOPER_ACCESS: int = 30
62-
MAINTAINER_ACCESS: int = 40
63-
OWNER_ACCESS: int = 50
64-
65-
VISIBILITY_PRIVATE: str = "private"
66-
VISIBILITY_INTERNAL: str = "internal"
67-
VISIBILITY_PUBLIC: str = "public"
68-
69-
NOTIFICATION_LEVEL_DISABLED: str = "disabled"
70-
NOTIFICATION_LEVEL_PARTICIPATING: str = "participating"
71-
NOTIFICATION_LEVEL_WATCH: str = "watch"
72-
NOTIFICATION_LEVEL_GLOBAL: str = "global"
73-
NOTIFICATION_LEVEL_MENTION: str = "mention"
74-
NOTIFICATION_LEVEL_CUSTOM: str = "custom"
106+
NO_ACCESS = AccessLevel.NO_ACCESS.value
107+
MINIMAL_ACCESS = AccessLevel.MINIMAL_ACCESS.value
108+
GUEST_ACCESS = AccessLevel.GUEST.value
109+
REPORTER_ACCESS = AccessLevel.REPORTER.value
110+
DEVELOPER_ACCESS = AccessLevel.DEVELOPER.value
111+
MAINTAINER_ACCESS = AccessLevel.MAINTAINER.value
112+
OWNER_ACCESS = AccessLevel.OWNER.value
113+
114+
VISIBILITY_PRIVATE = Visibility.PRIVATE.value
115+
VISIBILITY_INTERNAL = Visibility.INTERNAL.value
116+
VISIBILITY_PUBLIC = Visibility.PUBLIC.value
117+
118+
NOTIFICATION_LEVEL_DISABLED = NotificationLevel.DISABLED.value
119+
NOTIFICATION_LEVEL_PARTICIPATING = NotificationLevel.PARTICIPATING.value
120+
NOTIFICATION_LEVEL_WATCH = NotificationLevel.WATCH.value
121+
NOTIFICATION_LEVEL_GLOBAL = NotificationLevel.GLOBAL.value
122+
NOTIFICATION_LEVEL_MENTION = NotificationLevel.MENTION.value
123+
NOTIFICATION_LEVEL_CUSTOM = NotificationLevel.CUSTOM.value
75124

76125
# Search scopes
77126
# all scopes (global, group and project)
78-
SEARCH_SCOPE_PROJECTS: str = "projects"
79-
SEARCH_SCOPE_ISSUES: str = "issues"
80-
SEARCH_SCOPE_MERGE_REQUESTS: str = "merge_requests"
81-
SEARCH_SCOPE_MILESTONES: str = "milestones"
82-
SEARCH_SCOPE_WIKI_BLOBS: str = "wiki_blobs"
83-
SEARCH_SCOPE_COMMITS: str = "commits"
84-
SEARCH_SCOPE_BLOBS: str = "blobs"
85-
SEARCH_SCOPE_USERS: str = "users"
127+
SEARCH_SCOPE_PROJECTS = SearchScope.PROJECTS.value
128+
SEARCH_SCOPE_ISSUES = SearchScope.ISSUES.value
129+
SEARCH_SCOPE_MERGE_REQUESTS = SearchScope.MERGE_REQUESTS.value
130+
SEARCH_SCOPE_MILESTONES = SearchScope.MILESTONES.value
131+
SEARCH_SCOPE_WIKI_BLOBS = SearchScope.WIKI_BLOBS.value
132+
SEARCH_SCOPE_COMMITS = SearchScope.COMMITS.value
133+
SEARCH_SCOPE_BLOBS = SearchScope.BLOBS.value
134+
SEARCH_SCOPE_USERS = SearchScope.USERS.value
86135

87136
# specific global scope
88-
SEARCH_SCOPE_GLOBAL_SNIPPET_TITLES: str = "snippet_titles"
137+
SEARCH_SCOPE_GLOBAL_SNIPPET_TITLES = SearchScope.GLOBAL_SNIPPET_TITLES.value
89138

90139
# specific project scope
91-
SEARCH_SCOPE_PROJECT_NOTES: str = "notes"
140+
SEARCH_SCOPE_PROJECT_NOTES = SearchScope.PROJECT_NOTES.value
92141

93142
USER_AGENT: str = f"{__title__}/{__version__}"

0 commit comments

Comments
 (0)