mirror of
https://github.com/trushildhokiya/allininx-2.git
synced 2025-03-15 20:48:40 +00:00
152 lines
4.2 KiB
Markdown
152 lines
4.2 KiB
Markdown
|
# reworkd_platform
|
||
|
|
||
|
This project was generated using fastapi_template.
|
||
|
|
||
|
## Poetry
|
||
|
|
||
|
This project uses poetry. It's a modern dependency management
|
||
|
tool.
|
||
|
|
||
|
To run the project use this set of commands:
|
||
|
|
||
|
```bash
|
||
|
poetry install
|
||
|
poetry run python -m reworkd_platform
|
||
|
```
|
||
|
|
||
|
This will start the server on the configured host.
|
||
|
|
||
|
You can find swagger documentation at `/api/docs`.
|
||
|
|
||
|
You can read more about poetry here: https://python-poetry.org/
|
||
|
|
||
|
## Docker
|
||
|
|
||
|
You can start the project with docker using this command:
|
||
|
|
||
|
```bash
|
||
|
docker-compose -f deploy/docker-compose.yml --project-directory . up --build
|
||
|
```
|
||
|
|
||
|
If you want to develop in docker with autoreload add `-f deploy/docker-compose.dev.yml` to your docker command.
|
||
|
Like this:
|
||
|
|
||
|
```bash
|
||
|
docker-compose -f deploy/docker-compose.yml -f deploy/docker-compose.dev.yml --project-directory . 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 `poetry.lock` or `pyproject.toml` with this command:
|
||
|
|
||
|
```bash
|
||
|
docker-compose -f deploy/docker-compose.yml --project-directory . build
|
||
|
```
|
||
|
|
||
|
## Project structure
|
||
|
|
||
|
```bash
|
||
|
$ tree "reworkd_platform"
|
||
|
reworkd_platform
|
||
|
├── 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.
|
||
|
└── lifetime.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 "REWORKD_PLATFORM_" prefix.
|
||
|
|
||
|
For example if you see in your "reworkd_platform/settings.py" a variable named like
|
||
|
`random_parameter`, you should provide the "REWORKD_PLATFORM_RANDOM_PARAMETER"
|
||
|
variable to configure the value. This behaviour can be changed by overriding `env_prefix` property
|
||
|
in `reworkd_platform.settings.Settings.Config`.
|
||
|
|
||
|
An example of .env file:
|
||
|
|
||
|
```bash
|
||
|
REWORKD_PLATFORM_RELOAD="True"
|
||
|
REWORKD_PLATFORM_PORT="8000"
|
||
|
REWORKD_PLATFORM_ENVIRONMENT="development"
|
||
|
```
|
||
|
|
||
|
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:
|
||
|
|
||
|
* black (formats your code);
|
||
|
* mypy (validates types);
|
||
|
* isort (sorts imports in all files);
|
||
|
* flake8 (spots possibe bugs);
|
||
|
|
||
|
You can read more about pre-commit here: https://pre-commit.com/
|
||
|
|
||
|
## Running tests
|
||
|
|
||
|
If you want to run it in docker, simply run:
|
||
|
|
||
|
```bash
|
||
|
docker-compose -f deploy/docker-compose.yml -f deploy/docker-compose.dev.yml --project-directory . run --build --rm api pytest -vv .
|
||
|
docker-compose -f deploy/docker-compose.yml -f deploy/docker-compose.dev.yml --project-directory . down
|
||
|
```
|
||
|
|
||
|
For running tests on your local machine.
|
||
|
|
||
|
1. you need to start a database.
|
||
|
|
||
|
I prefer doing it with docker:
|
||
|
|
||
|
```
|
||
|
docker run -p "3306:3306" -e "MYSQL_PASSWORD=reworkd_platform" -e "MYSQL_USER=reworkd_platform" -e "MYSQL_DATABASE=reworkd_platform" -e ALLOW_EMPTY_PASSWORD=yes bitnami/mysql:8.0.30
|
||
|
```
|
||
|
|
||
|
2. Run the pytest.
|
||
|
|
||
|
```bash
|
||
|
pytest -vv .
|
||
|
```
|
||
|
|
||
|
## Running linters
|
||
|
|
||
|
```bash
|
||
|
# Flake
|
||
|
poetry run black .
|
||
|
poetry run autoflake --in-place --remove-duplicate-keys --remove-all-unused-imports -r .
|
||
|
poetry run flake8
|
||
|
poetry run mypy .
|
||
|
|
||
|
# Pytest
|
||
|
poetry run pytest -vv --cov="reworkd_platform" .
|
||
|
|
||
|
# Bump packages
|
||
|
poetry self add poetry-plugin-up
|
||
|
poetry up --latest
|
||
|
```
|