Generate FastAPI projects for high performance applications

Overview

fastapi-mvc

fastapi-mvc CI codecov K8s integration Code style: black PyPI PyPI - Downloads PyPI - Python Version GitHub


Example generated project: https://github.com/rszamszur/fastapi-mvc-example


Features

Generated project core implemented using MVC architectural pattern

Generated project is structured in MVC architectural pattern to help developers who don't know FastAPI yet but are familiar with MVC to get up to speed quickly.

WSGI + ASGI for high performance and better configuration

TLDR;

Running WSGI as a master worker with ASGI workers gives better results than running pure ASGI (for FastAPI for now):

  • better performance (requests per second)
  • better support for different protocols
  • broader configuration
  • better support with using reverse proxy

First of all, whether it's ASGI, WSGI, or combined, think of this as something that serves the application. For instance, Ruby on Rails uses Puma. The result of any of those servers is a TCP/IP or UNIX socket which is later on utilized by reverse proxy ex: Nginx (a TCP/IP socket you can access directly over the network, but still in production, usually it'll be behind a reverse proxy).

Now to WSGI + ASGI part. FastAPI is implemented with asyncio (https://docs.python.org/3/library/asyncio.html), so having a pure WSGI server doesn't make sense since you'd lose all the benefits of asynchronous concurrency. That's where ASGI comes in. However, Python journey with asyncio is still pretty young. Most projects have yet to reach maturity level (you should expect early bugs and a limited feature set). FastAPI, as ASGI server uses uvicorn, which is still prior 1.x.x release (17 in total so far, current 0.16.0) and lacks support for some protocols (ex: no HTTP/2). Moreover, some reverse proxy might not know how to work with asynchronous servers, and some problems or early bugs on this layer might happen as well.

I'm not saying uvicorn is bad. Quite contrary, if you'd run 4 pure uvicorn workes, you'd still get great results. But if you'd run the same amount of workers with gunicorn (WSGI) as a master worker, it turns out you can even pump those numbers up.

Gunicorn with 4 Uvicorn Workers (source: https://stackoverflow.com/a/62977786/10566747):

Requests per second: 7891.28 [#/sec] (mean)
Time per request: 126.722 [ms] (mean)
Time per request: 0.127 [ms] (mean, across all concurrent requests)

Pure Uvicorn with 4 workers:

Requests per second: 4359.68 [#/sec] (mean)
Time per request: 229.375 [ms] (mean)
Time per request: 0.229 [ms] (mean, across all concurrent requests)

~80% better

I guess gunicorn does a better job in worker management. However, it's a more mature project, so it's probably a matter of time when uvicorn (or other ASGI for that matter) will catch up to this benchmark.

Last but not least, gunicorn gives a ton of settings to configure (https://docs.gunicorn.org/en/stable/settings.html), which can come in handy.

Generated project comes with tests at 99% coverage

Unit test coverage is at 99% regardless of chosen configuration. There is also a placeholder for integration tests with an example dummy test.

Proper Dockerfile created with best practices for the cloud and Kubernetes

Container image features:

  • Based on lightweight alpine.
  • Run as PID 1 (with child processes)
  • Utilizes multi-stage build for smallest size possible, also this results in having only necessary libraries/dependencies/tools in outcome container image.
  • DigestSHA - immutable identifier instead of tags, for better reproducibility and security.
  • Signal handling, for Kubernetes to be able to gracefully shut down pods.
  • Created with common layers.

Based on Google Best practices for building containers and own experience.

Extensive GitHub actions for CI

ci_example

Helm chart for Kubernetes

For easily deploying application in Kubernetes cluster.

Reproducible virtualized development environment

Easily boot virtual machine with Vagrant. Code and test straight away.

Note: Project directory is rsync'ed between Host and Guest.

Note2: provided Vagrant vm doesn't have port forwarding configured which means, that application won't be accessible on Host OS.

Redis and aiohttp utilities

For your discretion, I've provided some basic utilities:

  • RedisClient .app.utils.redis
  • AiohttpClient .app.utils.aiohttp_client

They're initialized in asgi.py on FastAPI startup event handler, and are available for whole application scope without passing object instances between controllers.

Kubernetes deployment with HA Redis cluster

Application stack in Kubernetes: k8s_arch

Readable and documented code

The metrics stage in CI workflow ensures important PEP rules are enforced. For additional readability and formatting checks - black is used. Every piece of generated code is documented with docstrings. Last but not least there is also extended README with how to.

Configurable from env

Generated application provides flexibility of configuration. All significant settings are defined by the environment variables, each with the default value.

Quick start

$ pip install fastapi-mvc
$ fastapi-mvc new my-project
$ cd my-project
$ my-project serve

Prerequisites

Installation

pip install fastapi-mvc

Usage

This package exposes simple CLI for easier interaction:

$ fastapi-mvc --help
Usage: fastapi-mvc [OPTIONS] COMMAND [ARGS]...

  Generate and manage fastapi-mvc projects.

Options:
  -v, --verbose  Enable verbose logging.
  --help         Show this message and exit.

Commands:
  new  Create a new FastAPI application.
$ fastapi-mvc new --help
Usage: fastapi-mvc new [OPTIONS] APP_PATH

  Create a new FastAPI application.

  The 'fastapi-mvc new' command creates a new FastAPI application with a
  default directory structure and configuration at the path you specify.

Options:
  -R, --skip-redis                Skip Redis utility files.
  -A, --skip-aiohttp              Skip aiohttp utility files.
  -V, --skip-vagrantfile          Skip Vagrantfile.
  -H, --skip-helm                 Skip Helm chart files.
  -G, --skip-actions              Skip GitHub actions files.
  -C, --skip-codecov              Skip codecov in GitHub actions.
  -I, --skip-install              Dont run make install
  --license [MIT|BSD2|BSD3|ISC|Apache2.0|LGPLv3+|LGPLv3|LGPLv2+|LGPLv2|no]
                                  Choose license.  [default: MIT]
  --repo-url TEXT                 Repository url.
  --help                          Show this message and exit.

To generate new project:

> ~/.bashrc - for zsh: $ echo 'eval "$(_MY_PROJECT_COMPLETE=source_zsh my-project)' >> ~/.zshrc - for fish: $ echo 'eval "$(_MY_PROJECT_COMPLETE=source_fish my-project)' >> ~/.config/fish/completions/my-project.fish">
$ fastapi-mvc new my-project
[install] Begin installing project.
Updating dependencies
Resolving dependencies... (0.7s)

Writing lock file

No dependencies to install or update

Installing the current project: my-project (0.1.0)
Project successfully installed.
To activate virtualenv run: $ poetry shell
Now you should access CLI script: $ my-project --help
Alternatively you can access CLI script via poetry run: $ poetry run my-project --help
To deactivate virtualenv simply type: $ deactivate
To activate shell completion:
 - for bash: $ echo 'eval "$(_MY_PROJECT_COMPLETE=source_bash my-project)' >> ~/.bashrc
 - for zsh: $ echo 'eval "$(_MY_PROJECT_COMPLETE=source_zsh my-project)' >> ~/.zshrc
 - for fish: $ echo 'eval "$(_MY_PROJECT_COMPLETE=source_fish my-project)' >> ~/.config/fish/completions/my-project.fish

To serve api:

$ cd my-project/
$ my-project serve
[2022-01-08 21:47:06 +0100] [2268861] [INFO] Start gunicorn WSGI with ASGI workers.
[2022-01-08 21:47:06 +0100] [2268861] [INFO] Starting gunicorn 20.1.0
[2022-01-08 21:47:06 +0100] [2268861] [INFO] Listening at: http://127.0.0.1:8000 (2268861)
[2022-01-08 21:47:06 +0100] [2268861] [INFO] Using worker: uvicorn.workers.UvicornWorker
[2022-01-08 21:47:06 +0100] [2268861] [INFO] Server is ready. Spawning workers
[2022-01-08 21:47:06 +0100] [2268867] [INFO] Booting worker with pid: 2268867
[2022-01-08 21:47:06 +0100] [2268867] [INFO] Worker spawned (pid: 2268867)
[2022-01-08 21:47:06 +0100] [2268867] [INFO] Started server process [2268867]
[2022-01-08 21:47:06 +0100] [2268867] [INFO] Waiting for application startup.
[2022-01-08 21:47:06 +0100] [2268867] [INFO] Application startup complete.
[2022-01-08 21:47:06 +0100] [2268873] [INFO] Booting worker with pid: 2268873
[2022-01-08 21:47:06 +0100] [2268873] [INFO] Worker spawned (pid: 2268873)
[2022-01-08 21:47:06 +0100] [2268873] [INFO] Started server process [2268873]
[2022-01-08 21:47:06 +0100] [2268873] [INFO] Waiting for application startup.
[2022-01-08 21:47:06 +0100] [2268873] [INFO] Application startup complete.

To confirm it's working:

$ curl localhost:8000/api/ready
{"status":"ok"}

Contributing

Questions, comments or improvements? Please create an issue on Github. I do my best to include every contribution proposed in any way that I can.

License

MIT

Comments
  • Fix install fail when Python version >= 3.10

    Fix install fail when Python version >= 3.10

    A bash condition leads to Python 3.10 being "lower" than Python 3.7, thus the installation of fastapi-mvc would fail.

    Checklist:

    • [x] Added tests for changed code where applicable.
    • [x] Documentation reflects the changes where applicable.
    • [x] Updated the CHANGELOG.md file with your changes.
    • [x] My PR is ready to review.

    Resolves: #60

    Description of the changes being introduced by the pull request: The python version bash condition is changed so Python version >=10 should also pass.

    bug 
    opened by Merinorus 8
  • Restart workers when code changes in development mode

    Restart workers when code changes in development mode

    It would be useful to have reloading changes in development mode. Either as a new option --reload to template CLI serve command, or automatically based on env variable, ex: FASTAPI_ENV=development FASTAPI_ENV=production, similar to Ruby on Rails. Not yet sure which approach would be better. Moreover, just adding --reload flag to WSGI + ASGI combo doesn't work properly, at least from initial tests. It's possible that for development in order to have reloading changes app would need to run on pure uvicorn (ASGI).

    TODO:

    • [x] Research if it's possible to have working reloading changes running gunicorn with uvicorn workers
    • [x] Decide on the way in which this feature should be implemented.
    • [ ] Implement feature + tests
    • [ ] Update template README
    enhancement copier: project 
    opened by rszamszur 6
  • Bump copier from 6.2.0 to 7.0.1

    Bump copier from 6.2.0 to 7.0.1

    Bumps copier from 6.2.0 to 7.0.1.

    Release notes

    Sourced from copier's releases.

    v7.0.1 (2022-10-14)

    Fix

    • remove deprecated code scheduled for removal in Copier v7 (#843)

    v7.0.0 (2022-10-12)

    Feat

    • expand tilde in template source path (#835)

    Fix

    • delete temporary clones after execution automatically (#802)
    • typing: remove invalid migration task stage "task"

    Refactor

    • typing: use abstract container types where possible (#832)
    • use dict constructor as default factory
    • typing: remove unused types
    • remove unreachable code (#826)
    • model a task to execute using a dataclass
    • reduce module imports
    Changelog

    Sourced from copier's changelog.

    v7.0.1 (2022-10-14)

    Fix

    • remove deprecated code scheduled for removal in Copier v7 (#843)

    v7.0.0 (2022-10-12)

    Feat

    • expand tilde in template source path (#835)

    Fix

    • delete temporary clones after execution automatically (#802)
    • typing: remove invalid migration task stage "task"

    Refactor

    • typing: use abstract container types where possible (#832)
    • use dict constructor as default factory
    • typing: remove unused types
    • remove unreachable code (#826)
    • model a task to execute using a dataclass
    • reduce module imports
    Commits
    • ecc0b80 bump: version 7.0.0 → 7.0.1
    • 6085f77 fix: remove deprecated code scheduled for removal in Copier v7 (#843)
    • 3b2bb0e bump: version 6.2.0 → 7.0.0
    • 8cb181a docs: don't lie
    • f0b8490 build(deps): bump plumbum from 1.7.2 to 1.8.0
    • 287b5df build(deps): bump typing-extensions from 4.3.0 to 4.4.0
    • 482db41 refactor(typing): use abstract container types where possible (#832)
    • c653b68 refactor: use dict constructor as default factory
    • 1f40dda docs: replace default argument value N/A by [] for lists
    • 3d00700 refactor(typing): remove unused types
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies python 
    opened by dependabot[bot] 3
  • Bump pytest-cov from 2.12.1 to 4.0.0

    Bump pytest-cov from 2.12.1 to 4.0.0

    Bumps pytest-cov from 2.12.1 to 4.0.0.

    Changelog

    Sourced from pytest-cov's changelog.

    4.0.0 (2022-09-28)

    Note that this release drops support for multiprocessing.

    • --cov-fail-under no longer causes pytest --collect-only to fail Contributed by Zac Hatfield-Dodds in [#511](https://github.com/pytest-dev/pytest-cov/issues/511) <https://github.com/pytest-dev/pytest-cov/pull/511>_.

    • Dropped support for multiprocessing (mostly because issue 82408 <https://github.com/python/cpython/issues/82408>_). This feature was mostly working but very broken in certain scenarios and made the test suite very flaky and slow.

      There is builtin multiprocessing support in coverage and you can migrate to that. All you need is this in your .coveragerc::

      [run] concurrency = multiprocessing parallel = true sigterm = true

    • Fixed deprecation in setup.py by trying to import setuptools before distutils. Contributed by Ben Greiner in [#545](https://github.com/pytest-dev/pytest-cov/issues/545) <https://github.com/pytest-dev/pytest-cov/pull/545>_.

    • Removed undesirable new lines that were displayed while reporting was disabled. Contributed by Delgan in [#540](https://github.com/pytest-dev/pytest-cov/issues/540) <https://github.com/pytest-dev/pytest-cov/pull/540>_.

    • Documentation fixes. Contributed by Andre Brisco in [#543](https://github.com/pytest-dev/pytest-cov/issues/543) <https://github.com/pytest-dev/pytest-cov/pull/543>_ and Colin O'Dell in [#525](https://github.com/pytest-dev/pytest-cov/issues/525) <https://github.com/pytest-dev/pytest-cov/pull/525>_.

    • Added support for LCOV output format via --cov-report=lcov. Only works with coverage 6.3+. Contributed by Christian Fetzer in [#536](https://github.com/pytest-dev/pytest-cov/issues/536) <https://github.com/pytest-dev/pytest-cov/issues/536>_.

    • Modernized pytest hook implementation. Contributed by Bruno Oliveira in [#549](https://github.com/pytest-dev/pytest-cov/issues/549) <https://github.com/pytest-dev/pytest-cov/pull/549>_ and Ronny Pfannschmidt in [#550](https://github.com/pytest-dev/pytest-cov/issues/550) <https://github.com/pytest-dev/pytest-cov/pull/550>_.

    3.0.0 (2021-10-04)

    Note that this release drops support for Python 2.7 and Python 3.5.

    • Added support for Python 3.10 and updated various test dependencies. Contributed by Hugo van Kemenade in [#500](https://github.com/pytest-dev/pytest-cov/issues/500) <https://github.com/pytest-dev/pytest-cov/pull/500>_.
    • Switched from Travis CI to GitHub Actions. Contributed by Hugo van Kemenade in [#494](https://github.com/pytest-dev/pytest-cov/issues/494) <https://github.com/pytest-dev/pytest-cov/pull/494>_ and [#495](https://github.com/pytest-dev/pytest-cov/issues/495) <https://github.com/pytest-dev/pytest-cov/pull/495>_.
    • Add a --cov-reset CLI option. Contributed by Danilo Šegan in [#459](https://github.com/pytest-dev/pytest-cov/issues/459) <https://github.com/pytest-dev/pytest-cov/pull/459>_.
    • Improved validation of --cov-fail-under CLI option. Contributed by ... Ronny Pfannschmidt's desire for skark in [#480](https://github.com/pytest-dev/pytest-cov/issues/480) <https://github.com/pytest-dev/pytest-cov/pull/480>_.
    • Dropped Python 2.7 support.

    ... (truncated)

    Commits
    • 28db055 Bump version: 3.0.0 → 4.0.0
    • 57e9354 Really update the changelog.
    • 56b810b Update chagelog.
    • f7fced5 Add support for LCOV output
    • 1211d31 Fix flake8 error
    • b077753 Use modern approach to specify hook options
    • 00713b3 removed incorrect docs on data_file.
    • b3dda36 Improve workflow with a collecting status check. (#548)
    • 218419f Prevent undesirable new lines to be displayed when report is disabled
    • 60b73ec migrate build command from distutils to setuptools
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies python 
    opened by dependabot[bot] 3
  • Add Nix CI workflow

    Add Nix CI workflow

    • [x] I have searched the issues of this repo and believe that this is not a duplicate.

    Feature Request

    I need to play a bit with nix in GH actions prior deciding whether to implement this.

    Clarify/test:

    • nix setup in actions
    • Steps needed to refactor current actions
    • /nix/store caching?

    Resources:

    • https://github.com/cachix/install-nix-action
    • https://github.com/cachix/cachix-action
    automation 
    opened by rszamszur 3
  • Add project template improvements

    Add project template improvements

    Checklist:

    • [x] Added tests for changed code where applicable.
    • [x] Documentation reflects the changes where applicable.
    • [x] Updated the CHANGELOG.md file with your changes.
    • [x] My PR is ready to review.

    Resolves: #90 Resolves: #89

    Description of the changes being introduced by the pull request: Still TODO:

    • [x] Fix project template style guide
    • [x] Refactor some of the project template configuration * remove --skip-vagrantfile * remove --skip-redis (?) * remove --skip-helm (?)
    • [x] Update docs, readme
    • [ ] Add --skip-docs option (?)
    • [x] Add GH pages docs deployment if GH actions enabled
    • [ ] Move generated HOW TO in project readme to generated Sphinx docs
    enhancement copier: project refactor 
    opened by rszamszur 3
  • Initial implementation of generators feature

    Initial implementation of generators feature

    Checklist:

    • [x] Added tests for changed code where applicable.
    • [ ] Documentation reflects the changes where applicable.
    • [x] Updated the CHANGELOG.md file with your changes.
    • [x] My PR is ready to review.

    Resolves: #69 Resolves: #68 Resolves: #47 Resolves: #71 Resolves: #72 Resolves: #73

    Description of the changes being introduced by the pull request:

    TODO:

    • [x] Implement base abstract class for all generators to inherit
    • [x] Solve the problem of dynamically creating click sub-commands at runtime - add initial implementation.
    • [x] Implement method for programmatically loading user generated generators from path at runtime
    • [x] Solve the problem of dynamically creating click sub-commands arguments and options at runtime based on chosen generators - add initial implementation
    • [x] Implement controller generator with template
    • [x] Implement generator generator with template
    • [x] Refactor invoker with using deque
    • [x] Refactor fastapi_mvc.commands to be more generic
    • [x] Implement global except hook, refactor current project exceptions
    • [x] Add and modify unit test cases
    • [x] Add docstrings
    • [x] Fix styleguide
    • [ ] Add integration tests for builtins generators -> will be done via #76
    • [x] Add integration tests for programmatically loading user generators

    This will be a looooong merge :rocket:

    enhancement refactor 
    opened by rszamszur 3
  • Fix `fastapi-mvc run` implementation

    Fix `fastapi-mvc run` implementation

    Checklist:

    • [ ] Added tests for changed code where applicable.
    • [ ] Documentation reflects the changes where applicable.
    • [ ] Updated the CHANGELOG.md file with your changes.
    • [ ] My PR is ready to review.

    **Resolves: #48 **

    Description of the changes being introduced by the pull request: Draft solution, TODO:

    • [ ] Update docs
    • [ ] Manually test current command implementation with different scenarios
    • [ ] Extend current unit test cases?
    • [ ] Update documentation
    bug 
    opened by rszamszur 3
  • ModuleNotFoundError: No module named 'test-app'

    ModuleNotFoundError: No module named 'test-app'

    • [X ] I have searched the issues of this repo and believe that this is not a duplicate.

    Describe the bug

    I receive the error ModuleNotFoundError: No module named 'test-app' after fresh install of fastapi-mvc

    Expected behavior

    :) to work

    To Reproduce

    Install fastapi-mvc on a mac machine with MacOS High Sierra 10.13.6 and follow the steps from documentation: pip install fastapi-mvc fastapi-mvc new /test-app cd /test-app fastapi-mvc run

    Environment

    • Python version: 3.9.7
    • Operating System and version: MacOS High Sierra 10.13.6
    • fastapi-mvc version: https://github.com/rszamszur/fastapi-mvc/releases/tag/0.8.0

    Additional context

    bug 
    opened by faierbol 3
  • Fix #39

    Fix #39

    Checklist:

    • [x] Added tests for changed code where applicable.
    • [ ] Documentation reflects the changes where applicable.
    • [x] Updated the CHANGELOG.md file with your changes.
    • [x] My PR is ready to review.

    Resolves: #39

    Description of the changes being introduced by the pull request:

    bug 
    opened by rszamszur 3
  • Migrate to Poetry 1.2.x release

    Migrate to Poetry 1.2.x release

    The get-poetry.py script will be replaced in Poetry 1.2 by install-poetry.py.

    Moreover, some additional adjustments will be needed in order to accommodate to new minor version:

    • [x] Change default $POETRY_HOME to $HOME/.local/share/pypoetry in all relevant files (make scripts, Dockerfiles, nix shell expressions).
    • [x] Change absolute path to poetry executable to: $POETRY_HOME/venv/bin/poetry
    • [x] Update install scripts with install-poetry.py URL.
    • [ ] Update Poetry config in GitHub workflows

    The above applies to both package (fastapi-mvc) and template.

    enhancement 
    opened by rszamszur 3
  • Handle generator aliases conflicts

    Handle generator aliases conflicts

    • [x] I have searched the issues of this repo and believe that this is not a duplicate.

    Feature Request

    Resolve how to handle generator aliases conflicts. Currently, there is no mechanism for such a scenario. https://github.com/fastapi-mvc/fastapi-mvc/blob/46c6dc5c873edeb12724e599246de864d3f2f68a/fastapi_mvc/core.py#L427-L428

    enhancement 
    opened by rszamszur 0
  • Dockerfile is missing `git` runtime dependency

    Dockerfile is missing `git` runtime dependency

    • [x] I have searched the issues of this repo and believe that this is not a duplicate.

    Describe the bug

    Dockerfile is missing git runtime dependency. Without it fastapi-mvc will not work.

    Expected behavior

    Does not apply

    To Reproduce

    Does not apply

    Environment

    • Python version:
    • Operating System and version:
    • fastapi-mvc version:

    Additional context

    bug dockerfile 
    opened by rszamszur 0
  • Implement type checking in copier-project template

    Implement type checking in copier-project template

    • [ ] I have searched the issues of this repo and believe that this is not a duplicate.

    Feature Request

    Implement type checking, and add some checks in the CI action as well.

    enhancement copier: project 
    opened by rszamszur 0
  • Implement type checking

    Implement type checking

    • [x] I have searched the issues of this repo and believe that this is not a duplicate.

    Feature Request

    Implement type checking for fastapi-mvc Probably add some checks in the CI action as well.

    enhancement 
    opened by rszamszur 0
  • [Databases support] Implement Session class responsible for managing SQLAlchemy session

    [Databases support] Implement Session class responsible for managing SQLAlchemy session

    • [x] I have searched the issues of this repo and believe that this is not a duplicate.

    Feature Request

    This class will be responsible for managing SQLAlchemy engine connection and session.

    To figure out/clarify:

    • What SQLAlchemy engine and session/sessionmaker parameters should be configurable for the user via pydantic BaseSettings configuration class.
    • How long keep an open session? Perpetual per worker? Or per request with a context manager?
    • Only implement async session or sync as well?
    • How to pass session to FastAPI controllers? Via FastAPI Depends()? Or just do plain import and access class variable for sessionmaker object instance?
    • How to handle different database engine hacks (for instance sqlite needs connect_args={"check_same_thread": False}). Might be useful: https://github.com/pallets-eco/flask-sqlalchemy/blob/e5bf821072de0d55ff92891432004322864a7265/src/flask_sqlalchemy/init.py#L888
    • ?
    enhancement copier: project 
    opened by rszamszur 0
  • Version management workflow

    Version management workflow

    • [x] I have searched the issues of this repo and believe that this is not a duplicate.

    Issue

    Hi, thanks for this wonderful tool, it's a very nice starting point for my projects.

    I just wonder how the release process could be. I mean, with poetry version I can bump the version defined in pyproject.toml -> [tool.poetry] -> version, but I wonder how to update the TAG file as well, automatically. And also, how to refresh CHANGELOG.md accordingly with (semantic) commit messages?

    Any recommended workflow?

    UPDATE: btw, I also see we have a version.py to keep up-to-date.

    question 
    opened by paolodina 6
Releases(0.24.0)
Owner
Radosław Szamszur
Way of the Peaceful Warrior|武士道 Whoever is reading this, I wish you a beautiful day!
Radosław Szamszur
EML analyzer is an application to analyze the EML file

EML analyzer EML analyzer is an application to analyze the EML file which can: Analyze headers. Analyze bodies. Extract IOCs (URLs, domains, IP addres

Manabu Niseki 162 Dec 28, 2022
Python supercharged for the fastai library

Welcome to fastcore Python goodies to make your coding faster, easier, and more maintainable Python is a powerful, dynamic language. Rather than bake

fast.ai 810 Jan 06, 2023
TODO aplication made with Python's FastAPI framework and Hexagonal Architecture

FastAPI Todolist Description Todolist aplication made with Python's FastAPI framework and Hexagonal Architecture. This is a test repository for the pu

Giovanni Armane 91 Dec 31, 2022
REST API with FastAPI and SQLite3.

REST API with FastAPI and SQLite3

Luis Quiñones Requelme 2 Mar 14, 2022
Web Version of avatarify to democratize even further

Web-avatarify for image animations This is the code base for this website and its backend. This aims to bring technology closer to everyone, just by a

Carlos Andrés Álvarez Restrepo 66 Nov 09, 2022
A simple docker-compose app for orchestrating a fastapi application, a celery queue with rabbitmq(broker) and redis(backend)

fastapi - celery - rabbitmq - redis - Docker A simple docker-compose app for orchestrating a fastapi application, a celery queue with rabbitmq(broker

Kartheekasasanka Kaipa 83 Dec 19, 2022
FastAPI on Google Cloud Run

cloudrun-fastapi Boilerplate for running FastAPI on Google Cloud Run with Google Cloud Build for deployment. For all documentation visit the docs fold

Anthony Corletti 139 Dec 27, 2022
Analytics service that is part of iter8. Robust analytics and control to unleash cloud-native continuous experimentation.

iter8-analytics iter8 enables statistically robust continuous experimentation of microservices in your CI/CD pipelines. For in-depth information about

16 Oct 14, 2021
🤪 FastAPI + Vue构建的Mall项目后台管理

Mall项目后台管理 前段时间学习Vue写了一个移动端项目 https://www.charmcode.cn/app/mall/home 然后教程到此就结束了, 我就总感觉少点什么,计划自己着手写一套后台管理。 相关项目 移动端Mall项目源码(Vue构建): https://github.com/

王小右 131 Jan 01, 2023
Auth for use with FastAPI

FastAPI Auth Pluggable auth for use with FastAPI Supports OAuth2 Password Flow Uses JWT access and refresh tokens 100% mypy and test coverage Supports

David Montague 95 Jan 02, 2023
FastAPI构建的API服务

使用FastAPI 构建的商城项目API 学习FastAPI 构建项目目录 构建项目接口: 对应博客:https://www.charmcode.cn/article/2020-06-08_vue_mall_api 声明 此项目已经不再维护, 可以参考我另外一个项目https://github.co

王小右 64 Oct 04, 2022
Install multiple versions of r2 and its plugins via Pip on any system!

r2env This repository contains the tool available via pip to install and manage multiple versions of radare2 and its plugins. r2-tools doesn't conflic

radare org 18 Oct 11, 2022
Reusable utilities for FastAPI

Reusable utilities for FastAPI Documentation: https://fastapi-utils.davidmontague.xyz Source Code: https://github.com/dmontagu/fastapi-utils FastAPI i

David Montague 1.3k Jan 04, 2023
Backend Skeleton using FastAPI and Sqlalchemy ORM

Backend API Skeleton Based on @tiangolo's full stack postgres template, with some things added, some things removed, and some things changed. This is

David Montague 18 Oct 31, 2022
Adds integration of the Jinja template language to FastAPI.

fastapi-jinja Adds integration of the Jinja template language to FastAPI. This is inspired and based off fastapi-chamelon by Mike Kennedy. Check that

Marc Brooks 58 Nov 29, 2022
ReST based network device broker

The Open API Platform for Network Devices netpalm makes it easy to push and pull state from your apps to your network by providing multiple southbound

368 Dec 31, 2022
This project is a realworld backend based on fastapi+mongodb

This project is a realworld backend based on fastapi+mongodb. It can be used as a sample backend or a sample fastapi project with mongodb.

邱承 381 Dec 29, 2022
An image validator using FastAPI.

fast_api_image_validator An image validator using FastAPI.

Kevin Zehnder 7 Jan 06, 2022
Mnist API server w/ FastAPI

Mnist API server w/ FastAPI

Jinwoo Park (Curt) 8 Feb 08, 2022
官方文档已经有翻译的人在做了,

FastAPI 框架,高性能,易学,快速编码,随时可供生产 文档:https://fastapi.tiangolo.com 源码:https://github.com/tiangolo/fastapi FastAPI 是一个现代、快速(高性能)的 Web 框架,基于标准 Python 类型提示,使用

ApacheCN 27 Nov 11, 2022