Initial wiring
parent
9d4bdd94b3
commit
7501cdc55c
@ -0,0 +1,27 @@
|
|||||||
|
default_stages: [commit, push]
|
||||||
|
repos:
|
||||||
|
- repo: https://github.com/pre-commit/pre-commit-hooks
|
||||||
|
rev: v3.2.0
|
||||||
|
hooks:
|
||||||
|
- id: trailing-whitespace
|
||||||
|
- id: end-of-file-fixer
|
||||||
|
- id: check-yaml
|
||||||
|
- id: check-added-large-files
|
||||||
|
- repo: https://github.com/psf/black
|
||||||
|
rev: 22.8.0
|
||||||
|
hooks:
|
||||||
|
- id: black
|
||||||
|
# https://pylint.pycqa.org/en/latest/user_guide/installation/pre-commit-integration.html
|
||||||
|
- repo: local
|
||||||
|
hooks:
|
||||||
|
- id: pylint
|
||||||
|
name: pylint
|
||||||
|
entry: pylint
|
||||||
|
language: system
|
||||||
|
types: [python]
|
||||||
|
args: [
|
||||||
|
'-rn', # Only display messages
|
||||||
|
'-sn', # Don't display the score
|
||||||
|
'--disable=C,R,W0511', # Disable C and R type messages, and TODO fixme warning
|
||||||
|
]
|
||||||
|
# TODO add https://pre-commit.com/#docker hook for bash linting
|
@ -1,3 +1,3 @@
|
|||||||
# fastapi_celery
|
# FastAPI and Celery
|
||||||
|
|
||||||
FastAPI and Celery
|
Learning distributed task queues by doing. Since it's a greenfield project this also uses a newer async web framework.
|
||||||
|
@ -0,0 +1,7 @@
|
|||||||
|
black==22.8.0
|
||||||
|
flake8==5.0.4
|
||||||
|
invoke==1.7.1
|
||||||
|
pip-tools==6.8.0
|
||||||
|
pre-commit==2.20.0
|
||||||
|
pylint==2.15.2
|
||||||
|
pytest==7.1.3
|
@ -0,0 +1,104 @@
|
|||||||
|
#
|
||||||
|
# This file is autogenerated by pip-compile with python 3.8
|
||||||
|
# To update, run:
|
||||||
|
#
|
||||||
|
# pip-compile dev-requirements.in
|
||||||
|
#
|
||||||
|
astroid==2.12.10
|
||||||
|
# via pylint
|
||||||
|
attrs==22.1.0
|
||||||
|
# via pytest
|
||||||
|
black==22.8.0
|
||||||
|
# via -r dev-requirements.in
|
||||||
|
build==0.8.0
|
||||||
|
# via pip-tools
|
||||||
|
cfgv==3.3.1
|
||||||
|
# via pre-commit
|
||||||
|
click==8.1.3
|
||||||
|
# via
|
||||||
|
# black
|
||||||
|
# pip-tools
|
||||||
|
dill==0.3.5.1
|
||||||
|
# via pylint
|
||||||
|
distlib==0.3.6
|
||||||
|
# via virtualenv
|
||||||
|
filelock==3.8.0
|
||||||
|
# via virtualenv
|
||||||
|
flake8==5.0.4
|
||||||
|
# via -r dev-requirements.in
|
||||||
|
identify==2.5.5
|
||||||
|
# via pre-commit
|
||||||
|
iniconfig==1.1.1
|
||||||
|
# via pytest
|
||||||
|
invoke==1.7.1
|
||||||
|
# via -r dev-requirements.in
|
||||||
|
isort==5.10.1
|
||||||
|
# via pylint
|
||||||
|
lazy-object-proxy==1.7.1
|
||||||
|
# via astroid
|
||||||
|
mccabe==0.7.0
|
||||||
|
# via
|
||||||
|
# flake8
|
||||||
|
# pylint
|
||||||
|
mypy-extensions==0.4.3
|
||||||
|
# via black
|
||||||
|
nodeenv==1.7.0
|
||||||
|
# via pre-commit
|
||||||
|
packaging==21.3
|
||||||
|
# via
|
||||||
|
# build
|
||||||
|
# pytest
|
||||||
|
pathspec==0.10.1
|
||||||
|
# via black
|
||||||
|
pep517==0.13.0
|
||||||
|
# via build
|
||||||
|
pip-tools==6.8.0
|
||||||
|
# via -r dev-requirements.in
|
||||||
|
platformdirs==2.5.2
|
||||||
|
# via
|
||||||
|
# black
|
||||||
|
# pylint
|
||||||
|
# virtualenv
|
||||||
|
pluggy==1.0.0
|
||||||
|
# via pytest
|
||||||
|
pre-commit==2.20.0
|
||||||
|
# via -r dev-requirements.in
|
||||||
|
py==1.11.0
|
||||||
|
# via pytest
|
||||||
|
pycodestyle==2.9.1
|
||||||
|
# via flake8
|
||||||
|
pyflakes==2.5.0
|
||||||
|
# via flake8
|
||||||
|
pylint==2.15.2
|
||||||
|
# via -r dev-requirements.in
|
||||||
|
pyparsing==3.0.9
|
||||||
|
# via packaging
|
||||||
|
pytest==7.1.3
|
||||||
|
# via -r dev-requirements.in
|
||||||
|
pyyaml==6.0
|
||||||
|
# via pre-commit
|
||||||
|
toml==0.10.2
|
||||||
|
# via pre-commit
|
||||||
|
tomli==2.0.1
|
||||||
|
# via
|
||||||
|
# black
|
||||||
|
# build
|
||||||
|
# pylint
|
||||||
|
# pytest
|
||||||
|
tomlkit==0.11.4
|
||||||
|
# via pylint
|
||||||
|
typing-extensions==4.3.0
|
||||||
|
# via
|
||||||
|
# astroid
|
||||||
|
# black
|
||||||
|
# pylint
|
||||||
|
virtualenv==20.16.5
|
||||||
|
# via pre-commit
|
||||||
|
wheel==0.37.1
|
||||||
|
# via pip-tools
|
||||||
|
wrapt==1.14.1
|
||||||
|
# via astroid
|
||||||
|
|
||||||
|
# The following packages are considered to be unsafe in a requirements file:
|
||||||
|
# pip
|
||||||
|
# setuptools
|
@ -0,0 +1,9 @@
|
|||||||
|
version: '3.8'
|
||||||
|
|
||||||
|
services:
|
||||||
|
|
||||||
|
redis:
|
||||||
|
image: redis:7.0.4-alpine
|
||||||
|
restart: always
|
||||||
|
ports:
|
||||||
|
- 6379:6379
|
@ -0,0 +1,8 @@
|
|||||||
|
from fastapi import FastAPI
|
||||||
|
|
||||||
|
app = FastAPI()
|
||||||
|
|
||||||
|
|
||||||
|
@app.get("/")
|
||||||
|
async def root():
|
||||||
|
return {"message": "Hello World"}
|
@ -0,0 +1,4 @@
|
|||||||
|
celery==5.2.7
|
||||||
|
fastapi==0.79.0
|
||||||
|
redis==4.3.4
|
||||||
|
uvicorn[standard]==0.18.2
|
@ -0,0 +1,86 @@
|
|||||||
|
#
|
||||||
|
# This file is autogenerated by pip-compile with python 3.8
|
||||||
|
# To update, run:
|
||||||
|
#
|
||||||
|
# pip-compile requirements.in
|
||||||
|
#
|
||||||
|
amqp==5.1.1
|
||||||
|
# via kombu
|
||||||
|
anyio==3.6.1
|
||||||
|
# via
|
||||||
|
# starlette
|
||||||
|
# watchfiles
|
||||||
|
async-timeout==4.0.2
|
||||||
|
# via redis
|
||||||
|
billiard==3.6.4.0
|
||||||
|
# via celery
|
||||||
|
celery==5.2.7
|
||||||
|
# via -r requirements.in
|
||||||
|
click==8.1.3
|
||||||
|
# via
|
||||||
|
# celery
|
||||||
|
# click-didyoumean
|
||||||
|
# click-plugins
|
||||||
|
# click-repl
|
||||||
|
# uvicorn
|
||||||
|
click-didyoumean==0.3.0
|
||||||
|
# via celery
|
||||||
|
click-plugins==1.1.1
|
||||||
|
# via celery
|
||||||
|
click-repl==0.2.0
|
||||||
|
# via celery
|
||||||
|
deprecated==1.2.13
|
||||||
|
# via redis
|
||||||
|
fastapi==0.79.0
|
||||||
|
# via -r requirements.in
|
||||||
|
h11==0.13.0
|
||||||
|
# via uvicorn
|
||||||
|
httptools==0.5.0
|
||||||
|
# via uvicorn
|
||||||
|
idna==3.4
|
||||||
|
# via anyio
|
||||||
|
kombu==5.2.4
|
||||||
|
# via celery
|
||||||
|
packaging==21.3
|
||||||
|
# via redis
|
||||||
|
prompt-toolkit==3.0.31
|
||||||
|
# via click-repl
|
||||||
|
pydantic==1.10.2
|
||||||
|
# via fastapi
|
||||||
|
pyparsing==3.0.9
|
||||||
|
# via packaging
|
||||||
|
python-dotenv==0.21.0
|
||||||
|
# via uvicorn
|
||||||
|
pytz==2022.2.1
|
||||||
|
# via celery
|
||||||
|
pyyaml==6.0
|
||||||
|
# via uvicorn
|
||||||
|
redis==4.3.4
|
||||||
|
# via -r requirements.in
|
||||||
|
six==1.16.0
|
||||||
|
# via click-repl
|
||||||
|
sniffio==1.3.0
|
||||||
|
# via anyio
|
||||||
|
starlette==0.19.1
|
||||||
|
# via fastapi
|
||||||
|
typing-extensions==4.3.0
|
||||||
|
# via
|
||||||
|
# pydantic
|
||||||
|
# starlette
|
||||||
|
uvicorn[standard]==0.18.2
|
||||||
|
# via -r requirements.in
|
||||||
|
uvloop==0.17.0
|
||||||
|
# via uvicorn
|
||||||
|
vine==5.0.0
|
||||||
|
# via
|
||||||
|
# amqp
|
||||||
|
# celery
|
||||||
|
# kombu
|
||||||
|
watchfiles==0.17.0
|
||||||
|
# via uvicorn
|
||||||
|
wcwidth==0.2.5
|
||||||
|
# via prompt-toolkit
|
||||||
|
websockets==10.3
|
||||||
|
# via uvicorn
|
||||||
|
wrapt==1.14.1
|
||||||
|
# via deprecated
|
@ -0,0 +1,39 @@
|
|||||||
|
"""
|
||||||
|
A set of `invoke` helper commands used for this project.
|
||||||
|
"""
|
||||||
|
from invoke import task
|
||||||
|
|
||||||
|
|
||||||
|
@task
|
||||||
|
def start_app(c):
|
||||||
|
"""Starts the app."""
|
||||||
|
print("Start the app")
|
||||||
|
c.run("uvicorn main:app --reload", pty=True)
|
||||||
|
|
||||||
|
|
||||||
|
@task
|
||||||
|
def run_unit_tests(c):
|
||||||
|
"""Triggers a local unittest run for the app."""
|
||||||
|
# Pytest will hide color output when it thinks it's running
|
||||||
|
# outside of a terminal therefore pty=True is used.
|
||||||
|
c.run("python3 -m pytest -vvv tests/", pty=True)
|
||||||
|
|
||||||
|
|
||||||
|
@task
|
||||||
|
def fix_eof(c):
|
||||||
|
"""Fixes any missing newlines for end of files."""
|
||||||
|
c.run("pre-commit run end-of-file-fixer --all-files", pty=True)
|
||||||
|
|
||||||
|
|
||||||
|
@task
|
||||||
|
def start_redis(c):
|
||||||
|
"""Runs the Redis integration environment."""
|
||||||
|
print("Starting Redis")
|
||||||
|
c.run("docker compose -f docker-compose-redis.yml up -d")
|
||||||
|
|
||||||
|
|
||||||
|
@task
|
||||||
|
def stop_redis(c):
|
||||||
|
"""Stops the Redis integration environent."""
|
||||||
|
print("Stopping Redis")
|
||||||
|
c.run("docker compose -f docker-compose-redis.yml down")
|
Loading…
Reference in New Issue