Compare commits

...

14 Commits

Author SHA1 Message Date
Ben Lopatin daab45edda Merge pull request #84 from pydiscourse/version-update-1.5
Version 1.5 update
2023-08-31 12:55:52 -04:00
Ben Lopatin 4382449a72 Remove Python 3.7 support 2023-08-31 12:53:06 -04:00
Ben Lopatin dfc0c4173c Update changelog 2023-08-31 12:52:02 -04:00
Ben Lopatin aa2b7eedf6 Bump version 2023-08-31 12:49:19 -04:00
Ben Lopatin 905febc27b Merge pull request #82 from inducer/group-members-pagination
Respect pagination when returning all group members
2023-08-31 12:45:53 -04:00
Andreas Kloeckner 16297f9206 Respect pagination when returning all group members 2023-08-31 12:42:22 -04:00
Ben Lopatin c566377ccb Merge pull request #77 from akhmerov/patch-1
use an up to date endpoint for group owner creation
2023-08-31 12:42:11 -04:00
Anton Akhmerov 9c07f97e87 use an up to date endpoint for group owner creation 2023-08-29 10:19:59 -04:00
Ben Lopatin eb195bb6bc Merge pull request #81 from Dettorer/tox-add-py311
Enable the tests for Python 3.11
2023-08-29 10:19:49 -04:00
Paul Dettorer Hervot 71f9da07c7 Enable the tests for Python 3.11 2023-08-29 14:50:35 +02:00
Ben Lopatin ed4efd82aa Merge pull request #80 from inducer/fix-group-membership-admin
Fix group membership admin functionality
2023-08-15 15:23:09 -04:00
Andreas Kloeckner e33a37b8b9 Fix group membership administration endpoints 2023-08-09 19:40:14 -05:00
Ben Lopatin 50465b4502 Merge pull request #74 from themotleyfool/add-update-category
Add client endpoint for updating category
2023-02-28 20:24:46 -05:00
Max Lancaster e9748279b8 Add client endpoint for updating category 2023-02-28 19:55:26 -05:00
8 changed files with 68 additions and 23 deletions
+1 -1
View File
@@ -9,7 +9,7 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
python-version: [ "3.7", "3.8", "3.9", "3.10", "3.11" ]
python-version: [ "3.8", "3.9", "3.10", "3.11" ]
steps:
- uses: actions/checkout@v1
+15
View File
@@ -3,6 +3,21 @@
Release history
===============
1.5.0
-----
- Owner creation endpoint update from @akhmerov
- Python 3.11 support from @Dettorer
- Group membership fixes from @inducer
- Rate limiting fixes from @inducer
- Latest posts endpoint from @max-lancaster
1.4.0
-----
- Documented here as skipped release
1.3.0
-----
+2 -2
View File
@@ -51,9 +51,9 @@ copyright = u'2014, Marc Sibson'
# built documents.
#
# The short X.Y version.
version = '1.1'
version = '1.5'
# The full version, including alpha/beta/rc tags.
release = '1.1.1'
release = '1.5.0'
# The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages.
+1 -1
View File
@@ -26,10 +26,10 @@ classifiers =
License :: OSI Approved :: MIT License
Operating System :: OS Independent
Programming Language :: Python
Programming Language :: Python :: 3.7
Programming Language :: Python :: 3.8
Programming Language :: Python :: 3.9
Programming Language :: Python :: 3.10
Programming Language :: Python :: 3.11
[options.packages.find]
where=src
+1 -3
View File
@@ -1,8 +1,6 @@
# -*- coding: utf-8 -*-
"""Python client for the Discourse API."""
__version__ = "1.3.0"
__version__ = "1.5.0"
from pydiscourse.client import DiscourseClient
+41 -14
View File
@@ -937,6 +937,18 @@ class DiscourseClient(object):
return self._get(u"/c/{0}/show.json".format(category_id), **kwargs)
def update_category(self, category_id, **kwargs):
"""
Args:
category_id:
**kwargs:
Returns:
"""
return self._put("/categories/{0}".format(category_id), json=True, **kwargs)
def delete_category(self, category_id, **kwargs):
"""
Remove category
@@ -1133,9 +1145,7 @@ class DiscourseClient(object):
JSON API response
"""
return self._put(
"/admin/groups/{0}/owners.json".format(groupid), **{"group[usernames]": username}
)
return self.add_group_owners(groupid, [username])
def add_group_owners(self, groupid, usernames):
"""
@@ -1151,7 +1161,7 @@ class DiscourseClient(object):
"""
usernames = ",".join(usernames)
return self._put(
"/admin/groups/{0}/owners.json".format(groupid), **{"group[usernames]": usernames}
"/groups/{0}/owners.json".format(groupid), **{"usernames": usernames}
)
def delete_group_owner(self, groupid, userid):
@@ -1179,13 +1189,28 @@ class DiscourseClient(object):
group = self._get("/groups/{0}/members.json".format(group_name))
return group["owners"]
def _get_paginated_list(self, url, name, offset, **kwargs):
result = []
initial_offset = offset
while True:
kwargs["offset"] = offset
response = self._get(url, **kwargs)
nreturned = len(response[name])
result.extend(response[name])
offset += nreturned
if response["meta"]["total"] == len(result) - initial_offset:
return result
if nreturned == 0:
raise RuntimeError("more items expected, but none returned")
def group_members(self, group_name, offset=0, **kwargs):
"""
Get all members of a group by group name
"""
kwargs["offset"] = offset
group = self._get("/groups/{0}/members.json".format(group_name), **kwargs)
return group["members"]
return self._get_paginated_list(
"/groups/{0}/members.json".format(group_name),
"members", offset, **kwargs)
def add_group_member(self, groupid, username):
"""
@@ -1203,7 +1228,7 @@ class DiscourseClient(object):
"""
return self._put(
"/admin/groups/{0}/members.json".format(groupid), usernames=username
"/groups/{0}/members.json".format(groupid), usernames=username
)
def add_group_members(self, groupid, usernames):
@@ -1223,7 +1248,8 @@ class DiscourseClient(object):
"""
usernames = ",".join(usernames)
return self._put(
"/admin/groups/{0}/members.json".format(groupid), usernames=usernames
"/groups/{0}/members.json".format(groupid), usernames=usernames,
json=True,
)
def add_user_to_group(self, groupid, userid):
@@ -1243,7 +1269,7 @@ class DiscourseClient(object):
"""
return self._post("/admin/users/{0}/groups".format(userid), group_id=groupid)
def delete_group_member(self, groupid, userid):
def delete_group_member(self, groupid, username):
"""
Deletes a member from a group by user ID
@@ -1251,15 +1277,16 @@ class DiscourseClient(object):
Args:
groupid: the ID of the group
userid: the ID of the user
username: the user name of the user
Returns:
JSON API response
"""
return self._delete(
"/admin/groups/{0}/members.json".format(groupid), user_id=userid
)
return self._request(
DELETE, "/groups/{0}/members.json".format(groupid),
json={"usernames": username})
def color_schemes(self, **kwargs):
"""
+5
View File
@@ -198,6 +198,11 @@ class MiscellaneousTests(ClientBaseTestCase):
self.assertRequestCalled(request, "GET", "/categories.json")
self.assertEqual(r, request().json()["category_list"]["categories"])
def test_update_category(self, request):
prepare_response(request)
self.client.update_category(123, a="a", b="b")
self.assertRequestCalled(request, "PUT", "/categories/123", a="a", b="b")
def test_users(self, request):
prepare_response(request)
self.client.users()
+2 -2
View File
@@ -1,12 +1,12 @@
[tox]
envlist = py37, py38, py39, py310
envlist = py37, py38, py39, py310, py311
[gh-actions]
python =
3.7: py37
3.8: py38
3.9: py39
3.10: py310
3.11: py311
[testenv]
setenv =