Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

feat(api): Convert gitlab.const to Enums#1688

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to ourterms of service andprivacy statement. We’ll occasionally send you account related emails.

Already on GitHub?Sign in to your account

Merged
nejch merged 1 commit intopython-gitlab:mainfromjspricke:enum
Jun 22, 2022
Merged
Show file tree
Hide file tree
Changes fromall commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 6 additions & 6 deletionsdocs/gl_objects/access_requests.rst
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -7,11 +7,11 @@ Users can request access to groups and projects.
When access is granted the user should be given a numerical access level. The
following constants are provided to represent the access levels:

* ``gitlab.const.GUEST_ACCESS``: ``10``
* ``gitlab.const.REPORTER_ACCESS``: ``20``
* ``gitlab.const.DEVELOPER_ACCESS``: ``30``
* ``gitlab.const.MAINTAINER_ACCESS``: ``40``
* ``gitlab.const.OWNER_ACCESS``: ``50``
* ``gitlab.const.AccessLevel.GUEST``: ``10``
* ``gitlab.const.AccessLevel.REPORTER``: ``20``
* ``gitlab.const.AccessLevel.DEVELOPER``: ``30``
* ``gitlab.const.AccessLevel.MAINTAINER``: ``40``
* ``gitlab.const.AccessLevel.OWNER``: ``50``

References
----------
Expand DownExpand Up@@ -43,7 +43,7 @@ Create an access request::
Approve an access request::

ar.approve() # defaults to DEVELOPER level
ar.approve(access_level=gitlab.const.MAINTAINER_ACCESS) # explicitly set access level
ar.approve(access_level=gitlab.const.AccessLevel.MAINTAINER.value) # explicitly set access level

Deny (delete) an access request::

Expand Down
18 changes: 9 additions & 9 deletionsdocs/gl_objects/groups.rst
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -80,7 +80,7 @@ Remove a group::

Share/unshare the group with a group::

group.share(group2.id, gitlab.const.DEVELOPER_ACCESS)
group.share(group2.id, gitlab.const.AccessLevel.DEVELOPER.value)
group.unshare(group2.id)

Import / Export
Expand DownExpand Up@@ -237,11 +237,11 @@ Group members

The following constants define the supported access levels:

* ``gitlab.const.GUEST_ACCESS = 10``
* ``gitlab.const.REPORTER_ACCESS = 20``
* ``gitlab.const.DEVELOPER_ACCESS = 30``
* ``gitlab.const.MAINTAINER_ACCESS = 40``
* ``gitlab.const.OWNER_ACCESS = 50``
* ``gitlab.const.AccessLevel.GUEST = 10``
* ``gitlab.const.AccessLevel.REPORTER = 20``
* ``gitlab.const.AccessLevel.DEVELOPER = 30``
* ``gitlab.const.AccessLevel.MAINTAINER = 40``
* ``gitlab.const.AccessLevel.OWNER = 50``

Reference
---------
Expand DownExpand Up@@ -284,11 +284,11 @@ Get a member of a group, including members inherited through ancestor groups::
Add a member to the group::

member = group.members.create({'user_id': user_id,
'access_level': gitlab.const.GUEST_ACCESS})
'access_level': gitlab.const.AccessLevel.GUEST.value})

Update a member (change the access level)::

member.access_level = gitlab.const.DEVELOPER_ACCESS
member.access_level = gitlab.const.AccessLevel.DEVELOPER.value
member.save()

Remove a member from the group::
Expand DownExpand Up@@ -316,7 +316,7 @@ LDAP group links

Add an LDAP group link to an existing GitLab group::

group.add_ldap_group_link(ldap_group_cn, gitlab.const.DEVELOPER_ACCESS, 'ldapmain')
group.add_ldap_group_link(ldap_group_cn, gitlab.const.AccessLevel.DEVELOPER.value, 'ldapmain')

Remove a link::

Expand Down
16 changes: 8 additions & 8 deletionsdocs/gl_objects/notifications.rst
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -5,12 +5,12 @@ Notification settings
You can define notification settings globally, for groups and for projects.
Valid levels are defined as constants:

* ``gitlab.const.NOTIFICATION_LEVEL_DISABLED``
* ``gitlab.const.NOTIFICATION_LEVEL_PARTICIPATING``
* ``gitlab.const.NOTIFICATION_LEVEL_WATCH``
* ``gitlab.const.NOTIFICATION_LEVEL_GLOBAL``
* ``gitlab.const.NOTIFICATION_LEVEL_MENTION``
* ``gitlab.const.NOTIFICATION_LEVEL_CUSTOM``
* ``gitlab.const.NotificationLevel.DISABLED``
* ``gitlab.const.NotificationLevel.PARTICIPATING``
* ``gitlab.const.NotificationLevel.WATCH``
* ``gitlab.const.NotificationLevel.GLOBAL``
* ``gitlab.const.NotificationLevel.MENTION``
* ``gitlab.const.NotificationLevel.CUSTOM``

You get access to fine-grained settings if you use the
``NOTIFICATION_LEVEL_CUSTOM`` level.
Expand DownExpand Up@@ -47,10 +47,10 @@ Get the notifications settings::
Update the notifications settings::

# use a predefined level
settings.level = gitlab.const.NOTIFICATION_LEVEL_WATCH
settings.level = gitlab.const.NotificationLevel.WATCH.value

# create a custom setup
settings.level = gitlab.const.NOTIFICATION_LEVEL_CUSTOM
settings.level = gitlab.const.NotificationLevel.CUSTOM.value
settings.save() # will create additional attributes, but not mandatory

settings.new_merge_request = True
Expand Down
14 changes: 7 additions & 7 deletionsdocs/gl_objects/projects.rst
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -446,9 +446,9 @@ Project snippets

The snippet visibility can be defined using the following constants:

* ``gitlab.const.VISIBILITY_PRIVATE``
* ``gitlab.const.VISIBILITY_INTERNAL``
* ``gitlab.const.VISIBILITY_PUBLIC``
* ``gitlab.const.Visibility.PRIVATE``
* ``gitlab.const.Visibility.INTERNAL``
* ``gitlab.const.Visibility.PUBLIC``

Reference
---------
Expand DownExpand Up@@ -487,7 +487,7 @@ Create a snippet::
'file_name': 'foo.py',
'code': 'import gitlab',
'visibility_level':
gitlab.const.VISIBILITY_PRIVATE})
gitlab.const.Visibility.PRIVATE.value})

Update a snippet::

Expand DownExpand Up@@ -553,11 +553,11 @@ Get a member of a project, including members inherited through ancestor groups::
Add a project member::

member = project.members.create({'user_id': user.id, 'access_level':
gitlab.const.DEVELOPER_ACCESS})
gitlab.const.AccessLevel.DEVELOPER.value})

Modify a project member (change the access level)::

member.access_level = gitlab.const.MAINTAINER_ACCESS
member.access_level = gitlab.const.AccessLevel.MAINTAINER.value
member.save()

Remove a member from the project team::
Expand All@@ -568,7 +568,7 @@ Remove a member from the project team::

Share/unshare the project with a group::

project.share(group.id, gitlab.const.DEVELOPER_ACCESS)
project.share(group.id, gitlab.const.AccessLevel.DEVELOPER.value)
project.unshare(group.id)

Project hooks
Expand Down
6 changes: 3 additions & 3 deletionsdocs/gl_objects/protected_branches.rst
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -31,8 +31,8 @@ Create a protected branch::

p_branch = project.protectedbranches.create({
'name': '*-stable',
'merge_access_level': gitlab.const.DEVELOPER_ACCESS,
'push_access_level': gitlab.const.MAINTAINER_ACCESS
'merge_access_level': gitlab.const.AccessLevel.DEVELOPER.value,
'push_access_level': gitlab.const.AccessLevel.MAINTAINER.value
})

Create a protected branch with more granular access control::
Expand All@@ -41,7 +41,7 @@ Create a protected branch with more granular access control::
'name': '*-stable',
'allowed_to_push': [{"user_id": 99}, {"user_id": 98}],
'allowed_to_merge': [{"group_id": 653}],
'allowed_to_unprotect': [{"access_level": gitlab.const.MAINTAINER_ACCESS}]
'allowed_to_unprotect': [{"access_level": gitlab.const.AccessLevel.MAINTAINER.value}]
})

Delete a protected branch::
Expand Down
32 changes: 16 additions & 16 deletionsdocs/gl_objects/search.rst
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -9,24 +9,24 @@ string. The following constants are provided to represent the possible scopes:

* Shared scopes (global, group and project):

+ ``gitlab.const.SEARCH_SCOPE_PROJECTS``: ``projects``
+ ``gitlab.const.SEARCH_SCOPE_ISSUES``: ``issues``
+ ``gitlab.const.SEARCH_SCOPE_MERGE_REQUESTS``: ``merge_requests``
+ ``gitlab.const.SEARCH_SCOPE_MILESTONES``: ``milestones``
+ ``gitlab.const.SEARCH_SCOPE_WIKI_BLOBS``: ``wiki_blobs``
+ ``gitlab.const.SEARCH_SCOPE_COMMITS``: ``commits``
+ ``gitlab.const.SEARCH_SCOPE_BLOBS``: ``blobs``
+ ``gitlab.const.SEARCH_SCOPE_USERS``: ``users``
+ ``gitlab.const.SearchScope.PROJECTS``: ``projects``
+ ``gitlab.const.SearchScope.ISSUES``: ``issues``
+ ``gitlab.const.SearchScope.MERGE_REQUESTS``: ``merge_requests``
+ ``gitlab.const.SearchScope.MILESTONES``: ``milestones``
+ ``gitlab.const.SearchScope.WIKI_BLOBS``: ``wiki_blobs``
+ ``gitlab.const.SearchScope.COMMITS``: ``commits``
+ ``gitlab.const.SearchScope.BLOBS``: ``blobs``
+ ``gitlab.const.SearchScope.USERS``: ``users``


* specific global scope:

+ ``gitlab.const.SEARCH_SCOPE_GLOBAL_SNIPPET_TITLES``: ``snippet_titles``
+ ``gitlab.const.SearchScope.GLOBAL_SNIPPET_TITLES``: ``snippet_titles``


* specific project scope:

+ ``gitlab.const.SEARCH_SCOPE_PROJECT_NOTES``: ``notes``
+ ``gitlab.const.SearchScope.PROJECT_NOTES``: ``notes``


Reference
Expand All@@ -46,30 +46,30 @@ Examples
Search for issues matching a specific string::

# global search
gl.search(gitlab.const.SEARCH_SCOPE_ISSUES, 'regression')
gl.search(gitlab.const.SearchScope.ISSUES.value, 'regression')

# group search
group = gl.groups.get('mygroup')
group.search(gitlab.const.SEARCH_SCOPE_ISSUES, 'regression')
group.search(gitlab.const.SearchScope.ISSUES.value, 'regression')

# project search
project = gl.projects.get('myproject')
project.search(gitlab.const.SEARCH_SCOPE_ISSUES, 'regression')
project.search(gitlab.const.SearchScope.ISSUES.value, 'regression')

The ``search()`` methods implement the pagination support::

# get lists of 10 items, and start at page 2
gl.search(gitlab.const.SEARCH_SCOPE_ISSUES, search_str, page=2, per_page=10)
gl.search(gitlab.const.SearchScope.ISSUES.value, search_str, page=2, per_page=10)

# get a generator that will automatically make required API calls for
# pagination
for item in gl.search(gitlab.const.SEARCH_SCOPE_ISSUES, search_str, iterator=True):
for item in gl.search(gitlab.const.SearchScope.ISSUES.value, search_str, iterator=True):
do_something(item)

The search API doesn't return objects, but dicts. If you need to act on
objects, you need to create them explicitly::

for item in gl.search(gitlab.const.SEARCH_SCOPE_ISSUES, search_str, iterator=True):
for item in gl.search(gitlab.const.SearchScope.ISSUES.value, search_str, iterator=True):
issue_project = gl.projects.get(item['project_id'], lazy=True)
issue = issue_project.issues.get(item['iid'])
issue.state = 'closed'
Expand Down
2 changes: 1 addition & 1 deletiondocs/gl_objects/snippets.rst
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -44,7 +44,7 @@ Create a snippet::

Update the snippet attributes::

snippet.visibility_level = gitlab.const.VISIBILITY_PUBLIC
snippet.visibility_level = gitlab.const.Visibility.PUBLIC.value
snippet.save()

To update a snippet code you need to create a ``ProjectSnippet`` object::
Expand Down
109 changes: 80 additions & 29 deletionsgitlab/const.py
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -15,13 +15,16 @@
# You should have received a copy of the GNU Lesser General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.

from enum import Enum, IntEnum

from gitlab._version import __title__, __version__

# NOTE(jlvillal): '_DEPRECATED' only affects users accessing constants via the
# top-level gitlab.* namespace. See 'gitlab/__init__.py:__getattr__()' for the
# consumer of '_DEPRECATED' For example 'x = gitlab.NO_ACCESS'. We want users
# to instead use constants by doing code like: gitlab.const.NO_ACCESS.
_DEPRECATED = [
"ADMIN_ACCESS",
"DEFAULT_URL",
"DEVELOPER_ACCESS",
"GUEST_ACCESS",
Expand DownExpand Up@@ -52,43 +55,91 @@
"VISIBILITY_PUBLIC",
]


# https://gitlab.com/gitlab-org/gitlab/-/blob/e97357824bedf007e75f8782259fe07435b64fbb/lib/gitlab/access.rb#L12-18
class AccessLevel(IntEnum):
NO_ACCESS: int = 0
MINIMAL_ACCESS: int = 5
GUEST: int = 10
REPORTER: int = 20
DEVELOPER: int = 30
MAINTAINER: int = 40
OWNER: int = 50
ADMIN: int = 60


# https://gitlab.com/gitlab-org/gitlab/-/blob/e97357824bedf007e75f8782259fe07435b64fbb/lib/gitlab/visibility_level.rb#L23-25
class Visibility(Enum):
PRIVATE: str = "private"
INTERNAL: str = "internal"
PUBLIC: str = "public"


class NotificationLevel(Enum):
DISABLED: str = "disabled"
PARTICIPATING: str = "participating"
WATCH: str = "watch"
GLOBAL: str = "global"
MENTION: str = "mention"
CUSTOM: str = "custom"


# https://gitlab.com/gitlab-org/gitlab/-/blob/e97357824bedf007e75f8782259fe07435b64fbb/app/views/search/_category.html.haml#L10-37
class SearchScope(Enum):
# all scopes (global, group and project)
PROJECTS: str = "projects"
ISSUES: str = "issues"
MERGE_REQUESTS: str = "merge_requests"
MILESTONES: str = "milestones"
WIKI_BLOBS: str = "wiki_blobs"
COMMITS: str = "commits"
BLOBS: str = "blobs"
USERS: str = "users"

# specific global scope
GLOBAL_SNIPPET_TITLES: str = "snippet_titles"

# specific project scope
PROJECT_NOTES: str = "notes"


DEFAULT_URL: str = "https://gitlab.com"

NO_ACCESS: int = 0
MINIMAL_ACCESS: int = 5
GUEST_ACCESS: int = 10
REPORTER_ACCESS: int = 20
DEVELOPER_ACCESS: int = 30
MAINTAINER_ACCESS: int = 40
OWNER_ACCESS: int = 50
ADMIN_ACCESS: int = 60

VISIBILITY_PRIVATE: str = "private"
VISIBILITY_INTERNAL: str = "internal"
VISIBILITY_PUBLIC: str = "public"

NOTIFICATION_LEVEL_DISABLED: str = "disabled"
NOTIFICATION_LEVEL_PARTICIPATING: str = "participating"
NOTIFICATION_LEVEL_WATCH: str = "watch"
NOTIFICATION_LEVEL_GLOBAL: str = "global"
NOTIFICATION_LEVEL_MENTION: str = "mention"
NOTIFICATION_LEVEL_CUSTOM: str = "custom"
NO_ACCESS = AccessLevel.NO_ACCESS.value
MINIMAL_ACCESS = AccessLevel.MINIMAL_ACCESS.value
GUEST_ACCESS = AccessLevel.GUEST.value
REPORTER_ACCESS = AccessLevel.REPORTER.value
DEVELOPER_ACCESS = AccessLevel.DEVELOPER.value
MAINTAINER_ACCESS = AccessLevel.MAINTAINER.value
OWNER_ACCESS = AccessLevel.OWNER.value
ADMIN_ACCESS = AccessLevel.ADMIN.value

VISIBILITY_PRIVATE = Visibility.PRIVATE.value
VISIBILITY_INTERNAL = Visibility.INTERNAL.value
VISIBILITY_PUBLIC = Visibility.PUBLIC.value

NOTIFICATION_LEVEL_DISABLED = NotificationLevel.DISABLED.value
NOTIFICATION_LEVEL_PARTICIPATING = NotificationLevel.PARTICIPATING.value
NOTIFICATION_LEVEL_WATCH = NotificationLevel.WATCH.value
NOTIFICATION_LEVEL_GLOBAL = NotificationLevel.GLOBAL.value
NOTIFICATION_LEVEL_MENTION = NotificationLevel.MENTION.value
NOTIFICATION_LEVEL_CUSTOM = NotificationLevel.CUSTOM.value

# Search scopes
# all scopes (global, group and project)
SEARCH_SCOPE_PROJECTS: str = "projects"
SEARCH_SCOPE_ISSUES: str = "issues"
SEARCH_SCOPE_MERGE_REQUESTS: str = "merge_requests"
SEARCH_SCOPE_MILESTONES: str = "milestones"
SEARCH_SCOPE_WIKI_BLOBS: str = "wiki_blobs"
SEARCH_SCOPE_COMMITS: str = "commits"
SEARCH_SCOPE_BLOBS: str = "blobs"
SEARCH_SCOPE_USERS: str = "users"
SEARCH_SCOPE_PROJECTS = SearchScope.PROJECTS.value
SEARCH_SCOPE_ISSUES = SearchScope.ISSUES.value
SEARCH_SCOPE_MERGE_REQUESTS = SearchScope.MERGE_REQUESTS.value
SEARCH_SCOPE_MILESTONES = SearchScope.MILESTONES.value
SEARCH_SCOPE_WIKI_BLOBS = SearchScope.WIKI_BLOBS.value
SEARCH_SCOPE_COMMITS = SearchScope.COMMITS.value
SEARCH_SCOPE_BLOBS = SearchScope.BLOBS.value
SEARCH_SCOPE_USERS = SearchScope.USERS.value

# specific global scope
SEARCH_SCOPE_GLOBAL_SNIPPET_TITLES: str = "snippet_titles"
SEARCH_SCOPE_GLOBAL_SNIPPET_TITLES = SearchScope.GLOBAL_SNIPPET_TITLES.value

# specific project scope
SEARCH_SCOPE_PROJECT_NOTES: str = "notes"
SEARCH_SCOPE_PROJECT_NOTES = SearchScope.PROJECT_NOTES.value

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

[8]ページ先頭

©2009-2025 Movatter.jp