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)