# zangramru This project was generated using fastapi_template. ## UV This project uses uv. It's a modern dependency management tool. To run the project use this set of commands: ```bash uv sync --locked uv run -m zangramru ``` This will start the server on the configured host. You can find swagger documentation at `/api/docs`. You can read more about uv here: https://docs.astral.sh/ruff/ ## Docker You can start the project with docker using this command: ```bash docker compose up --build ``` This command exposes the web application on port 8000, mounts current directory and enables autoreload. But you have to rebuild image every time you modify `uv.lock` or `pyproject.toml` with this command: ```bash docker compose build ``` ## Project structure ```bash $ tree "zangramru" zangramru ├── conftest.py # Fixtures for all tests. ├── db # module contains db configurations │   ├── dao # Data Access Objects. Contains different classes to interact with database. │   └── models # Package contains different models for ORMs. ├── __main__.py # Startup script. Starts uvicorn. ├── services # Package for different external services such as rabbit or redis etc. ├── settings.py # Main configuration settings for project. ├── static # Static content. ├── tests # Tests for project. └── web # Package contains web server. Handlers, startup config. ├── api # Package with all handlers. │   └── router.py # Main router. ├── application.py # FastAPI application configuration. └── lifespan.py # Contains actions to perform on startup and shutdown. ``` ## Configuration This application can be configured with environment variables. You can create `.env` file in the root directory and place all environment variables here. All environment variables should start with "ZANGRAMRU_" prefix. For example if you see in your "zangramru/settings.py" a variable named like `random_parameter`, you should provide the "ZANGRAMRU_RANDOM_PARAMETER" variable to configure the value. This behaviour can be changed by overriding `env_prefix` property in `zangramru.settings.Settings.Config`. An example of .env file: ```bash ZANGRAMRU_RELOAD="True" ZANGRAMRU_PORT="8000" ZANGRAMRU_ENVIRONMENT="dev" ``` You can read more about BaseSettings class here: https://pydantic-docs.helpmanual.io/usage/settings/ ## Pre-commit To install pre-commit simply run inside the shell: ```bash pre-commit install ``` pre-commit is very useful to check your code before publishing it. It's configured using .pre-commit-config.yaml file. By default it runs: * mypy (validates types); * ruff (spots possible bugs); You can read more about pre-commit here: https://pre-commit.com/ ## Migrations If you want to migrate your database, you should run following commands: ```bash # You have to set a PICCOLO_CONF variable export PICCOLO_CONF="zangramru.piccolo_conf" # Now you can easily run migrations using piccolo migrations forwards all ``` ### Reverting migrations If you want to revert migrations, you should run: ```bash ``` ### Migration generation To generate migrations you should run: ```bash ``` ## Running tests If you want to run it in docker, simply run: ```bash docker compose run --build --rm api pytest -vv . docker compose down ``` For running tests on your local machine. 1. you need to start all aux services. We can do so by using our `docker-compose.yaml` configuration. It already has everything we need. ```bash docker compose up -d --wait db ``` 2. Run tests. ```bash pytest -vv . ```