Skip to content

Dependencies

These are all the packages that this cookiecutter will include for your project to use at runtime. The relevant section in pyproject.toml is highlighted below for reference.

  1. fastapi: The basis for your whole project!
  2. mangum: The key to getting FastAPI running in Lambda
  3. sqlalchemy: An ORM- the best fully-featured ORM we've found.
  4. alembic: For managing database migrations with SQLAlchemy
  5. pymysql: A MySQL driver for Python- required to hook up SQLAlchemy to MySQL
  6. flex-config: A package we developed to make configuring web apps easier.
  7. semantic-version: Python does some weird stuff with your project version- we use this to make the published version (in the OpenAPI document) follow standard Semantic Versioning.
  8. markdown: For publishing CHANGELOG.md with the API so consumers can know what's going on.
  9. secure: For setting some security settings (e.g. HSTS header in responses)
 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
[tool.poetry]
name = "example"
version = "0.1.0"
description = "A Fast API"
authors = []  # You can put your name/email here if you like
readme = "README.md"
packages = [
    {include = "example"},
]
classifiers = [
    "Private :: Not For Publishing!"  # Prevents this from being accidentally published to public PyPI
]
include = ["example/CHANGELOG.md", "example/rds-ca-2019-root.pem"]

[[tool.poetry.source]]
name = "private"
url = "https://pypi.fury.io/my-org/"

[tool.poetry.dependencies]
python = "==3.*,>=3.8.0"
fastapi = ">=0.53.0"
mangum = "^0.8.0"
sqlalchemy = "^1.3.10"
pymysql = "^0.9.3"
secure = "^0.2.1"
flex-config = {version = "^1.1.0", extras = ["all"]}
semantic-version = "^2.8.4"
markdown = "^3.1.1"

[tool.poetry.dev-dependencies]
uvicorn = "^0.11.3"
pytest = "*"
pytest-mock = "*"
pytest-cov = "*"
mypy = "*"
sqlalchemy-stubs = ">=0.3"
safety = "*"
black = {version = ">=19.10b", allow-prereleases = true}
taskipy = "*"
isort = "*"
typer = "^0.2.1"
alembic = "^1.3.2"

[tool.poetry.scripts]
example = "cli:cli"  # For running management CLI in cli.py

[tool.taskipy.tasks]
migrate = "alembic revision --autogenerate -m "
upgrade = "alembic upgrade heads"
downgrade = "alembic downgrade -1"
upgrade_dev = "alembic -x env=dev upgrade heads"
downgrade_dev = "alembic -x env=dev downgrade -1"
upgrade_live = "alembic -x env=live upgrade heads"
downgrade_live = "alembic -x env=live downgrade -1"
check = "safety check && isort --recursive --apply && black . && mypy example && pytest --cov=example"

[tool.black]
line-length = 120
target_version = ['py38']
exclude = '''
(
  /(
    | \.git
    | \.venv
    | \.mypy_cache
  )/
)
'''

[tool.isort]
line_length = 120
skip = "migrations,.serverless,.venv,node_modules"
multi_line_output = 3
include_trailing_comma = true

[tool.coverage.run]
omit = ["example/__init__.py"]