Office Booking CLI — это небольшое консольное приложение на Python, которое позволяет бронировать офисные кабинеты, проверять их доступность и узнавать, кем и до какого времени они заняты.
Проект реализован без использования сторонних фреймворков (Django/Flask/FastAPI/Typer/SQLAlchemy и т.д.) — только на стандартной библиотеке Python (модули sqlite3
, argparse
, logging
, smtplib
и пр.).
- Создание и инициализация базы данных.
- Проверка доступности кабинета на определённый промежуток времени.
- Бронирование кабинета (с сохранением данных о пользователе, времени и контактной информации).
- Получение информации о том, кем и до какого времени занят кабинет.
- Отправка уведомлений (Email и «SMS»-заглушка) о бронировании.
- Логирование всех важных действий в консоль и в лог-файл
booking.log
.
office-booking/
├── src/
│ ├── __init__.py
│ ├── database.py # Класс Database для работы с SQLite
│ ├── booking.py # Класс BookingManager (логика бронирования)
│ ├── notification.py # Класс Notifier (отправка уведомлений)
│ └── app.py # Класс BookingApp (CLI и взаимодействие)
├── main.py # Точка входа (запуск CLI)
├── .env.example # Пример файла с переменными окружения
├── booking.log # Файл логов (создаётся при запуске)
├── .gitignore
└── README.md # Текущее описание проекта
Обратите внимание: файлы
.env
и базу данныхoffice_booking.db
обычно не коммитят в репозиторий.
- Python 3.12+
- SQLite (модуль
sqlite3
) - argparse для создания CLI-интерфейса.
- logging для записи логов.
- smtplib +
email.mime.text
для отправки писем. - python-dotenv (при желании) для работы с переменными окружения.
-
Клонируйте репозиторий:
git clone https://github.com/azizjon-aliev/office-booking.git cd office-booking
-
Создайте виртуальное окружение и активируйте его (опционально, но рекомендуется):
python -m venv .venv source .venv/bin/activate # Linux/Mac .venv\Scripts\activate # Windows
-
Установите зависимости (если есть
requirements.txt
или используетеpip install
по необходимости):pip install -r requirements.txt
Если вы строго придерживаетесь «только стандартных библиотек», возможно, у вас нет
requirements.txt
. Тогда зависимости могут не понадобиться, кромеpython-dotenv
(если хотите грузить.env
). -
Создайте файл
.env
на базе.env.example
(или вручную). Заполните реальными SMTP-настройками (при необходимости) и не забудьте добавить.env
в.gitignore
:SMTP_SERVER="smtp.example.com" SMTP_PORT="587" SENDER_EMAIL="[email protected]" SENDER_PASSWORD="SUPER_SECRET"
-
Инициализируйте базу данных:
python main.py init
В корне проекта появится файл
office_booking.db
(или в другом месте, если вы так указали).
Приложение работает через CLI. Основные команды:
-
Инициализация БД:
python main.py init
Создаёт (или проверяет) таблицу
bookings
в файлеoffice_booking.db
. -
Проверка доступности:
python main.py check <room_number> <start_time> <end_time>
Пример:
python main.py check 5 "2025-01-10 09:00" "2025-01-10 11:00"
Сообщит, свободен ли кабинет №5 в указанный период.
-
Бронирование:
python main.py book <room_number> <occupant_name> <occupant_email> <occupant_phone> <start_time> <end_time>
Пример:
python main.py book 5 "Иванов Иван" "[email protected]" "+79990000000" "2025-01-10 09:00" "2025-01-10 11:00"
Если кабинет свободен, создаётся запись о бронировании. Автоматически отправляется email (и «SMS»-заглушка).
-
Информация о занятости:
python main.py info <room_number> <start_time> <end_time>
Пример:
python main.py info 5 "2025-01-10 09:00" "2025-01-10 11:00"
Показывает, кем и до скольки занят кабинет (если есть пересечение по времени).
-
Справка (если вы добавили отдельную команду
help
):python main.py help
Либо используйте встроенный флаг:
python main.py --help
Покажет общее описание и список команд.
Приложение пишет логи:
- В консоль (уровень INFO и выше).
- В файл
booking.log
(уровень DEBUG и выше).
Вы можете изменить формат/уровень логирования в файле app.py
(или где у вас инициализируется логгер).
- Валидировать даты/время: сейчас используется простой текстовый формат
YYYY-MM-DD HH:MM
; можно добавить проверку формата черезdatetime.strptime
. - Управление пользователями: реализовать аутентификацию, чтобы знать, кто именно бронирует кабинет.
- Docker: упаковать проект в Docker для удобного деплоя.
- CI/CD: подключить GitHub Actions или другой сервис для автоматического прогона тестов.