From c79cf31b45c2aca08badd53545ddcbf848c19c07 Mon Sep 17 00:00:00 2001 From: Alistair Adams Date: Mon, 24 Mar 2025 14:34:57 -0700 Subject: [PATCH 1/4] Add methods get_members_xlsx and update_member --- spond/spond.py | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/spond/spond.py b/spond/spond.py index 5910dd4..864432b 100644 --- a/spond/spond.py +++ b/spond/spond.py @@ -465,3 +465,50 @@ async def _get_entity(self, entity_type: str, uid: str) -> JSONDict: return entity errmsg = f"No {entity_type} with id='{uid}'." raise KeyError(errmsg) + + @_SpondBase.require_authentication + async def update_member(self, group_id: str, member: dict): + """ + Update member details. + Subject to authenticated user's access permissions. + + Use by first getting the member data with either the get_groups() + or get_personb(), modify some value and write back with this + method. + + Parameters + ---------- + group_id : str + Group ID of the member + member : dict + Member data to update + + Returns + ------- + dict + The response from the Spond server which is the Updated memberi + data on success or an error message on failure. + """ + + url = f"{self.api_url}group/{group_id}/member" + data = member + r = await self.clientsession.post(url, json=data, headers=self.auth_headers) + return await r.json() + + @_SpondBase.require_authentication + async def get_members_xlsx(self, group_id: str) -> bytes: + """Get the Excel member export that is downloadable from the Spond web page. + + Parameters + ---------- + group_id : str + Group ID of the members + + Returns: + ------- + bytes: XLSX binary data + """ + url = f"{self.api_url}group/{group_id}/exportMembers" + async with self.clientsession.get(url, headers=self.auth_headers) as r: + output_data = await r.read() + return output_data From 075582803d60104113e7706cf64df246cd49a4e3 Mon Sep 17 00:00:00 2001 From: Alistair Adams Date: Mon, 24 Mar 2025 15:12:33 -0700 Subject: [PATCH 2/4] Update README.md with the update_member and get_member_xlsx methods --- README.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/README.md b/README.md index ed4ad0b..c565bd8 100644 --- a/README.md +++ b/README.md @@ -64,6 +64,14 @@ Get Excel attendance report for a single event, available via the web client. ### change_response() Change a member's response for an event (e.g. accept/decline) +### update_member() +Change details about a member. First use get_groups() to get all the member details, +find the member you what to change and make the changes, then use this method to +update in Spond. + +### get_members_xlsx() +Get the Excel member export that is downloadable from the Spond web page. + ## Example scripts The following scripts are included as examples. Some of the scripts might require additional packages to be installed (csv, ical etc). From 6aa53060d02d2959c803345b95ee83eeba5aaafb Mon Sep 17 00:00:00 2001 From: Alistair Adams Date: Wed, 26 Mar 2025 14:38:36 -0700 Subject: [PATCH 3/4] Add missing annotation for update_member --- spond/spond.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spond/spond.py b/spond/spond.py index 864432b..3b5c63d 100644 --- a/spond/spond.py +++ b/spond/spond.py @@ -467,7 +467,7 @@ async def _get_entity(self, entity_type: str, uid: str) -> JSONDict: raise KeyError(errmsg) @_SpondBase.require_authentication - async def update_member(self, group_id: str, member: dict): + async def update_member(self, group_id: str, member: dict) -> JSONDict: """ Update member details. Subject to authenticated user's access permissions. From 923a6ccd07eb942231fc96f1e65dee310b1169eb Mon Sep 17 00:00:00 2001 From: Alistair Adams Date: Thu, 27 Mar 2025 10:01:03 -0700 Subject: [PATCH 4/4] Remove surplus white space --- spond/spond.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spond/spond.py b/spond/spond.py index 3b5c63d..d7c75c5 100644 --- a/spond/spond.py +++ b/spond/spond.py @@ -481,7 +481,7 @@ async def update_member(self, group_id: str, member: dict) -> JSONDict: group_id : str Group ID of the member member : dict - Member data to update + Member data to update Returns ------- @@ -498,7 +498,7 @@ async def update_member(self, group_id: str, member: dict) -> JSONDict: @_SpondBase.require_authentication async def get_members_xlsx(self, group_id: str) -> bytes: """Get the Excel member export that is downloadable from the Spond web page. - + Parameters ---------- group_id : str