Compare commits
11 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 29cb1ce14b | |||
| 4e69083284 | |||
| cc03b5cc08 | |||
| 385e35b322 | |||
| 9c6097a3d4 | |||
| 204eb1478a | |||
| e64b990dc8 | |||
| e358300085 | |||
| b8cb201652 | |||
| cba141724d | |||
| d64651e655 |
+23
-9
@@ -44,13 +44,16 @@ class DiscourseClient(object):
|
||||
|
||||
def toggle_gravatar(self, username, state=True, **kwargs):
|
||||
url = '/users/{0}/preferences/avatar/toggle'.format(username)
|
||||
|
||||
if bool(state):
|
||||
kwargs['use_uploaded_avatar'] = 'true'
|
||||
else:
|
||||
kwargs['use_uploaded_avatar'] = 'false'
|
||||
return self._put(url, **kwargs)
|
||||
|
||||
def pick_avatar(self, username, gravatar=True, generated=False, **kwargs):
|
||||
url = '/users/{0}/preferences/avatar/pick'.format(username)
|
||||
return self._put(url, **kwargs)
|
||||
|
||||
def update_email(self, username, email, **kwargs):
|
||||
return self._put('/users/{0}/preferences/email'.format(username), email=email, **kwargs)
|
||||
|
||||
@@ -77,6 +80,12 @@ class DiscourseClient(object):
|
||||
"""
|
||||
return self._delete('/admin/users/{0}.json'.format(userid), **kwargs)
|
||||
|
||||
def users(self, filter=None, **kwargs):
|
||||
if filter is None:
|
||||
filter = 'active'
|
||||
|
||||
return self._get('/admin/users/list/{0}.json'.format(filter), **kwargs)
|
||||
|
||||
def private_messages(self, username=None, **kwargs):
|
||||
if username is None:
|
||||
username = self.api_username
|
||||
@@ -91,8 +100,8 @@ class DiscourseClient(object):
|
||||
def new_topics(self, **kwargs):
|
||||
return self._get('/new.json', **kwargs)
|
||||
|
||||
def topic(self, topic_id, **kwargs):
|
||||
return self._get('/t/{0}.json'.format(topic_id), **kwargs)
|
||||
def topic(self, slug, topic_id, **kwargs):
|
||||
return self._get('/t/{0}/{1}.json'.format(slug, topic_id), **kwargs)
|
||||
|
||||
def post(self, topic_id, post_id, **kwargs):
|
||||
return self._get('/t/{0}/{1}.json'.format(topic_id, post_id), **kwargs)
|
||||
@@ -129,6 +138,11 @@ class DiscourseClient(object):
|
||||
"""
|
||||
return self._post('/posts', raw=content, **kwargs)
|
||||
|
||||
def update_post(self, post_id, content, edit_reason='', **kwargs):
|
||||
kwargs['post[raw]'] = content
|
||||
kwargs['post[edit_reason]'] = edit_reason
|
||||
return self._put('/posts/{0}'.format(post_id), **kwargs)
|
||||
|
||||
def topics_by(self, username, **kwargs):
|
||||
url = '/topics/created-by/{0}.json'.format(username)
|
||||
return self._get(url, **kwargs)['topic_list']['topics']
|
||||
@@ -207,12 +221,12 @@ class DiscourseClient(object):
|
||||
|
||||
log.debug('response %s: %s', response.status_code, repr(response.text))
|
||||
if not response.ok:
|
||||
if response.reason:
|
||||
msg = response.reason
|
||||
else:
|
||||
try:
|
||||
msg = u','.join(response.json()['errors'])
|
||||
except (ValueError, TypeError, KeyError):
|
||||
try:
|
||||
msg = u','.join(response.json()['errors'])
|
||||
except (ValueError, TypeError, KeyError):
|
||||
if response.reason:
|
||||
msg = response.reason
|
||||
else:
|
||||
msg = u'{0}: {1}'.format(response.status_code, response.text)
|
||||
|
||||
if 400 <= response.status_code < 500:
|
||||
|
||||
+8
-2
@@ -30,7 +30,7 @@ class DiscourseCmd(cmd.Cmd):
|
||||
try:
|
||||
return method(*args, **kwargs)
|
||||
except DiscourseError as e:
|
||||
print e, e.response.text
|
||||
print (e, e.response.text)
|
||||
return e.response
|
||||
return wrapper
|
||||
|
||||
@@ -57,8 +57,14 @@ def main():
|
||||
op.add_option('--api-user', default='system')
|
||||
op.add_option('-v', '--verbose', action='store_true')
|
||||
|
||||
api_key = os.environ['DISCOURSE_API_KEY']
|
||||
options, args = op.parse_args()
|
||||
if not options.host.startswith('http'):
|
||||
op.error('host must include protocol, eg http://')
|
||||
|
||||
api_key = os.environ.get('DISCOURSE_API_KEY')
|
||||
if not api_key:
|
||||
op.error('please set DISCOURSE_API_KEY')
|
||||
|
||||
client = DiscourseClient(options.host, options.api_user, api_key)
|
||||
|
||||
if options.verbose:
|
||||
|
||||
@@ -82,8 +82,8 @@ class TestTopics(ClientBaseTestCase):
|
||||
|
||||
def test_topic(self, request):
|
||||
prepare_response(request)
|
||||
self.client.topic(22)
|
||||
self.assertRequestCalled(request, 'GET', '/t/22.json')
|
||||
self.client.topic('some-test-slug', 22)
|
||||
self.assertRequestCalled(request, 'GET', '/t/some-test-slug/22.json')
|
||||
|
||||
def test_topics_by(self, request):
|
||||
prepare_response(request)
|
||||
@@ -111,3 +111,8 @@ class MiscellaneousTests(ClientBaseTestCase):
|
||||
r = self.client.categories()
|
||||
self.assertRequestCalled(request, 'GET', '/categories.json')
|
||||
self.assertEqual(r, request().json()['category_list']['categories'])
|
||||
|
||||
def test_users(self, request):
|
||||
prepare_response(request)
|
||||
r = self.client.users()
|
||||
self.assertRequestCalled(request, 'GET', '/admin/users/list/active.json')
|
||||
|
||||
Reference in New Issue
Block a user