Простой консольный проект для управления библиотекой с использованием SQLite.
Позволяет добавлять, искать, обновлять и удалять книги из базы данных.
- Добавление книги (название, автор, год)
- Получение информации о книге по названию
- Просмотр всех книг
- Обновление статуса книги (например, “в наличии” / “выдана”)
- Удаление книги
- Автоматическое создание базы данных при первом запуске
- Полное покрытие unit-тестами с использованием pytest
library_manager/
│
├── core/
│ ├── enums.py # Enum со статусами книг
│ ├── utils.py # Утилиты и валидации
│ └── custom_exceptions.py # Пользовательские исключения
│
├── database/
│ ├── __init__.py
│ ├── manager.py # Подключение к базе данных
│ ├── repositories.py # CRUD-операции с таблицей Library
│ └── models.py # Модель Book
│
├── library/
│ ├── __init__.py
│ └── services.py # Логика работы с репозиторием
│
├── tests/
│ └── test_library.py # Unit-тесты для всего функционала
│
├── main.py # Точка входа, консольный интерфейс
└── README.md # Этот файл
- Клонируй репозиторий:
git clone https://github.com/fIIame/library_manager
cd library_manager- Создай виртуальное окружение:
python -m venv .venv
source .venv/bin/activate # macOS / Linux
# .venv\Scripts\activate # Windows- Запусти проект:
python main.py- Укажи путь к базе данных (или оставь пустым, чтобы создать
database.dbв текущей директории):
Path: data/
Проект полностью покрыт тестами с использованием pytest.
pytest -v- Добавление книги
- Поиск по названию
- Обновление статуса
- Получение всех книг
- Удаление книги
- Валидация входных данных
- Обработка исключений
Тесты используют временную БД (tmp_path), поэтому не затрагивают реальную базу.
Чтобы посмотреть coverage:
pip install pytest-cov
pytest --cov=database --cov=library --cov=core -vPath: data/
>>> add
Title: Мастер и Маргарита
Author: Михаил Булгаков
Year: 1967
>>> get
Title: Мастер и Маргарита
Book(book_id=1, title='Мастер и Маргарита', author='Михаил Булгаков', year=1967, status='в наличии')
>>> update
Title: Мастер и Маргарита
New status: выдана
>>> getall
Book(book_id=1, title='Мастер и Маргарита', author='Михаил Булгаков', year=1967, status='выдана')
>>> delete
Title: Мастер и Маргарита
Book deleted successfully!
- Python 3.10+
- SQLite3
- Logging
- pytest + pytest-cov
Misha Kharchenko
Data Analyst / Python Developer