Spaces:
Runtime error
Runtime error
File size: 4,294 Bytes
cd6f98e |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 |
# 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
```
|