Самое важное - все папки в питоне должны быть организованы как модули,
то есть там должен быть __init__.py
файл для инициализации
тогда потом можно будет делать
import module_name
from module_name import something
иначе придется руками доставать при импортах файлы из модуля и это не будет нормально работать
Это обязательная штука - всегда (99.99% случаев), когда ты делаешь папку, которая содержит python-код, это должен быть модуль.
При проектировании проекта следует понять, какие по смыслу части у тебя в проекте будут. Обдумав это уже можно придумать структуру.
В твоем случае у тебя есть следующие части:
- консумер, который отлавливает сообщения из рэббита и сохраняет в бд
- ORM (то есть модели) для базы данных
- фастапи, который будет отдавать нам страничку со списком appeals
- ну и все инициализации (как pika, так и sqlalchemy)
Согласно предыдущим пунктам у нас получается следующая структура:
.
├── readme.md
├── run.py
└── servicedb
├── __init__.py
├── consumers.py
├── db.py
├── models.py
├── pika_connection.py
└── views.py
Пройдемся по пунктам:
это файл инициализации, в него надо импортировать три наших сервиса
это файл, где будет вьюха для того, чтобы отдавать страничку со списком сохраненных appeals
также тут может быть создан луп для фастапи
это файл, файл инициализации коннекшена к базе данных в результате должен получиться такой файл, из которого можно сделать
from .db import import SessionLocal, engine
аналогично тому, что описано в туториале тут https://fastapi.tiangolo.com/tutorial/sql-databases/ и потом эти штуки будут использоваться для того, чтобы делать запросы
файл с моделями из него должно быть можно импортировать модель, чтобы потом ее использовать для запроса
это файл аналогичный db.py
но для инициализации рэббита и подключения
к нему через пику
в результате должно быть можно делать так
from .pika_connection import connection
это файл где будет написан консьюмер, то есть функция,
которая обрабатывает те сообщения из реббита, которые тебе пришли
из бэкенд сервиса
в него как раз должно импортироваться pika_connection
этот файл находится отдельно от пакета - это наш энтрипоинт то есть тот файл, который все будет запускать и подключение к бд, и фастапи, и подключение к реббиту
он должен выглядеть примерно так
from servicedb import ...
# тут код по запуску того, что импортировалось
ну и запуск проекта должен быть таким
python run.py