Skip to content
This repository has been archived by the owner on Jun 10, 2024. It is now read-only.

FastAPI hello-world example API using uvicorn.

License

Notifications You must be signed in to change notification settings

smarlhens/python-fastapi-hello-word

Repository files navigation

FastAPI logo uvicorn logo

Poetry logo pre-commit logo isort logo bandit logo pytest logo

Docker logo GitHub Actions logo

Python FastAPI Hello World

CodeQL GitHub CI pre-commit.ci status GitHub license


Table of Contents


Prerequisites


Installation

  1. Clone the git repository

    git clone https://github.com/smarlhens/python-fastapi-hello-word.git
  2. Go into the project directory

    cd python-fastapi-hello-word/
  3. Checkout working branch

    git checkout <branch>
  4. Enable pre-commit hooks

    pre-commit install
  5. Start FastAPI app

    uvicorn myservice.main:app --host 0.0.0.0 --proxy-headers --forwarded-allow-ips='*' --port 8000
  6. Navigate to docs: http://0.0.0.0:8000/docs


What's in the box ?

Poetry

Poetry is a tool for dependency management and packaging in Python. It allows you to declare the libraries your project depends on and it will manage (install/update) them for you.

pyproject.toml file (pyproject.toml): orchestrate your project and its dependencies poetry.lock file (poetry.lock): ensure that the package versions are consistent for everyone working on your project

For more configuration options and details, see the configuration docs.

pre-commit

pre-commit is a framework for managing and maintaining multi-language pre-commit hooks.

.pre-commit-config.yaml file (.pre-commit-config.yaml): describes what repositories and hooks are installed

For more configuration options and details, see the configuration docs.

flake8

flake8 is a tool for style guide enforcement.

Rules are defined in the setup.cfg.

For more configuration options and details, see the configuration docs.

mypy

mypy is an optional static type checker for Python that aims to combine the benefits of dynamic (or "duck") typing and static typing.

Rules are defined in the pyproject.toml.

For more configuration options and details, see the configuration docs.

isort

isort is tool that sort your imports, so you don't have to.

Rules are defined in the pyproject.toml.

For more configuration options and details, see the configuration docs.

black

black is an uncompromising code formatter.

Rules are defined in the pyproject.toml.

For more configuration options and details, see the configuration docs.

bandit

bandit is a tool designed to find common security issues in Python code.

Rules are defined in the pyproject.toml.

For more configuration options and details, see the configuration docs.

docformatter

docformatter is a tool designed to format docstrings to follow PEP 257.

Options are defined in the .pre-commit-config.yaml.


Testing

We are using pytest & pytest-cov to write tests.

To run tests:

poetry run pytest tests
Output
collected 3 items

tests/test_myservice.py::test_read_root PASSED                                             [ 33%]
tests/test_myservice.py::test_read_item_with_id_and_query PASSED                           [ 66%]
tests/test_myservice.py::test_read_item_with_id_without_query PASSED                       [100%]

To run tests with coverage:

poetry run pytest tests --cov=src
Output
collected 3 items

tests/test_myservice.py::test_read_root PASSED                                             [ 33%]
tests/test_myservice.py::test_read_item_with_id_and_query PASSED                           [ 66%]
tests/test_myservice.py::test_read_item_with_id_without_query PASSED                       [100%]

---------- coverage: platform linux, python 3.10.4-final-0 -----------
Name                        Stmts   Miss  Cover
-----------------------------------------------
src/myservice/__init__.py       1      0   100%
src/myservice/main.py          15      0   100%
src/myservice/settings.py       8      0   100%
-----------------------------------------------
TOTAL                          24      0   100%

Docker

Build

To build the docker production image using Dockerfile:

docker build . -t my-fastapi-application:latest

To build the docker development image using Dockerfile:

docker build . --target development -t my-fastapi-application:dev

Run

To run the FastAPI production app example using Docker:

docker run -p 8000:8000 -it --rm my-fastapi-application:latest # or :dev for development

Execute command inside container

docker run -p 8000:8000 -it --rm --entrypoint /bin/bash my-fastapi-application:lastest # or :dev for development