Skip to content

Commit 0be4761

Browse files
author
Gauvain Pocentek
committed
Implement user emails support
1 parent 6f9f42b commit 0be4761

File tree

5 files changed

+148
-2
lines changed

5 files changed

+148
-2
lines changed

docs/gl_objects/users.py

+44
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,32 @@
6464
key.delete()
6565
# end key delete
6666

67+
# email list
68+
emails = gl.user_emails.list(user_id=1)
69+
# or
70+
emails = user.emails.list()
71+
# end email list
72+
73+
# email get
74+
email = gl.user_emails.list(1, user_id=1)
75+
# or
76+
email = user.emails.get(1)
77+
# end email get
78+
79+
# email create
80+
k = gl.user_emails.create({'email': 'foo@bar.com'}, user_id=2)
81+
# or
82+
k = user.emails.create({'email': 'foo@bar.com'})
83+
# end email create
84+
85+
# email delete
86+
gl.user_emails.delete(1, user_id=1)
87+
# or
88+
user.emails.delete(1)
89+
# or
90+
email.delete()
91+
# end email delete
92+
6793
# currentuser get
6894
gl.auth()
6995
current_user = gl.user
@@ -86,3 +112,21 @@
86112
# or
87113
key.delete()
88114
# end currentuser key delete
115+
116+
# currentuser email list
117+
emails = gl.user.emails.list()
118+
# end currentuser email list
119+
120+
# currentuser email get
121+
email = gl.user.emails.get(1)
122+
# end currentuser email get
123+
124+
# currentuser email create
125+
email = gl.user.emails.create({'email': 'foo@bar.com'})
126+
# end currentuser email create
127+
128+
# currentuser email delete
129+
gl.user.emails.delete(1)
130+
# or
131+
email.delete()
132+
# end currentuser email delete

docs/gl_objects/users.rst

+64
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,41 @@ Delete an SSH key for a user:
8888
:start-after: # key delete
8989
:end-before: # end key delete
9090

91+
Emails
92+
======
93+
94+
Use the :class:`~gitlab.objects.UserEmail` objects to manage user emails.
95+
96+
To create :class:`~gitlab.objects.UserEmail` objects use the :attr:`User.emails
97+
<gitlab.objects.User.emails>` or :attr:`gitlab.Gitlab.user_emails` managers.
98+
99+
Exemples
100+
--------
101+
102+
List emails for a user:
103+
104+
.. literalinclude:: users.py
105+
:start-after: # email list
106+
:end-before: # end email list
107+
108+
Get an email for a user:
109+
110+
.. literalinclude:: users.py
111+
:start-after: # email get
112+
:end-before: # end email get
113+
114+
Create an email for a user:
115+
116+
.. literalinclude:: users.py
117+
:start-after: # email create
118+
:end-before: # end email create
119+
120+
Delete an email for a user:
121+
122+
.. literalinclude:: users.py
123+
:start-after: # email delete
124+
:end-before: # end email delete
125+
91126
Current User
92127
============
93128

@@ -99,6 +134,11 @@ Use the :class:`~gitlab.objects.CurrentUserKey` objects to manage user keys.
99134
To create :class:`~gitlab.objects.CurrentUserKey` objects use the
100135
:attr:`gitlab.objects.CurrentUser.keys <CurrentUser.keys>` manager.
101136

137+
Use the :class:`~gitlab.objects.CurrentUserEmail` objects to manage user emails.
138+
139+
To create :class:`~gitlab.objects.CurrentUserEmail` objects use the
140+
:attr:`gitlab.objects.CurrentUser.emails <CurrentUser.emails>` manager.
141+
102142
Examples
103143
--------
104144

@@ -131,3 +171,27 @@ Delete a key for the current user:
131171
.. literalinclude:: users.py
132172
:start-after: # currentuser key delete
133173
:end-before: # end currentuser key delete
174+
175+
List the current user emails:
176+
177+
.. literalinclude:: users.py
178+
:start-after: # currentuser email list
179+
:end-before: # end currentuser email list
180+
181+
Get an email for the current user:
182+
183+
.. literalinclude:: users.py
184+
:start-after: # currentuser email get
185+
:end-before: # end currentuser email get
186+
187+
Create an email for the current user:
188+
189+
.. literalinclude:: users.py
190+
:start-after: # currentuser email create
191+
:end-before: # end currentuser email create
192+
193+
Delete an email for the current user:
194+
195+
.. literalinclude:: users.py
196+
:start-after: # currentuser email delete
197+
:end-before: # end currentuser email delete

gitlab/__init__.py

+2
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ class Gitlab(object):
6565
http_username: (str): Username for HTTP authentication
6666
http_password: (str): Password for HTTP authentication
6767
Attributes:
68+
user_emails (UserEmailManager): Manager for GitLab users' emails.
6869
user_keys (UserKeyManager): Manager for GitLab users' SSH keys.
6970
users (UserManager): Manager for GitLab users
7071
group_projects (GroupProjectManager): Manager for GitLab group projects
@@ -136,6 +137,7 @@ def __init__(self, url, private_token=None, email=None, password=None,
136137
self.session = requests.Session()
137138

138139
self.settings = ApplicationSettingsManager(self)
140+
self.user_emails = UserEmailManager(self)
139141
self.user_keys = UserKeyManager(self)
140142
self.users = UserManager(self)
141143
self.group_projects = GroupProjectManager(self)

gitlab/objects.py

+31-2
Original file line numberDiff line numberDiff line change
@@ -494,6 +494,18 @@ def __ne__(self, other):
494494
return not self.__eq__(other)
495495

496496

497+
class UserEmail(GitlabObject):
498+
_url = '/users/%(user_id)s/emails'
499+
canUpdate = False
500+
shortPrintAttr = 'email'
501+
requiredUrlAttrs = ['user_id']
502+
requiredCreateAttrs = ['email']
503+
504+
505+
class UserEmailManager(BaseManager):
506+
obj_cls = UserEmail
507+
508+
497509
class UserKey(GitlabObject):
498510
_url = '/users/%(user_id)s/keys'
499511
canGet = 'from_list'
@@ -519,7 +531,10 @@ class User(GitlabObject):
519531
'projects_limit', 'extern_uid', 'provider', 'bio',
520532
'admin', 'can_create_group', 'website_url',
521533
'confirm', 'external']
522-
managers = [('keys', UserKeyManager, [('user_id', 'id')])]
534+
managers = [
535+
('emails', UserEmailManager, [('user_id', 'id')]),
536+
('keys', UserKeyManager, [('user_id', 'id')])
537+
]
523538

524539
def _data_for_gitlab(self, extra_parameters={}, update=False):
525540
if hasattr(self, 'confirm'):
@@ -601,6 +616,17 @@ def get_by_username(self, username, **kwargs):
601616
raise GitlabGetError('no such user: ' + username)
602617

603618

619+
class CurrentUserEmail(GitlabObject):
620+
_url = '/user/emails'
621+
canUpdate = False
622+
shortPrintAttr = 'email'
623+
requiredCreateAttrs = ['email']
624+
625+
626+
class CurrentUserEmailManager(BaseManager):
627+
obj_cls = CurrentUserEmail
628+
629+
604630
class CurrentUserKey(GitlabObject):
605631
_url = '/user/keys'
606632
canUpdate = False
@@ -619,7 +645,10 @@ class CurrentUser(GitlabObject):
619645
canUpdate = False
620646
canDelete = False
621647
shortPrintAttr = 'username'
622-
managers = [('keys', CurrentUserKeyManager, [('user_id', 'id')])]
648+
managers = [
649+
('emails', CurrentUserEmailManager, [('user_id', 'id')]),
650+
('keys', CurrentUserKeyManager, [('user_id', 'id')])
651+
]
623652

624653
def Key(self, id=None, **kwargs):
625654
warnings.warn("`Key` is deprecated, use `keys` instead",

tools/python_test.py

+7
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,13 @@
6868
key = new_user.keys.create({'title': 'testkey', 'key': SSH_KEY})
6969
assert(len(new_user.keys.list()) == 1)
7070
key.delete()
71+
assert(len(new_user.keys.list()) == 0)
72+
73+
# emails
74+
email = new_user.emails.create({'email': 'foo2@bar.com'})
75+
assert(len(new_user.emails.list()) == 1)
76+
email.delete()
77+
assert(len(new_user.emails.list()) == 0)
7178

7279
new_user.delete()
7380
foobar_user.delete()

0 commit comments

Comments
 (0)