List member attendance
In this example, it will be demonstrated how to count how many times each member attended a specific activity since a given date.
The following logical steps are performed:
- Define the
team_id, activity_name, and since_date date.
- Retrieve the team members.
- Retrieve activities from the
since_date date and count members marked as Attending for matching activities.
- Print each member with their attendance count.
| from collections import Counter
from datetime import date, datetime
from pyholdsport import (
Holdsport,
HoldsportActivitiesUser,
HoldsportActivity,
HoldsportActivityUserStatus,
HoldsportMember,
)
with Holdsport(
holdsport_username="username",
holdsport_password="password",
) as holdsport:
team_id = 123
activity_name = "Activity Name"
since_date = date(2026, 1, 1)
members: list[HoldsportMember] = holdsport.get_members(team_id=team_id)
member_ids: set[int] = {member.id for member in members}
attendance_counts: Counter[int] = Counter()
page = 1
while True:
reached_future_activity = False
activities: list[HoldsportActivity] = holdsport.get_activities(
team_id=team_id,
date=since_date.isoformat(),
page=page,
per_page=20,
)
if not activities:
break
for activity in activities:
activity_time = datetime.strptime(
activity.starttime, "%Y-%m-%dT%H:%M:%S%z"
)
if activity_time > datetime.now(activity_time.tzinfo):
# Assume that once a future activity is reached, all subsequent
# activities are also in the future.
reached_future_activity = True
break
if activity.name != activity_name:
continue
activities_users: list[HoldsportActivitiesUser] = (
holdsport.get_activities_users(
activity.id,
)
)
for user in activities_users:
if (
user.status_code is HoldsportActivityUserStatus.ATTENDING
and user.user_id in member_ids
):
attendance_counts[user.user_id] += 1
if reached_future_activity:
break
page += 1
print(
f"Player attendance for '{activity_name}' "
f"since {since_date.isoformat()}:"
)
sorted_members = sorted(
members,
key=lambda member: (
-attendance_counts[member.id],
member.lastname,
member.firstname,
),
)
for sorted_member in sorted_members:
print(
f"{sorted_member.firstname} {sorted_member.lastname}: "
f"{attendance_counts[sorted_member.id]}"
)
|