Skip to content

Commit

Permalink
Allow passing strings in place of GroupMemberFragments (#45)
Browse files Browse the repository at this point in the history
* Allow passing strings for GroupMemberFragments

* Update changelog

* Update docstrings
  • Loading branch information
Jonxslays committed Nov 26, 2023
1 parent 9a3af41 commit d60d6b0
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 11 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@

## Changes

- Methods that previously accepted only `GroupMemberFragment` now accept strings as well.
- Update examples in `GroupService` that work with `GroupMemberFragment`.

---
Expand Down
53 changes: 42 additions & 11 deletions wom/services/groups.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,9 +44,21 @@ class GroupService(BaseService):
__slots__ = ()

def _prepare_member_fragments(
self, members: t.Iterable[models.GroupMemberFragment]
self, members: t.Iterable[t.Union[str, models.GroupMemberFragment]]
) -> tuple[t.Dict[str, t.Any], ...]:
return tuple({k: str(v) for k, v in m.to_dict().items() if v} for m in members)
return tuple(
{k: str(v) for k, v in m.to_dict().items() if v}
for m in self._parse_member_fragments(members)
)

def _parse_member_fragments(
self, members: t.Iterable[t.Union[str, models.GroupMemberFragment]]
) -> t.Generator[models.GroupMemberFragment, None, None]:
for m in members:
if isinstance(m, str):
yield models.GroupMemberFragment(m, None)
else:
yield m

async def search_groups(
self,
Expand Down Expand Up @@ -119,7 +131,7 @@ async def get_details(self, id: int) -> ResultT[models.GroupDetail]:
async def create_group(
self,
name: str,
*members: models.GroupMemberFragment,
*members: t.Union[str, models.GroupMemberFragment],
clan_chat: t.Optional[str] = None,
description: t.Optional[str] = None,
homeworld: t.Optional[int] = None,
Expand All @@ -144,6 +156,12 @@ async def create_group(
Returns:
A [`Result`][wom.Result] containing the group details.
!!! note
A mixture of strings and GroupMemberFragments can be passed for
members. If a string is passed, no role will be added for that
member.
??? example
```py
Expand All @@ -156,7 +174,9 @@ async def create_group(
await client.groups.create_group(
"My new group",
wom.GroupMemberFragment("Jonxslays", wom.GroupRole.Owner),
wom.GroupMemberFragment("Faabvk"),
"Faabvk",
"psikoi",
"rro",
description="The most epic group."
)
```
Expand Down Expand Up @@ -186,7 +206,7 @@ async def edit_group(
verification_code: str,
*,
name: t.Optional[str] = None,
members: t.Optional[t.Iterable[models.GroupMemberFragment]] = None,
members: t.Optional[t.Iterable[t.Union[str, models.GroupMemberFragment]]] = None,
clan_chat: t.Optional[str] = None,
description: t.Optional[str] = None,
homeworld: t.Optional[int] = None,
Expand Down Expand Up @@ -223,6 +243,12 @@ async def edit_group(
existing members. If you want to add members, see
[`add_members()`][wom.GroupService.add_members]
!!! note
A mixture of strings and GroupMemberFragments can be passed for
members. If a string is passed, no role will be added for that
member.
??? example
```py
Expand All @@ -238,7 +264,7 @@ async def edit_group(
name="My new group name",
members=[
wom.GroupMemberFragment("Jonxslays", wom.GroupRole.Owner),
wom.GroupMemberFragment("Faabvk")
"Faabvk",
],
description="Some new description."
)
Expand Down Expand Up @@ -316,6 +342,12 @@ async def add_members(
A [`Result`][wom.Result] containing the success response
message.
!!! note
A mixture of strings and GroupMemberFragments can be passed for
members. If a string is passed, no role will be added for that
member.
??? example
```py
Expand All @@ -331,8 +363,8 @@ async def add_members(
wom.GroupMemberFragment(
"Jonxslays", wom.GroupRole.Administrator
),
wom.GroupMemberFragment("Zezima"),
wom.GroupMemberFragment("Psikoi"),
"Zezima",
"Psikoi",
)
```
"""
Expand All @@ -359,7 +391,7 @@ async def remove_members(
verification_code: The group verification code.
*members: The members to remove from the group.
*members: The usernames of members to remove from the group.
Returns:
A [`Result`][wom.Result] containing the success response
Expand Down Expand Up @@ -622,8 +654,7 @@ async def get_achievements(
offset: The optional pagination offset. Defaults to `None`.
Returns:
A [`Result`][wom.Result] containing the list of
achievements.
A [`Result`][wom.Result] containing the list of achievements.
??? example
Expand Down

0 comments on commit d60d6b0

Please sign in to comment.