146 lines
3.6 KiB
Markdown
146 lines
3.6 KiB
Markdown
# 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 .
|
||
```
|
||
|