Compare commits
13 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 22bf3b088e | |||
| 811453a129 | |||
| f8d628909c | |||
| 507e377a37 | |||
| 0aac8f6628 | |||
| acdcb03283 | |||
| 6bd73fdd5c | |||
| c13b456b79 | |||
| 977885967d | |||
| b9066ca637 | |||
| 77254f441c | |||
| 66089011f7 | |||
| fe317b6be8 |
@@ -4,3 +4,6 @@ Marc Sibson
|
||||
James Potter
|
||||
Ben Lopatin
|
||||
Daniel Zohar
|
||||
Matheus Fernandes
|
||||
Scott Nixon
|
||||
Jason Dorweiler
|
||||
|
||||
+16
@@ -3,6 +3,22 @@
|
||||
Release history
|
||||
===============
|
||||
|
||||
0.7.0
|
||||
-----
|
||||
|
||||
* Place request parameters in the request body for POST and PUT requests.
|
||||
Allows larger request sizes and solves for `URI Too Large` error.
|
||||
|
||||
0.6.0
|
||||
-----
|
||||
|
||||
* Adds method to add user to group by user ID
|
||||
|
||||
0.5.0
|
||||
-----
|
||||
|
||||
* Adds badges functionality
|
||||
|
||||
0.4.0
|
||||
-----
|
||||
|
||||
|
||||
@@ -37,13 +37,15 @@ test-all: ## Run all tox test environments, parallelized
|
||||
|
||||
check: clean-build clean-pyc clean-test lint test-coverage
|
||||
|
||||
release: clean ## Uploads new source and wheel distributions (cleans first)
|
||||
python setup.py sdist upload
|
||||
python setup.py bdist_wheel upload
|
||||
build: clean ## Create distribution files for release
|
||||
python setup.py sdist bdist_wheel
|
||||
|
||||
dist: clean ## Creates new source and wheel distributions (cleans first)
|
||||
release: build ## Create distribution files and publish to PyPI
|
||||
python setup.py check -r -s
|
||||
twine upload dist/*
|
||||
|
||||
sdist: clean ##sdist Create source distribution only
|
||||
python setup.py sdist
|
||||
python setup.py bdist_wheel
|
||||
ls -l dist
|
||||
|
||||
api-docs: ## Build autodocs from docstrings
|
||||
|
||||
+2
-2
@@ -51,9 +51,9 @@ copyright = u'2014, Marc Sibson'
|
||||
# built documents.
|
||||
#
|
||||
# The short X.Y version.
|
||||
version = '0.4'
|
||||
version = '0.7'
|
||||
# The full version, including alpha/beta/rc tags.
|
||||
release = '0.4.0'
|
||||
release = '0.7.0'
|
||||
|
||||
# The language for content autogenerated by Sphinx. Refer to documentation
|
||||
# for a list of supported languages.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
__version__ = '0.4.0'
|
||||
__version__ = '0.7.0'
|
||||
|
||||
from pydiscourse.client import DiscourseClient
|
||||
|
||||
+60
-6
@@ -541,6 +541,43 @@ class DiscourseClient(object):
|
||||
kwargs['term'] = term
|
||||
return self._get('/search.json', **kwargs)
|
||||
|
||||
|
||||
def badges(self, **kwargs):
|
||||
"""
|
||||
|
||||
Args:
|
||||
**kwargs:
|
||||
|
||||
Returns:
|
||||
|
||||
"""
|
||||
return self._get('/admin/badges.json', **kwargs)
|
||||
|
||||
def grant_badge_to(self, username, badge_id, **kwargs):
|
||||
"""
|
||||
|
||||
Args:
|
||||
username:
|
||||
badge_id:
|
||||
**kwargs:
|
||||
|
||||
Returns:
|
||||
|
||||
"""
|
||||
return self._post('/user_badges', username=username, badge_id=badge_id, **kwargs)
|
||||
|
||||
def user_badges(self, username, **kwargs):
|
||||
"""
|
||||
|
||||
Args:
|
||||
username:
|
||||
|
||||
Returns:
|
||||
|
||||
"""
|
||||
return self._get('/user-badges/{}.json'.format(username))
|
||||
|
||||
|
||||
def create_category(self, name, color, text_color='FFFFFF',
|
||||
permissions=None, parent=None, **kwargs):
|
||||
"""
|
||||
@@ -713,6 +750,23 @@ class DiscourseClient(object):
|
||||
"""
|
||||
return self._put("/admin/groups/{0}/members.json".format(groupid), usernames=username)
|
||||
|
||||
def add_user_to_group(self, groupid, userid):
|
||||
"""
|
||||
Add a member to a group by with user id.
|
||||
|
||||
Args:
|
||||
groupid: the ID of the group
|
||||
userid: the member id
|
||||
|
||||
Returns:
|
||||
JSON API response
|
||||
|
||||
Raises:
|
||||
DiscourseError if user is already member of group
|
||||
|
||||
"""
|
||||
return self._post("/admin/users/{0}/groups".format(userid), group_id=groupid)
|
||||
|
||||
def delete_group_member(self, groupid, userid):
|
||||
"""
|
||||
Deletes a member from a group by user ID
|
||||
@@ -739,7 +793,7 @@ class DiscourseClient(object):
|
||||
Returns:
|
||||
|
||||
"""
|
||||
return self._request(GET, path, kwargs)
|
||||
return self._request(GET, path, params=kwargs)
|
||||
|
||||
def _put(self, path, **kwargs):
|
||||
"""
|
||||
@@ -751,7 +805,7 @@ class DiscourseClient(object):
|
||||
Returns:
|
||||
|
||||
"""
|
||||
return self._request(PUT, path, kwargs)
|
||||
return self._request(PUT, path, data=kwargs)
|
||||
|
||||
def _post(self, path, **kwargs):
|
||||
"""
|
||||
@@ -763,7 +817,7 @@ class DiscourseClient(object):
|
||||
Returns:
|
||||
|
||||
"""
|
||||
return self._request(POST, path, kwargs)
|
||||
return self._request(POST, path, data=kwargs)
|
||||
|
||||
def _delete(self, path, **kwargs):
|
||||
"""
|
||||
@@ -775,9 +829,9 @@ class DiscourseClient(object):
|
||||
Returns:
|
||||
|
||||
"""
|
||||
return self._request(DELETE, path, kwargs)
|
||||
return self._request(DELETE, path, params=kwargs)
|
||||
|
||||
def _request(self, verb, path, params):
|
||||
def _request(self, verb, path, params={}, data={}):
|
||||
"""
|
||||
Executes HTTP request to API and handles response
|
||||
|
||||
@@ -797,7 +851,7 @@ class DiscourseClient(object):
|
||||
headers = {'Accept': 'application/json; charset=utf-8'}
|
||||
|
||||
response = requests.request(
|
||||
verb, url, allow_redirects=False, params=params, headers=headers,
|
||||
verb, url, allow_redirects=False, params=params, data=data, headers=headers,
|
||||
timeout=self.timeout)
|
||||
|
||||
log.debug('response %s: %s', response.status_code, repr(response.text))
|
||||
|
||||
+18
-1
@@ -42,7 +42,9 @@ class ClientBaseTestCase(unittest.TestCase):
|
||||
kwargs = kwargs['params']
|
||||
self.assertEqual(kwargs.pop('api_username'), self.api_username)
|
||||
self.assertEqual(kwargs.pop('api_key'), self.api_key)
|
||||
self.assertEqual(kwargs, params)
|
||||
|
||||
if verb == 'GET':
|
||||
self.assertEqual(kwargs, params)
|
||||
|
||||
|
||||
|
||||
@@ -120,6 +122,11 @@ class TestUser(ClientBaseTestCase):
|
||||
self.client.unsuspend(123)
|
||||
self.assertRequestCalled(request, 'PUT', '/admin/users/123/unsuspend')
|
||||
|
||||
def test_user_bagdes(self, request):
|
||||
prepare_response(request)
|
||||
self.client.user_badges('username')
|
||||
self.assertRequestCalled(request, 'GET', '/user-badges/{}.json'.format('username'))
|
||||
|
||||
|
||||
@mock.patch('requests.request')
|
||||
class TestTopics(ClientBaseTestCase):
|
||||
@@ -175,3 +182,13 @@ class MiscellaneousTests(ClientBaseTestCase):
|
||||
prepare_response(request)
|
||||
self.client.users()
|
||||
self.assertRequestCalled(request, 'GET', '/admin/users/list/active.json')
|
||||
|
||||
def test_badges(self, request):
|
||||
prepare_response(request)
|
||||
self.client.badges()
|
||||
self.assertRequestCalled(request, 'GET', '/admin/badges.json')
|
||||
|
||||
def test_grant_badge_to(self, request):
|
||||
prepare_response(request)
|
||||
self.client.grant_badge_to('username', 1)
|
||||
self.assertRequestCalled(request, 'POST', '/user_badges', username='username', badge_id=1)
|
||||
|
||||
Reference in New Issue
Block a user