chore: Renamed datetime to dt

This commit is contained in:
kbe
2025-08-08 22:19:40 +02:00
parent 439c5f3d6f
commit 6c29fc0802

View File

@@ -1,6 +1,7 @@
# Native modules # Native modules
import logging, traceback, os, time import logging, traceback, os, time
from datetime import datetime, timedelta, date import datetime as dt
from datetime import timedelta, date
# Third-party modules # Third-party modules
import requests, pytz import requests, pytz
@@ -89,11 +90,11 @@ class CrossFitBooker:
time.sleep(wt) time.sleep(wt)
return None return None
def _parse_local(self, ts: str) -> datetime: def _parse_local(self, ts: str) -> dt.datetime:
dt = parse(ts) dt = parse(ts)
return dt if dt.tzinfo else pytz.timezone(TIMEZONE).localize(dt) return dt if dt.tzinfo else pytz.timezone(TIMEZONE).localize(dt)
def _fmt_session(self, s: Dict[str, Any], dt: Optional[datetime] = None) -> str: def _fmt_session(self, s: Dict[str, Any], dt: Optional[dt] = None) -> str:
dt = dt or self._parse_local(s["start_timestamp"]) dt = dt or self._parse_local(s["start_timestamp"])
return f"{s['id_activity_calendar']} {s['name_activity']} at {dt.strftime('%Y-%m-%d %H:%M')}" return f"{s['id_activity_calendar']} {s['name_activity']} at {dt.strftime('%Y-%m-%d %H:%M')}"
@@ -180,7 +181,7 @@ class CrossFitBooker:
logging.debug("[get_available_sessions] No response (None) from API") logging.debug("[get_available_sessions] No response (None) from API")
return r return r
def matches_preferred_session(self, session: Dict[str, Any], current_time: datetime) -> bool: def matches_preferred_session(self, session: Dict[str, Any], current_time: dt.datetime) -> bool:
try: try:
st = self._parse_local(session["start_timestamp"]) st = self._parse_local(session["start_timestamp"])
dow, hhmm = st.weekday(), st.strftime("%H:%M") dow, hhmm = st.weekday(), st.strftime("%H:%M")
@@ -192,7 +193,7 @@ class CrossFitBooker:
logging.error(f"Failed to check session: {e} - Session: {session}") logging.error(f"Failed to check session: {e} - Session: {session}")
return False return False
def is_session_bookable(self, session: Dict[str, Any], current_time: datetime) -> bool: def is_session_bookable(self, session: Dict[str, Any], current_time: dt.datetime) -> bool:
""" """
Check if a session is bookable based on user_info. Check if a session is bookable based on user_info.
""" """
@@ -205,7 +206,7 @@ class CrossFitBooker:
booking_time_str: str = user_info.get("unableToBookUntilTime", "") booking_time_str: str = user_info.get("unableToBookUntilTime", "")
if booking_date_str and booking_time_str: if booking_date_str and booking_time_str:
try: try:
booking_datetime: datetime = datetime.strptime( booking_datetime: dt.datetime = dt.datetime.strptime(
f"{booking_date_str} {booking_time_str}", f"{booking_date_str} {booking_time_str}",
"%d-%m-%Y %H:%M" "%d-%m-%Y %H:%M"
) )
@@ -268,7 +269,7 @@ class CrossFitBooker:
return False return False
# Script main entry point # Script main entry point
async def execute_cycle(self, current_time: datetime) -> None: async def execute_cycle(self, current_time: dt.datetime) -> None:
start_date, end_date = current_time.date(), current_time.date() + timedelta(days=2) start_date, end_date = current_time.date(), current_time.date() + timedelta(days=2)
sessions_data = self.get_available_sessions(start_date, end_date) sessions_data = self.get_available_sessions(start_date, end_date)
if not sessions_data or not sessions_data.get("success", False): if not sessions_data or not sessions_data.get("success", False):
@@ -317,21 +318,29 @@ class CrossFitBooker:
async def run(self) -> None: async def run(self) -> None:
tz = pytz.timezone(TIMEZONE) tz = pytz.timezone(TIMEZONE)
th, tm = map(int, TARGET_RESERVATION_TIME.split(":")) th, tm = map(int, TARGET_RESERVATION_TIME.split(":"))
target_time = datetime.now(tz).replace(hour=th, minute=tm, second=0, microsecond=0) target_time = dt.datetime.now(tz).replace(hour=th, minute=tm, second=0, microsecond=0)
booking_window_end = target_time + timedelta(minutes=BOOKING_WINDOW_END_DELTA_MINUTES) booking_window_end = target_time + timedelta(minutes=BOOKING_WINDOW_END_DELTA_MINUTES)
if not self.login(): if not self.login():
logging.error("Authentication failed - exiting program"); return logging.error("Authentication failed - exiting program")
return
try: try:
while True: while True:
try: try:
now = datetime.now(tz) now = dt.datetime.now(tz)
logging.info(f"Current time: {now}") logging.info(f"Current time: {now}")
if target_time <= now <= booking_window_end: # Check if current time is within the booking window
await self.execute_cycle(now); time.sleep(60) logging.debug(f"Current time: {now}, Target time: {target_time}, Booking window end: {booking_window_end}")
# Only execute cycle if we're within the booking window
if target_time <= now < booking_window_end:
logging.debug("Inside booking window - executing cycle")
await self.execute_cycle(now)
time.sleep(60)
else: else:
logging.debug("Outside booking window - sleeping for 300 seconds")
time.sleep(300) time.sleep(300)
except Exception as e: except Exception as e:
logging.error(f"Unexpected error in booking cycle: {e} - Traceback: {traceback.format_exc()}"); time.sleep(60) logging.error(f"Unexpected error in booking cycle: {e} - Traceback: {traceback.format_exc()}")
time.sleep(60)
except KeyboardInterrupt: except KeyboardInterrupt:
self.quit() self.quit()