Skip to content

Commit ba2539e

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 57283fc commit ba2539e

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,44 +15,93 @@
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

22+
23+
# https://gitlab.com/gitlab-org/gitlab/-/blob/e97357824bedf007e75f8782259fe07435b64fbb/lib/gitlab/access.rb#L12-18
24+
class AccessLevel(IntEnum):
25+
NO_ACCESS: int = 0
26+
MINIMAL_ACCESS: int = 5
27+
GUEST: int = 10
28+
REPORTER: int = 20
29+
DEVELOPER: int = 30
30+
MAINTAINER: int = 40
31+
OWNER: int = 50
32+
33+
34+
# https://gitlab.com/gitlab-org/gitlab/-/blob/e97357824bedf007e75f8782259fe07435b64fbb/lib/gitlab/visibility_level.rb#L23-25
35+
class Visibility(Enum):
36+
PRIVATE: str = "private"
37+
INTERNAL: str = "internal"
38+
PUBLIC: str = "public"
39+
40+
41+
class NotificationLevel(Enum):
42+
DISABLED: str = "disabled"
43+
PARTICIPATING: str = "participating"
44+
WATCH: str = "watch"
45+
GLOBAL: str = "global"
46+
MENTION: str = "mention"
47+
CUSTOM: str = "custom"
48+
49+
50+
# https://gitlab.com/gitlab-org/gitlab/-/blob/e97357824bedf007e75f8782259fe07435b64fbb/app/views/search/_category.html.haml#L10-37
51+
class SearchScope(Enum):
52+
# all scopes (global, group and project)
53+
PROJECTS: str = "projects"
54+
ISSUES: str = "issues"
55+
MERGE_REQUESTS: str = "merge_requests"
56+
MILESTONES: str = "milestones"
57+
WIKI_BLOBS: str = "wiki_blobs"
58+
COMMITS: str = "commits"
59+
BLOBS: str = "blobs"
60+
USERS: str = "users"
61+
62+
# specific global scope
63+
GLOBAL_SNIPPET_TITLES: str = "snippet_titles"
64+
65+
# specific project scope
66+
PROJECT_NOTES: str = "notes"
67+
68+
2069
DEFAULT_URL: str = "https://gitlab.com"
2170

22-
NO_ACCESS: int = 0
23-
MINIMAL_ACCESS: int = 5
24-
GUEST_ACCESS: int = 10
25-
REPORTER_ACCESS: int = 20
26-
DEVELOPER_ACCESS: int = 30
27-
MAINTAINER_ACCESS: int = 40
28-
OWNER_ACCESS: int = 50
29-
30-
VISIBILITY_PRIVATE: str = "private"
31-
VISIBILITY_INTERNAL: str = "internal"
32-
VISIBILITY_PUBLIC: str = "public"
33-
34-
NOTIFICATION_LEVEL_DISABLED: str = "disabled"
35-
NOTIFICATION_LEVEL_PARTICIPATING: str = "participating"
36-
NOTIFICATION_LEVEL_WATCH: str = "watch"
37-
NOTIFICATION_LEVEL_GLOBAL: str = "global"
38-
NOTIFICATION_LEVEL_MENTION: str = "mention"
39-
NOTIFICATION_LEVEL_CUSTOM: str = "custom"
71+
NO_ACCESS = AccessLevel.NO_ACCESS.value
72+
MINIMAL_ACCESS = AccessLevel.MINIMAL_ACCESS.value
73+
GUEST_ACCESS = AccessLevel.GUEST.value
74+
REPORTER_ACCESS = AccessLevel.REPORTER.value
75+
DEVELOPER_ACCESS = AccessLevel.DEVELOPER.value
76+
MAINTAINER_ACCESS = AccessLevel.MAINTAINER.value
77+
OWNER_ACCESS = AccessLevel.OWNER.value
78+
79+
VISIBILITY_PRIVATE = Visibility.PRIVATE.value
80+
VISIBILITY_INTERNAL = Visibility.INTERNAL.value
81+
VISIBILITY_PUBLIC = Visibility.PUBLIC.value
82+
83+
NOTIFICATION_LEVEL_DISABLED = NotificationLevel.DISABLED.value
84+
NOTIFICATION_LEVEL_PARTICIPATING = NotificationLevel.PARTICIPATING.value
85+
NOTIFICATION_LEVEL_WATCH = NotificationLevel.WATCH.value
86+
NOTIFICATION_LEVEL_GLOBAL = NotificationLevel.GLOBAL.value
87+
NOTIFICATION_LEVEL_MENTION = NotificationLevel.MENTION.value
88+
NOTIFICATION_LEVEL_CUSTOM = NotificationLevel.CUSTOM.value
4089

4190
# Search scopes
4291
# all scopes (global, group and project)
43-
SEARCH_SCOPE_PROJECTS: str = "projects"
44-
SEARCH_SCOPE_ISSUES: str = "issues"
45-
SEARCH_SCOPE_MERGE_REQUESTS: str = "merge_requests"
46-
SEARCH_SCOPE_MILESTONES: str = "milestones"
47-
SEARCH_SCOPE_WIKI_BLOBS: str = "wiki_blobs"
48-
SEARCH_SCOPE_COMMITS: str = "commits"
49-
SEARCH_SCOPE_BLOBS: str = "blobs"
50-
SEARCH_SCOPE_USERS: str = "users"
92+
SEARCH_SCOPE_PROJECTS = SearchScope.PROJECTS.value
93+
SEARCH_SCOPE_ISSUES = SearchScope.ISSUES.value
94+
SEARCH_SCOPE_MERGE_REQUESTS = SearchScope.MERGE_REQUESTS.value
95+
SEARCH_SCOPE_MILESTONES = SearchScope.MILESTONES.value
96+
SEARCH_SCOPE_WIKI_BLOBS = SearchScope.WIKI_BLOBS.value
97+
SEARCH_SCOPE_COMMITS = SearchScope.COMMITS.value
98+
SEARCH_SCOPE_BLOBS = SearchScope.BLOBS.value
99+
SEARCH_SCOPE_USERS = SearchScope.USERS.value
51100

52101
# specific global scope
53-
SEARCH_SCOPE_GLOBAL_SNIPPET_TITLES: str = "snippet_titles"
102+
SEARCH_SCOPE_GLOBAL_SNIPPET_TITLES = SearchScope.GLOBAL_SNIPPET_TITLES.value
54103

55104
# specific project scope
56-
SEARCH_SCOPE_PROJECT_NOTES: str = "notes"
105+
SEARCH_SCOPE_PROJECT_NOTES = SearchScope.PROJECT_NOTES.value
57106

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

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy