Skip to content

Added constants for search API #1131

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 our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 5 commits into from
Oct 12, 2020
Merged
Show file tree
Hide file tree
Changes from all 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
2 changes: 1 addition & 1 deletion docs/gl_objects/badges.rst
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ List badges::

badges = group_or_project.badges.list()

Get ad badge::
Get a badge::

badge = group_or_project.badges.get(badge_id)

Expand Down
38 changes: 31 additions & 7 deletions docs/gl_objects/search.rst
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,30 @@ Search API

You can search for resources at the top level, in a project or in a group.
Searches are based on a scope (issues, merge requests, and so on) and a search
string.
string. The following constants are provided to represent the possible scopes:


* Shared scopes (global, group and project):

+ ``gitlab.SEARCH_SCOPE_PROJECTS``: ``projects``
+ ``gitlab.SEARCH_SCOPE_ISSUES``: ``issues``
+ ``gitlab.SEARCH_SCOPE_MERGE_REQUESTS``: ``merge_requests``
+ ``gitlab.SEARCH_SCOPE_MILESTONES``: ``milestones``
+ ``gitlab.SEARCH_SCOPE_WIKI_BLOBS``: ``wiki_blobs``
+ ``gitlab.SEARCH_SCOPE_COMMITS``: ``commits``
+ ``gitlab.SEARCH_SCOPE_BLOBS``: ``blobs``
+ ``gitlab.SEARCH_SCOPE_USERS``: ``users``


* specific global scope:

+ ``gitlab.SEARCH_SCOPE_GLOBAL_SNIPPET_TITLES``: ``snippet_titles``


* specific project scope:

+ ``gitlab.SEARCH_SCOPE_PROJECT_NOTES``: ``notes``


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

# global search
gl.search('issues', 'regression')
gl.search(gitlab.SEARCH_SCOPE_ISSUES, 'regression')

# group search
group = gl.groups.get('mygroup')
group.search('issues', 'regression')
group.search(gitlab.SEARCH_SCOPE_ISSUES, 'regression')

# project search
project = gl.projects.get('myproject')
project.search('issues', 'regression')
project.search(gitlab.SEARCH_SCOPE_ISSUES, 'regression')

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

# get lists of 10 items, and start at page 2
gl.search('issues', search_str, page=2, per_page=10)
gl.search(gitlab.SEARCH_SCOPE_ISSUES, search_str, page=2, per_page=10)

# get a generator that will automatically make required API calls for
# pagination
for item in gl.search('issues', search_str, as_list=False):
for item in gl.search(gitlab.SEARCH_SCOPE_ISSUES, search_str, as_list=False):
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('issues', search_str, as_list=False):
for item in gl.search(gitlab.SEARCH_SCOPE_ISSUES, search_str, as_list=False):
issue_project = gl.projects.get(item['project_id'], lazy=True)
issue = issue_project.issues.get(item['iid'])
issue.state = 'closed'
issue.save()

17 changes: 17 additions & 0 deletions gitlab/const.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,3 +33,20 @@
NOTIFICATION_LEVEL_GLOBAL = "global"
NOTIFICATION_LEVEL_MENTION = "mention"
NOTIFICATION_LEVEL_CUSTOM = "custom"

# Search scopes
# all scopes (global, group and project)
SEARCH_SCOPE_PROJECTS = "projects"
SEARCH_SCOPE_ISSUES = "issues"
SEARCH_SCOPE_MERGE_REQUESTS = "merge_requests"
SEARCH_SCOPE_MILESTONES = "milestones"
SEARCH_SCOPE_WIKI_BLOBS = "wiki_blobs"
SEARCH_SCOPE_COMMITS = "commits"
SEARCH_SCOPE_BLOBS = "blobs"
SEARCH_SCOPE_USERS = "users"

# specific global scope
SEARCH_SCOPE_GLOBAL_SNIPPET_TITLES = "snippet_titles"

# specific project scope
SEARCH_SCOPE_PROJECT_NOTES = "notes"