Skip to content

Commit cf84b4b

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 cf84b4b

File tree

1 file changed

+76
-28
lines changed

1 file changed

+76
-28
lines changed

gitlab/const.py

Lines changed: 76 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -15,44 +15,92 @@
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+
# https://gitlab.com/gitlab-org/gitlab/-/blob/e97357824bedf007e75f8782259fe07435b64fbb/lib/gitlab/visibility_level.rb#L23-25
34+
class Visibility(Enum):
35+
PRIVATE: str = "private"
36+
INTERNAL: str = "internal"
37+
PUBLIC: str = "public"
38+
39+
40+
class NotificationLevel(Enum):
41+
DISABLED: str = "disabled"
42+
PARTICIPATING: str = "participating"
43+
WATCH: str = "watch"
44+
GLOBAL: str = "global"
45+
MENTION: str = "mention"
46+
CUSTOM: str = "custom"
47+
48+
49+
# https://gitlab.com/gitlab-org/gitlab/-/blob/e97357824bedf007e75f8782259fe07435b64fbb/app/views/search/_category.html.haml#L10-37
50+
class SearchScope(Enum):
51+
# all scopes (global, group and project)
52+
PROJECTS: str = "projects"
53+
ISSUES: str = "issues"
54+
MERGE_REQUESTS: str = "merge_requests"
55+
MILESTONES: str = "milestones"
56+
WIKI_BLOBS: str = "wiki_blobs"
57+
COMMITS: str = "commits"
58+
BLOBS: str = "blobs"
59+
USERS: str = "users"
60+
61+
# specific global scope
62+
GLOBAL_SNIPPET_TITLES: str = "snippet_titles"
63+
64+
# specific project scope
65+
PROJECT_NOTES: str = "notes"
66+
67+
2068
DEFAULT_URL: str = "https://gitlab.com"
2169

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"
70+
NO_ACCESS = AccessLevel.NO_ACCESS.value
71+
MINIMAL_ACCESS = AccessLevel.MINIMAL_ACCESS.value
72+
GUEST_ACCESS = AccessLevel.GUEST.value
73+
REPORTER_ACCESS = AccessLevel.REPORTER.value
74+
DEVELOPER_ACCESS = AccessLevel.DEVELOPER.value
75+
MAINTAINER_ACCESS = AccessLevel.MAINTAINER.value
76+
OWNER_ACCESS = AccessLevel.OWNER.value
77+
78+
VISIBILITY_PRIVATE = Visibility.PRIVATE.value
79+
VISIBILITY_INTERNAL = Visibility.INTERNAL.value
80+
VISIBILITY_PUBLIC = Visibility.PUBLIC.value
81+
82+
NOTIFICATION_LEVEL_DISABLED = NotificationLevel.DISABLED.value
83+
NOTIFICATION_LEVEL_PARTICIPATING = NotificationLevel.PARTICIPATING.value
84+
NOTIFICATION_LEVEL_WATCH = NotificationLevel.WATCH.value
85+
NOTIFICATION_LEVEL_GLOBAL = NotificationLevel.GLOBAL.value
86+
NOTIFICATION_LEVEL_MENTION = NotificationLevel.MENTION.value
87+
NOTIFICATION_LEVEL_CUSTOM = NotificationLevel.CUSTOM.value
4088

4189
# Search scopes
4290
# 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"
91+
SEARCH_SCOPE_PROJECTS = SearchScope.PROJECTS.value
92+
SEARCH_SCOPE_ISSUES = SearchScope.ISSUES.value
93+
SEARCH_SCOPE_MERGE_REQUESTS = SearchScope.MERGE_REQUESTS.value
94+
SEARCH_SCOPE_MILESTONES = SearchScope.MILESTONES.value
95+
SEARCH_SCOPE_WIKI_BLOBS = SearchScope.WIKI_BLOBS.value
96+
SEARCH_SCOPE_COMMITS = SearchScope.COMMITS.value
97+
SEARCH_SCOPE_BLOBS = SearchScope.BLOBS.value
98+
SEARCH_SCOPE_USERS = SearchScope.USERS.value
5199

52100
# specific global scope
53-
SEARCH_SCOPE_GLOBAL_SNIPPET_TITLES: str = "snippet_titles"
101+
SEARCH_SCOPE_GLOBAL_SNIPPET_TITLES = SearchScope.GLOBAL_SNIPPET_TITLES.value
54102

55103
# specific project scope
56-
SEARCH_SCOPE_PROJECT_NOTES: str = "notes"
104+
SEARCH_SCOPE_PROJECT_NOTES = SearchScope.PROJECT_NOTES.value
57105

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

0 commit comments

Comments
 (0)