Refactored project structure: Moved all Python modules to a src/ directory, updated imports accordingly. Added new environment variables to Dockerfile and docker-compose.yml. Removed Dockerfile.test and TODO file.
Crossfit Application
This is a Python application for managing Crossfit bookings and notifications. The application automates the process of booking Crossfit sessions and sends notifications via email and Telegram when a booking is successful.
Features
- Automated booking of Crossfit sessions
- Email and Telegram notifications for successful bookings
- Configurable preferred sessions
- Retry logic for booking failures
- Detailed logging
Prerequisites
- Docker
- Docker Compose
Setup
- Create a
.envfile based on.env.exampleand fill in the required credentials. - Build and run the application using Docker Compose:
docker-compose up --build
- The application will run in a Docker container, and the logs will be stored in the
./logdirectory.
Usage
The application will automatically check for available sessions and book them based on your preferences. It will send notifications via email and Telegram when a booking is successful.
Environment Variables
The following environment variables are required:
CROSSFIT_USERNAME: Your Crossfit usernameCROSSFIT_PASSWORD: Your Crossfit passwordEMAIL_FROM: Your email addressEMAIL_TO: Recipient email addressEMAIL_PASSWORD: Your email passwordTELEGRAM_TOKEN: Your Telegram bot tokenTELEGRAM_CHAT_ID: Your Telegram chat ID
Preferred Sessions
You can configure your preferred sessions in the preferred_sessions.json file. The preferred sessions are defined as a list of objects, where each object contains the day of the week, start time, and session name.
[
{
"day_of_week": 4,
"start_time": "17:00",
"session_name_contains": "WEIGHTLIFTING"
},
{
"day_of_week": 5,
"start_time": "12:30",
"session_name_contains": "HYROX"
},
{
"day_of_week": 2,
"start_time": "18:30",
"session_name_contains": "CONDITIONING"
}
]
The application will automatically load the preferred sessions from this file. If the file is not found or contains invalid data, it will fall back to the default hardcoded sessions.
Fields
day_of_week: Integer representing the day of the week (0=Monday, 6=Sunday)start_time: String representing the start time in HH:MM formatsession_name_contains: String containing the name or part of the name of the session
Files
Dockerfile: Docker image definitiondocker-compose.yml: Docker Compose service definition.env.example: Example environment variables file.dockerignore: Docker ignore file.gitignore: Git ignore filebook_crossfit.py: Main application scriptcrossfit_booker.py: Crossfit booking scriptsession_notifier.py: Session notification scriptpreferred_sessions.json: Configuration file for preferred sessionsrequirements.txt: Python dependencies
Project Structure
.
├── Dockerfile
├── docker-compose.yml
├── .env.example
├── .dockerignore
├── .gitignore
├── book_crossfit.py
├── crossfit_booker.py
├── session_notifier.py
├── requirements.txt
├── preferred_sessions.json
└── log
└── crossfit_booking.log
Testing the Telegram Notifier
To manually test the Telegram notifier functionality:
- Ensure you have configured the Telegram credentials in the
.envfile:
TELEGRAM_TOKEN=your_telegram_bot_token
TELEGRAM_CHAT_ID=your_chat_id
- Run the test script:
python test_telegram_notifier.py
License
This project is licensed under the MIT License. See the LICENSE file for details.