Skip to content

Commit 1ca3080

Browse files
author
Gauvain Pocentek
committed
Add Gitlab and User events support
Closes #412
1 parent 96a1a78 commit 1ca3080

File tree

7 files changed

+82
-41
lines changed

7 files changed

+82
-41
lines changed

docs/api-objects.rst

+1
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ API examples
1515
gl_objects/deploy_keys
1616
gl_objects/deployments
1717
gl_objects/environments
18+
gl_objects/events
1819
gl_objects/features
1920
gl_objects/groups
2021
gl_objects/issues

docs/gl_objects/events.rst

+48
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
######
2+
Events
3+
######
4+
5+
Reference
6+
---------
7+
8+
* v4 API:
9+
10+
+ :class:`gitlab.v4.objects.Event`
11+
+ :class:`gitlab.v4.objects.EventManager`
12+
+ :attr:`gitlab.Gitlab.events`
13+
+ :class:`gitlab.v4.objects.ProjectEvent`
14+
+ :class:`gitlab.v4.objects.ProjectEventManager`
15+
+ :attr:`gitlab.v4.objects.Project.events`
16+
+ :class:`gitlab.v4.objects.UserEvent`
17+
+ :class:`gitlab.v4.objects.UserEventManager`
18+
+ :attr:`gitlab.v4.objects.User.events`
19+
20+
* v3 API (projects events only):
21+
22+
+ :class:`gitlab.v3.objects.ProjectEvent`
23+
+ :class:`gitlab.v3.objects.ProjectEventManager`
24+
+ :attr:`gitlab.v3.objects.Project.events`
25+
+ :attr:`gitlab.Gitlab.project_events`
26+
27+
* GitLab API: https://docs.gitlab.com/ce/api/events.html
28+
29+
Examples
30+
--------
31+
32+
You can list events for an entire Gitlab instance (admin), users and projects.
33+
You can filter you events you want to retrieve using the ``action`` and
34+
``target_type`` attributes. The possibole values for these attributes are
35+
available on `the gitlab documentation
36+
<https://docs.gitlab.com/ce/api/events.html>`_.
37+
38+
List all the events (paginated)::
39+
40+
events = gl.events.list()
41+
42+
List the issue events on a project::
43+
44+
events = project.events.list(target_type='issue')
45+
46+
List the user events::
47+
48+
events = project.events.list()

docs/gl_objects/projects.py

-6
Original file line numberDiff line numberDiff line change
@@ -69,12 +69,6 @@
6969
project.unarchive()
7070
# end archive
7171

72-
# events list
73-
gl.project_events.list(project_id=1)
74-
# or
75-
project.events.list()
76-
# end events list
77-
7872
# members list
7973
members = project.members.list()
8074
# end members list

docs/gl_objects/projects.rst

-30
Original file line numberDiff line numberDiff line change
@@ -484,36 +484,6 @@ Delete a note for a resource:
484484
:start-after: # notes delete
485485
:end-before: # end notes delete
486486

487-
Project events
488-
==============
489-
490-
Reference
491-
---------
492-
493-
* v4 API:
494-
495-
+ :class:`gitlab.v4.objects.ProjectEvent`
496-
+ :class:`gitlab.v4.objects.ProjectEventManager`
497-
+ :attr:`gitlab.v4.objects.Project.events`
498-
499-
* v3 API:
500-
501-
+ :class:`gitlab.v3.objects.ProjectEvent`
502-
+ :class:`gitlab.v3.objects.ProjectEventManager`
503-
+ :attr:`gitlab.v3.objects.Project.events`
504-
+ :attr:`gitlab.Gitlab.project_events`
505-
506-
* GitLab API: https://docs.gitlab.com/ce/api/repository_files.html
507-
508-
Examples
509-
--------
510-
511-
List the project events:
512-
513-
.. literalinclude:: projects.py
514-
:start-after: # events list
515-
:end-before: # end events list
516-
517487
Project members
518488
===============
519489

gitlab/__init__.py

+1
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,7 @@ def __init__(self, url, private_token=None, oauth_token=None, email=None,
125125
self.teams = objects.TeamManager(self)
126126
else:
127127
self.dockerfiles = objects.DockerfileManager(self)
128+
self.events = objects.EventManager(self)
128129
self.features = objects.FeatureManager(self)
129130
self.pagesdomains = objects.PagesDomainManager(self)
130131
self.user_activities = objects.UserActivitiesManager(self)

gitlab/v4/objects.py

+25-4
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,17 @@ def compound_metrics(self, **kwargs):
112112
return self.gitlab.http_get('/sidekiq/compound_metrics', **kwargs)
113113

114114

115+
class Event(RESTObject):
116+
_id_attr = None
117+
_short_print_attr = 'target_title'
118+
119+
120+
class EventManager(ListMixin, RESTManager):
121+
_path = '/events'
122+
_obj_cls = Event
123+
_list_filters = ('action', 'target_type', 'before', 'after', 'sort')
124+
125+
115126
class UserActivities(RESTObject):
116127
_id_attr = 'username'
117128

@@ -143,6 +154,16 @@ class UserEmailManager(RetrieveMixin, CreateMixin, DeleteMixin, RESTManager):
143154
_create_attrs = (('email', ), tuple())
144155

145156

157+
class UserEvent(Event):
158+
pass
159+
160+
161+
class UserEventManager(EventManager):
162+
_path = '/users/%(user_id)s/events'
163+
_obj_cls = UserEvent
164+
_from_parent_attrs = {'user_id': 'id'}
165+
166+
146167
class UserGPGKey(ObjectDeleteMixin, RESTObject):
147168
pass
148169

@@ -224,6 +245,7 @@ class User(SaveMixin, ObjectDeleteMixin, RESTObject):
224245
_managers = (
225246
('customattributes', 'UserCustomAttributeManager'),
226247
('emails', 'UserEmailManager'),
248+
('events', 'UserEventManager'),
227249
('gpgkeys', 'UserGPGKeyManager'),
228250
('impersonationtokens', 'UserImpersonationTokenManager'),
229251
('keys', 'UserKeyManager'),
@@ -1161,12 +1183,11 @@ def enable(self, key_id, **kwargs):
11611183
self.gitlab.http_post(path, **kwargs)
11621184

11631185

1164-
class ProjectEvent(RESTObject):
1165-
_id_attr = None
1166-
_short_print_attr = 'target_title'
1186+
class ProjectEvent(Event):
1187+
pass
11671188

11681189

1169-
class ProjectEventManager(ListMixin, RESTManager):
1190+
class ProjectEventManager(EventManager):
11701191
_path = '/projects/%(project_id)s/events'
11711192
_obj_cls = ProjectEvent
11721193
_from_parent_attrs = {'project_id': 'id'}

tools/python_test_v4.py

+7-1
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,9 @@
9595
# user projects list
9696
assert(len(new_user.projects.list()) == 0)
9797

98+
# events list
99+
new_user.events.list()
100+
98101
foobar_user = gl.users.create(
99102
{'email': 'foobar@example.com', 'username': 'foobar',
100103
'name': 'Foo Bar', 'password': 'foobar_password'})
@@ -408,7 +411,7 @@
408411
env.delete()
409412
assert(len(admin_project.environments.list()) == 0)
410413

411-
# events
414+
# project events
412415
admin_project.events.list()
413416

414417
# forks
@@ -640,3 +643,6 @@
640643

641644
# user activities
642645
gl.user_activities.list()
646+
647+
# events
648+
gl.events.list()

0 commit comments

Comments
 (0)