81 lines
2.6 KiB
Python
81 lines
2.6 KiB
Python
# Native modules
|
|
import logging
|
|
import os
|
|
from typing import Dict, Any, Optional
|
|
|
|
# Import the AuthHandler class
|
|
from auth import AuthHandler
|
|
|
|
# Import the SessionManager class
|
|
from session_manager import SessionManager
|
|
|
|
# Import the Booker class
|
|
from booker import Booker
|
|
|
|
# Import the SessionNotifier class
|
|
from session_notifier import SessionNotifier
|
|
|
|
# Load environment variables
|
|
from dotenv import load_dotenv
|
|
load_dotenv()
|
|
|
|
# Configuration
|
|
USERNAME = os.environ.get("CROSSFIT_USERNAME")
|
|
PASSWORD = os.environ.get("CROSSFIT_PASSWORD")
|
|
|
|
if not all([USERNAME, PASSWORD]):
|
|
raise ValueError("Missing environment variables: CROSSFIT_USERNAME and/or CROSSFIT_PASSWORD")
|
|
|
|
class CrossFitBooker:
|
|
"""
|
|
A simple orchestrator class for the CrossFit booking system.
|
|
|
|
This class is responsible for initializing and coordinating the other components
|
|
(AuthHandler, SessionManager, and Booker) but does not implement the actual functionality.
|
|
"""
|
|
|
|
def __init__(self) -> None:
|
|
"""
|
|
Initialize the CrossFitBooker with necessary components.
|
|
"""
|
|
# Initialize the AuthHandler with credentials from environment variables
|
|
self.auth_handler = AuthHandler(USERNAME, PASSWORD)
|
|
|
|
# Initialize the SessionManager with the AuthHandler
|
|
self.session_manager = SessionManager(self.auth_handler)
|
|
|
|
# Initialize the SessionNotifier with credentials from environment variables
|
|
email_credentials = {
|
|
"from": os.environ.get("EMAIL_FROM"),
|
|
"to": os.environ.get("EMAIL_TO"),
|
|
"password": os.environ.get("EMAIL_PASSWORD")
|
|
}
|
|
|
|
telegram_credentials = {
|
|
"token": os.environ.get("TELEGRAM_TOKEN"),
|
|
"chat_id": os.environ.get("TELEGRAM_CHAT_ID")
|
|
}
|
|
|
|
# Get notification settings from environment variables
|
|
enable_email = os.environ.get("ENABLE_EMAIL_NOTIFICATIONS", "true").lower() in ("true", "1", "yes")
|
|
enable_telegram = os.environ.get("ENABLE_TELEGRAM_NOTIFICATIONS", "true").lower() in ("true", "1", "yes")
|
|
|
|
self.notifier = SessionNotifier(
|
|
email_credentials,
|
|
telegram_credentials,
|
|
enable_email=enable_email,
|
|
enable_telegram=enable_telegram
|
|
)
|
|
|
|
# Initialize the Booker with the AuthHandler and SessionNotifier
|
|
self.booker = Booker(self.auth_handler, self.notifier)
|
|
|
|
def run(self) -> None:
|
|
"""
|
|
Start the booking process.
|
|
|
|
This method initiates the booking process by running the Booker's main execution loop.
|
|
"""
|
|
import asyncio
|
|
asyncio.run(self.booker.run())
|