Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit deac5b4

Browse files
committed
Add the statuses parameter to GroupsClient.get_my_groups()
1 parent 38569b7 commit deac5b4

3 files changed

Lines changed: 41 additions & 3 deletions

File tree

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
Added
2+
-----
3+
4+
- Add the ``statuses`` parameter to ``GroupsClient.get_my_groups()``. (:pr:`NUMBER`)

src/globus_sdk/services/groups/client.py

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from __future__ import annotations
22

3+
import sys
34
import typing as t
45
import uuid
56

@@ -9,6 +10,21 @@
910
from .data import BatchMembershipActions, GroupPolicies
1011
from .errors import GroupsAPIError
1112

13+
if sys.version_info >= (3, 10):
14+
from typing import TypeAlias
15+
else:
16+
from typing_extensions import TypeAlias
17+
18+
_VALID_STATUSES_T: TypeAlias = t.Literal[
19+
"active",
20+
"declined",
21+
"invited",
22+
"left",
23+
"pending",
24+
"rejected",
25+
"removed",
26+
]
27+
1228

1329
class GroupsClient(client.BaseClient):
1430
"""
@@ -36,11 +52,19 @@ def default_scope_requirements(self) -> list[Scope]:
3652
return [Scope(GroupsScopes.view_my_groups_and_memberships)]
3753

3854
def get_my_groups(
39-
self, *, query_params: dict[str, t.Any] | None = None
55+
self,
56+
*,
57+
statuses: _VALID_STATUSES_T | t.Iterable[_VALID_STATUSES_T] | None = None,
58+
query_params: dict[str, t.Any] | None = None,
4059
) -> response.ArrayResponse:
4160
"""
4261
Return a list of groups your identity belongs to.
4362
63+
:param statuses:
64+
If provided, only groups containing memberships with the given status
65+
are returned.
66+
Valid values are ``active``, ``invited``, ``pending``, ``rejected``,
67+
``removed``, ``left``, and ``declined``.
4468
:param query_params: Additional passthrough query parameters
4569
4670
.. tab-set::
@@ -53,6 +77,10 @@ def get_my_groups(
5377
:service: groups
5478
:ref: get_my_groups_and_memberships_v2_groups_my_groups_get
5579
"""
80+
if query_params is None:
81+
query_params = {}
82+
if statuses is not None:
83+
query_params["statuses"] = ",".join(utils.safe_strseq_iter(statuses))
5684
return response.ArrayResponse(
5785
self.get("/groups/my_groups", query_params=query_params)
5886
)
Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,19 @@
1-
from globus_sdk._testing import load_response
1+
import urllib.parse
2+
3+
from globus_sdk._testing import get_last_request, load_response
24
from globus_sdk.response import ArrayResponse
35

46

57
def test_get_my_groups(groups_client):
68
meta = load_response(groups_client.get_my_groups).metadata
79

8-
res = groups_client.get_my_groups()
10+
res = groups_client.get_my_groups(statuses="active")
911
assert res.http_status == 200
1012

13+
req = get_last_request()
14+
parsed_qs = urllib.parse.parse_qs(urllib.parse.urlparse(req.url).query)
15+
assert parsed_qs["statuses"] == ["active"]
16+
1117
assert isinstance(res, ArrayResponse)
1218
assert isinstance(res.data, list)
1319
assert set(meta["group_names"]) == {g["name"] for g in res}

0 commit comments

Comments
 (0)