Did you know that GitHub supports table of contents by default 🤔
This is the API for music room service in InNoHassle ecosystem.
- 🎵 Booking Music room
- 📅 Schedule of Music room
- 🔒 Roles and permissions
- Python 3.12 & Poetry
- FastAPI & Pydantic
- Aiogram 3 & aiogram-dialog
- Database and ORM: PostgreSQL, SQLAlchemy, Alembic
- Formatting and linting: Ruff, pre-commit
- Deployment: Docker, Docker Compose, GitHub Actions
-
Install Python 3.12
-
Install Poetry
-
Install project dependencies with Poetry.
poetry install
-
Set up pre-commit hooks:
poetry run pre-commit install --install-hooks -t pre-commit -t commit-msg
-
Set up project settings file (check settings.schema.yaml for more info).
cp settings.example.yaml settings.yaml
Edit
settings.yaml
according to your needs. -
Set up a PostgreSQL database instance.
Using docker container
- Set up database settings for docker-compose container
in
.env
file:хcp .env.example .env
- Run the database instance:
docker compose up -d db
- Make sure to set up the actual database connection in
settings.yaml
, for example:db_url: postgresql+asyncpg://postgres:postgres@localhost:5433/postgres
Using pgAdmin
- Connect to the PostgreSQL server using pgAdmin
- Set up a new database in the server:
Edit > New Object > New database
- Use the database name in
settings.yaml
file, for exampleinnohassle-events
:db_url: postgresql+asyncpg://postgres:your_password@localhost:5432/innohassle-events
- Set up database settings for docker-compose container
in
-
Compile translation (
.po
) files:poetry run pybabel compile -d locales -D messages
Set up PyCharm integrations
- Ruff (plugin).
It will lint and format your code.
Make sure to enable
Use ruff format
option in plugin settings. - Pydantic (plugin). It will fix PyCharm issues with type-hinting.
- Conventional commits (plugin). It will help you to write conventional commits.
- Install dependencies for api if needed:
poetry install
- Run the database if you have not done it yet
- Upgrade the database schema using alembic:
poetry run alembic upgrade head
- Run the ASGI server
OR using uvicorn directly
poetry run python -m src.api
poetry run uvicorn src.api.app:app --use-colors --proxy-headers --forwarded-allow-ips=* --port=8001
Now the API is running on http://localhost:8001. Good job!
- Install dependencies for bot if needed:
poetry install
- Run the API service or configure the bot to work with the real(production) API.
- Run the Redis server if needed:
docker compose up -d redis
- Run the bot:
poetry run python -m src.bot
Aiogram:
- Extract messages:
poetry run pybabel extract -k __ --input-dirs=. -o locales/messages.pot
- Initialize languages:
poetry run pybabel init -i locales/messages.pot -d locales -D messages -l en poetry run pybabel init -i locales/messages.pot -d locales -D messages -l ru
- Translate messages in created
.po
files - Compile translations:
poetry run pybabel compile -d locales -D messages
Aiogram dialog:
Add translations identifiers (strings inside I18Format
) and their translations to .ftl
files
We use Docker with Docker Compose plugin to run the website on servers.
- Copy the file with environment variables:
cp .env.example .env
- Change environment variables in the
.env
file - Copy the file with settings:
cp settings.example.yaml settings.yaml
- Change settings in the
settings.yaml
file according to your needs (check settings.schema.yaml for more info) - Install Docker with Docker Compose
- Build a Docker image:
docker compose build --pull
- Run the container:
docker compose up --detach
- Check the logs:
docker compose logs -f
We are open to contributions of any kind. You can help us with code, bugs, design, documentation, media, new ideas, etc. If you are interested in contributing, please read our contribution guide.