Соберите иерархию проекта
Семнадцать файлов лежат в одной куче. Задача — построить из них дерево проекта: каждый файл кладётся туда, где находится его ответственность.
Что в архиве
Программа Cafe Report читает заказы кофейни за смену из CSV-файла и печатает отчёт: сколько было заказов, какая вышла выручка, какой средний чек и сколько принёс каждый официант. Программа рабочая, менять код не нужно.
Из проекта пропали папки: все файлы лежат одним списком, а имена записаны как попало — «ЗАПУСК main финал.py», «отчет_v2.py», «что не коммитить.txt». Вместе с кодом в кучу попали данные, тесты, документы, настройки и файлы, которые в проект не входят.
↓Скачать работу 1ZIP · 17 файлов, задание в ЗАДАНИЕ.mdРаспакуйте архив в отдельную папку. Полный текст задания лежит внутри архива в файле ЗАДАНИЕ.md; его же можно скачать отдельно.
Импорты показывают раскладку
Раскладка записана в самом коде. Импорт в Python повторяет путь к файлу, поэтому по строке импорта восстанавливается дерево папок.
from app.services.orders import load_orders
from app.services.report import build_reportЭта строка означает: в корне проекта есть папка app, внутри неё папка services, внутри неё файл orders.py, а в файле — функция load_orders. Так же читается и вторая строка. Пройдите по импортам всех файлов, и дерево папок соберётся целиком.
Переписывать импорты под свою раскладку нельзя: раскладка должна совпасть с ними.
Порядок работы
- Где
- Новая папка
cafe-reportрядом с остальными проектами дисциплины. - Действие
- Прочитать каждый файл, определить его ответственность, перенести и переименовать.
- Результат
- Проект с папками
app,data,docs,testsи файлами настроек в корне. - Проверка
- Отчёт печатается, девять тестов проходят, в Git не попадают лишние файлы.
- Прочитайте файлы. Откройте каждый и ответьте: он считает, печатает, хранит данные, проверяет код, объясняет проект или настраивает инструменты?
- Разделите код и всё остальное. Код идёт в
app, данные — в отдельную папку, проверки — вtests, документы — вdocs, настройки — в корень. - Разделите код внутри
app. Правила этого проекта — расчёты и отчёт — в одну папку, мелкие функции для сумм и строк — в другую. Имена папок возьмите из импортов. - Добавьте
__init__.py. Пустой файл в каждой папке с кодом: без него Python не считает папку пакетом. - Переименуйте файлы. Латиница, маленькие буквы, слова через нижнее подчёркивание, без пробелов. Файлы тестов начинаются с
test_. - Уберите лишнее. Кеш Python, служебный файл системы, черновая записка и старая версия программы в проект не входят. Файл с секретом остаётся на диске, но не попадает в Git.
- Запустите и проверьте. Обе команды выполняются из корня проекта.
python -m app.main
python -m unittest discover -s tests -vОТЧЁТ ПО ЗАКАЗАМ
----------------------------------
Заказов: 6
Выручка: 3 702,00 ₽
Средний чек: 617,00 ₽
Ran 9 tests ...
OKЕсли не запускается
No module named app
Терминал открыт не в корне проекта. Корень — это папка, внутри которой лежит app. Ещё одна причина: при распаковке появилась вторая вложенная папка с тем же именем, и app оказался на уровень глубже.
No module named app.services
В папке нет файла __init__.py или папка названа не так, как написано в импорте. Сверьте имя папки с импортом посимвольно.
FileNotFoundError: orders.csv
Путь к данным задан в main.py. Откройте его, посмотрите имя папки и имя файла и приведите свою раскладку к ним.
Ran 0 tests
Файлы тестов названы без приставки test_ или лежат не в папке tests. Ноль выполненных тестов не подтверждает готовность работы.
ImportError при запуске тестов
Тесты импортируют код так же, как main.py. Если импорт не работает в тестах, значит раскладка ещё не совпала с импортами — исправлять нужно папки, а не строки импорта.
Сверка после собственной попытки
Показать соответствие файлов
ЗАПУСК main финал.py → app/main.py
ЗАКАЗЫ считать.py → app/services/orders.py
отчет_v2.py → app/services/report.py
деньги рубли.py → app/utils/money.py
text utils.py → app/utils/text.py
проверка заказов.py → tests/test_orders.py
тест отчета FINAL.py → tests/test_report.py
заказы за смену.csv → data/orders.csv
про проект.md → docs/about.md
читать меня.md → README.md
библиотеки.txt → requirements.txt
что не коммитить.txt → .gitignore
заметки.txt, main_старая_версия.py, orders.cpython-311.pyc, .DS_Store → удалить
.env → оставить на диске, добавить в .gitignore
В эталоне есть файл docs/structure.md — разбор того, за что отвечает каждая папка и чем services отличается от utils. Прочитайте его после сверки: в нём объяснено, почему файлы разложены так.
Что сдать
Папку cafe-report в вашем репозитории дисциплины. В README.md добавьте дерево проекта и по одной строке о назначении каждой папки.
Баллы: раскладка файлов и папок — 3, запуск с ожидаемым результатом — 3, тесты — 2, README — 2. Всего 10.