Практикум · сборка проектаРабота 1
03 / 01 Самостоятельная работа

Соберите иерархию проекта

Семнадцать файлов лежат в одной куче. Задача — построить из них дерево проекта: каждый файл кладётся туда, где находится его ответственность.

Результат работыКуча файлов → проект, который запускается и проходит тесты
Для работы вместе с преподавателем

Что в архиве

Программа Cafe Report читает заказы кофейни за смену из CSV-файла и печатает отчёт: сколько было заказов, какая вышла выручка, какой средний чек и сколько принёс каждый официант. Программа рабочая, менять код не нужно.

Из проекта пропали папки: все файлы лежат одним списком, а имена записаны как попало — «ЗАПУСК main финал.py», «отчет_v2.py», «что не коммитить.txt». Вместе с кодом в кучу попали данные, тесты, документы, настройки и файлы, которые в проект не входят.

↓Скачать работу 1ZIP · 17 файлов, задание в ЗАДАНИЕ.md

Распакуйте архив в отдельную папку. Полный текст задания лежит внутри архива в файле ЗАДАНИЕ.md; его же можно скачать отдельно.

Импорты показывают раскладку

Раскладка записана в самом коде. Импорт в Python повторяет путь к файлу, поэтому по строке импорта восстанавливается дерево папок.

ЗАПУСК main финал.py
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 не попадают лишние файлы.
  1. Прочитайте файлы. Откройте каждый и ответьте: он считает, печатает, хранит данные, проверяет код, объясняет проект или настраивает инструменты?
  2. Разделите код и всё остальное. Код идёт в app, данные — в отдельную папку, проверки — в tests, документы — в docs, настройки — в корень.
  3. Разделите код внутри app. Правила этого проекта — расчёты и отчёт — в одну папку, мелкие функции для сумм и строк — в другую. Имена папок возьмите из импортов.
  4. Добавьте __init__.py. Пустой файл в каждой папке с кодом: без него Python не считает папку пакетом.
  5. Переименуйте файлы. Латиница, маленькие буквы, слова через нижнее подчёркивание, без пробелов. Файлы тестов начинаются с test_.
  6. Уберите лишнее. Кеш Python, служебный файл системы, черновая записка и старая версия программы в проект не входят. Файл с секретом остаётся на диске, но не попадает в Git.
  7. Запустите и проверьте. Обе команды выполняются из корня проекта.
ТЕРМИНАЛ · cafe-report/
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

↓Скачать эталонZIP · собранный проект, README и docs/structure.md

В эталоне есть файл docs/structure.md — разбор того, за что отвечает каждая папка и чем services отличается от utils. Прочитайте его после сверки: в нём объяснено, почему файлы разложены так.

Что сдать

Папку cafe-report в вашем репозитории дисциплины. В README.md добавьте дерево проекта и по одной строке о назначении каждой папки.

Баллы: раскладка файлов и папок — 3, запуск с ожидаемым результатом — 3, тесты — 2, README — 2. Всего 10.