An API Backend using Fastapi.
WORK IN PROGRESS DO NOT USE!
This backend was initially started as a fork of full-stack-fastapi-postgresql. Due to too many modifications it's now detached from the initial project.
Code source should follow 12 factors principle for cloud deployment (heroku, clevercloud…).
- Include advanced unitary and functional testing
- Uses pytest-BDD for functional testing
- Model classes have been refactored using sqlalchemy_mixins.
- Special cases have been removed as much as possible to simplify the source code
- Include heroku configuration files samples
- Include github action configuration
Create a virtualenv and activate it. Install the requirements:
pip install -r requirements.txt
Install npm packages for commit linting:
npm install
Set your .env file with your local settings. Never commit the .env file!
See .env.sample
for an example.
Run the migrations if your database is empty. Note that it will create an admin user based on your local configuration.
alembic upgrade head
python initial_data.py
The settings use python-dotenv. Your .env file will be merged with the default settings. All secrets should be in the .env file. This follow the 12-factor rules.
If you want to use corrupted password verification, you need to generate a binary with the list of "pwned" passwords. Follow instructions on
https://pypi.org/project/pwnedpass/
Move the binary to data/pwned-passwords-v5.bin. Do no version this file, as it's around 12G.
web: uvicorn app.main:app
Tests will be run:
- On commit for unitary tests
- On push for integrations tests (slow)
See pytest.ini for default options.
Coverage can be configure via .coveragerc file.
# activate your virtualenv first…
# unitary tests (uses markers)
pytest -m unitary
# integration tests
pytest -m integration
# all tests
pytest
# only staged files with pytest-picked
pytest --picked
# with coverage
pytest --cov --cov-report term-missing
# details with Left/Right errors with pytest-clarity
pytest --vv
See app/tests/conftest.py for fixtures. See app/tests/utils/ for the base class for unitary and integration tests.
Note that integration tests use a test database that is rollback for everytest, which make them slow but independent and predicibles. Test data can be found in app/tests/data/.
Add a trace in a test and run pdb
…
pytest.set_trace()
…
$ pytest --pdb
Please request coding guide before starting
alembic revision --autogenerate -m "migration message"
alembic upgrade head
This project is licensed under the terms of the MIT license.