Утилита для чтения данных сотрудников из CSV-файлов и формирования отчётов по заработной плате (payout) с возможностью расширения на другие типы отчётов.
Скачайте проект из GitHub:
git clone https://github.com/venia-min/salary-report.git
cd salary-reportУстановте зависимости:
pip install -r requirements.txtpython main.py data1.csv data2.csv --report payoutПо умолчанию отчёт выводится в консоль.
python main.py data1.csv --report payout --output json --output-path data/default_reportЕсли --output-path не указан, используется стандартный путь: data/default_report.json (для JSON).
- parser/ - универсальный CSV-парсер и специфичные парсеры отчётов
- reports/ - классы отчётов с методами агрегации и форматирования
- output/ - функции сохранения отчётов в разных форматах
- tests/ - тесты проекта
- Создайте класс отчёта в папке reports/, например NewReport.
- Обязателен метод generate() - он отвечает за генерацию отчёта и вывод/сохранение результата.
- Методы load(), format(), print(), save() - опциональны, можно реализовать по необходимости.
- Создайте парсер для обработки CSV (можно использовать CsvReader из parser/).
- Парсер должен считывать и нормализовать данные под требования отчёта.
- Зарегистрируйте отчёт в reports/init.py:
from .new_report import NewReport
REPORT_VARIANTS = {
"payout": ReportPayout,
"newreport": NewReport,
}- Добавьте новый метод сохранения (если требуется):
- Реализуйте функцию сохранения в output/writers.py, например save_report_to_xml(report, path).
- Зарегистрируйте функцию в output/init.py:
SAVE_VARIANTS = {
"json": save_report_to_json,
"xml": save_report_to_xml,
}- Ключи в словарях REPORT_CLASSES и SAVE_VARIANTS — это значения, которые используются в CLI-параметрах --report и --output.
- При добавлении новых отчётов или форматов сохранения — обязательно обновляйте эти словари для поддержки CLI.
Запуск всех тестов с отчётом о покрытии:
pytest --cov=.