Files
cwsvJudo/homepage/participo/bdCheck.py
2025-10-06 05:27:04 +02:00

106 lines
3.7 KiB
Python

import testApi
from datetime import datetime
from MatrixIm import MatrixIm
def get_days_since_birthday(
birthday: datetime.date, today: datetime.date = datetime.now()
) -> int:
# get number of days distance to birthday in this year:
this_year = (datetime(today.year, birthday.month, birthday.day) - today).days
# The birthday is already past return it
if this_year <= 0:
return this_year
# otherwise we have to take the distance to last years birthday
return (datetime(today.year - 1, birthday.month, birthday.day) - today).days
def get_days_until_birthday(
birthday: datetime.date, today: datetime.date = datetime.now()
) -> int:
# get number of days distance to birthday in this year:
this_year = (datetime(today.year, birthday.month, birthday.day) - today).days
# The birthday is already past return it
if this_year >= 0:
return this_year
# otherwise we have to take the distance to next years birthday
return (datetime(today.year + 1, birthday.month, birthday.day) - today).days
with open("testApi.config.yaml", "r") as yaml_file:
from yaml import safe_load
config = safe_load(yaml_file)
response = testApi.apiCall.call(
method="GET",
host="cwsvJudo.bplaced.net",
url="participo/api/trainees",
headers={"Authorization": f"Basic: {config['apiKey']}"},
)
try:
trainees = [
{
"name": {"family": t["name"], "given": t["vorname"]},
"date_of_birth": datetime.strptime(t["gebDatum"], "%Y-%m-%d"),
}
for t in testApi.apiCall.call(
method="GET",
host="cwsvJudo.bplaced.net",
url="participo/api/trainees",
headers={"Authorization": f"Basic: {config['apiKey']}"},
)
if t["gebDatum"] not in [None, "0000-00-00"]
]
last_birthday_kids = sorted(
[t for t in trainees if get_days_since_birthday(t["date_of_birth"]) > -14],
key=lambda t: get_days_since_birthday(t["date_of_birth"]),
)
if last_birthday_kids:
MatrixIm.post(
message="last birthdays: \n"
+ "\n".join(
[
f"- {t['name']['given']} {t['name']['family']}: {get_days_since_birthday(t['date_of_birth'])} ({t['date_of_birth'].strftime('%d.%m.')})"
for t in last_birthday_kids
]
),
home_server_url="https://matrix.org",
room_id="!vFXxgKsLbRLdWCSTIO:matrix.org",
credentials=MatrixIm.Credentials(
"@ukenth-the-grumpy:matrix.org", "DQpSs1yn9Y26c1zo"
),
)
next_birthday_kids = sorted(
[t for t in trainees if get_days_until_birthday(t["date_of_birth"]) < 14],
key=lambda t: get_days_until_birthday(t["date_of_birth"]),
)
if next_birthday_kids:
MatrixIm.post(
message="next birthdays: \n"
+ "\n".join(
[
f"- {t['name']['given']} {t['name']['family']}: {get_days_until_birthday(t['date_of_birth'])} ({t['date_of_birth'].strftime('%d.%m.')})"
for t in next_birthday_kids
]
),
home_server_url="https://matrix.org",
room_id="!vFXxgKsLbRLdWCSTIO:matrix.org",
credentials=MatrixIm.Credentials(
"@ukenth-the-grumpy:matrix.org", "DQpSs1yn9Y26c1zo"
),
)
except Exception as e:
MatrixIm.post(
message=f"bdCheck: Exception {e} ({repr(e)})\nResponse was {response}",
home_server_url="https://matrix.org",
room_id="!vFXxgKsLbRLdWCSTIO:matrix.org",
credentials=MatrixIm.Credentials(
"@ukenth-the-grumpy:matrix.org", "DQpSs1yn9Y26c1zo"
),
)