Skip to content

Commit bb5d501

Browse files
committed
Implemented wp.getUser, wp.getUsers, wp.getProfile, and wp.editProfile.
1 parent ed2083a commit bb5d501

File tree

5 files changed

+117
-11
lines changed

5 files changed

+117
-11
lines changed

docs/ref/methods.rst

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,11 @@ methods.users
5656
-------------
5757

5858
.. automodule:: wordpress_xmlrpc.methods.users
59-
60-
.. autoclass:: GetUserInfo()
59+
60+
.. autoclass:: GetUser(user_id[, fields])
61+
.. autoclass:: GetUsers([filter, fields])
62+
.. autoclass:: GetProfile()
63+
.. autoclass:: EditProfile(user)
6164
.. autoclass:: GetUsersBlogs()
6265
.. autoclass:: GetAuthors()
6366

docs/ref/wordpress.rst

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,10 +121,18 @@ WordPressUser
121121
Basic representation of a WordPress user.
122122

123123
* id
124+
* username
125+
* password
126+
* roles
124127
* nickname
125128
* url
126129
* first_name
127130
* last_name
131+
* registered
132+
* bio
133+
* email
134+
* nicename
135+
* display_name
128136

129137
WordPressComment
130138
----------------

tests/test_users.py

Lines changed: 38 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,45 @@
99
class TestUsers(WordPressTestCase):
1010

1111
@attr('users')
12-
def test_get_user_info(self):
13-
user = self.client.call(users.GetUserInfo())
12+
def test_get_user(self):
13+
user = self.client.call(users.GetUser(self.userid))
1414
self.assertTrue(isinstance(user, WordPressUser))
15-
self.assertEqual(user.nickname, self.username)
15+
self.assertEqual(user.username, self.username)
16+
17+
@attr('users')
18+
def test_get_users(self):
19+
user_list = self.client.call(users.GetUsers())
20+
self.assert_list_of_classes(user_list, WordPressUser)
21+
found = False
22+
for user in user_list:
23+
if user.id == self.userid:
24+
found = True
25+
break
26+
self.assertTrue(found)
27+
28+
@attr('users')
29+
def test_get_profile(self):
30+
user = self.client.call(users.GetProfile())
31+
self.assertTrue(isinstance(user, WordPressUser))
32+
self.assertEqual(user.username, self.username)
33+
34+
@attr('users')
35+
def test_edit_profile(self):
36+
user = self.client.call(users.GetProfile())
37+
self.assertTrue(isinstance(user, WordPressUser))
38+
old_first_name = user.first_name
39+
new_first_name = 'Foo bar'
40+
user.first_name = new_first_name
41+
result = self.client.call(users.EditProfile(user))
42+
self.assertTrue(result)
43+
44+
# check that the value changed
45+
user2 = self.client.call(users.GetProfile())
46+
self.assertEqual(new_first_name, user2.first_name)
47+
48+
# cleanup
49+
user.first_name = old_first_name
50+
self.client.call(users.EditProfile(user))
1651

1752
@attr('users')
1853
def test_get_user_blogs(self):

wordpress_xmlrpc/methods/users.py

Lines changed: 55 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,42 @@
22
from wordpress_xmlrpc.wordpress import WordPressBlog, WordPressAuthor, WordPressUser
33

44

5-
class GetUserInfo(AuthenticatedMethod):
5+
class GetUsers(AuthenticatedMethod):
6+
"""
7+
Retrieve list of users in the blog.
8+
9+
Parameters:
10+
`filter`: optional `dict` of filters:
11+
* `number`
12+
* `offset`
13+
* `role`
14+
15+
`fields`: optional `list` of fields to return. Specific fields, or groups 'basic' or 'all'.
16+
17+
Returns: `list` of :class:`WordPressUser` instances.
18+
"""
19+
method_name = 'wp.getUsers'
20+
optional_args = ('filter', 'fields')
21+
results_class = WordPressUser
22+
23+
24+
class GetUser(AuthenticatedMethod):
25+
"""
26+
Retrieve an individual user.
27+
28+
Parameters:
29+
`user_id`: ID of the user
30+
`fields`: (optional) `list` of fields to return. Specific fields, or groups 'basic' or 'all'.
31+
32+
Returns: :class:`WordPressUser` instance.
33+
"""
34+
method_name = 'wp.getUser'
35+
method_args = ('user_id',)
36+
optional_args = ('fields',)
37+
results_class = WordPressUser
38+
39+
40+
class GetProfile(AuthenticatedMethod):
641
"""
742
Retrieve information about the connected user.
843
@@ -11,10 +46,28 @@ class GetUserInfo(AuthenticatedMethod):
1146
1247
Returns: instance of :class:`WordPressUser` representing the user whose credentials are being used with the XML-RPC API.
1348
"""
14-
method_name = 'blogger.getUserInfo'
49+
method_name = 'wp.getProfile'
1550
results_class = WordPressUser
1651

1752

53+
class EditProfile(AuthenticatedMethod):
54+
"""
55+
Edit profile fields of the connected user.
56+
57+
Parameters:
58+
`user`: `WordPressUser` instance.
59+
60+
Returns: `True` on successful edit.
61+
"""
62+
method_name = 'wp.editProfile'
63+
method_args = ('user',)
64+
65+
66+
class GetUserInfo(GetProfile):
67+
"""Alias for GetProfile for backwards compatibility"""
68+
pass
69+
70+
1871
class GetUsersBlogs(AuthenticatedMethod):
1972
"""
2073
Retrieve list of blogs that this user belongs to.

wordpress_xmlrpc/wordpress.py

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -170,11 +170,18 @@ def __str__(self):
170170

171171
class WordPressUser(WordPressBase):
172172
definition = {
173-
'id': 'userid',
174-
'nickname': FieldMap('nickname', default=''),
173+
'id': 'user_id',
174+
'username': 'username',
175+
'roles': 'roles',
176+
'nickname': 'nickname',
175177
'url': 'url',
176-
'first_name': 'firstname',
177-
'last_name': 'lastname',
178+
'first_name': 'first_name',
179+
'last_name': 'last_name',
180+
'registered': DateTimeFieldMap('registered'),
181+
'bio': 'bio',
182+
'email': 'email',
183+
'nicename': 'nicename',
184+
'display_name': 'display_name',
178185
}
179186

180187
def __str__(self):

0 commit comments

Comments
 (0)