mirror of
https://github.com/ets-labs/python-dependency-injector.git
synced 2024-11-27 20:13:59 +03:00
fe01ad41d9
* Update application-single-container example * Update application-multiple-containers example * Update decoupled-packages example * Update movie lister example * Update CLI tutorial * Update sanic example * Update sanic example with wiring_config * Update fastapi example * Update fastapi-simple example * Update fastapi-sqlalchemy example * Update flask-blueprints example * Update flask example and tutorial * Update aiohttp example and tutorial * Update asyncio-daemon example and tutorial
97 lines
3.5 KiB
ReStructuredText
97 lines
3.5 KiB
ReStructuredText
FastAPI + SQLAlchemy + Dependency Injector Example
|
|
==================================================
|
|
|
|
This is a `FastAPI <https://fastapi.tiangolo.com/>`_ +
|
|
`SQLAlchemy <https://www.sqlalchemy.org/>`_ +
|
|
`Dependency Injector <https://python-dependency-injector.ets-labs.org/>`_ example application.
|
|
|
|
Thanks to `@ShvetsovYura <https://github.com/ShvetsovYura>`_ for providing initial example:
|
|
`FastAPI_DI_SqlAlchemy <https://github.com/ShvetsovYura/FastAPI_DI_SqlAlchemy>`_.
|
|
|
|
Run
|
|
---
|
|
|
|
Build the Docker image:
|
|
|
|
.. code-block:: bash
|
|
|
|
docker-compose build
|
|
|
|
Run the docker-compose environment:
|
|
|
|
.. code-block:: bash
|
|
|
|
docker-compose up
|
|
|
|
The output should be something like:
|
|
|
|
.. code-block::
|
|
|
|
Starting fastapi-sqlalchemy_webapp_1 ... done
|
|
Attaching to fastapi-sqlalchemy_webapp_1
|
|
webapp_1 | 2021-02-04 22:07:19,804 INFO sqlalchemy.engine.base.Engine SELECT CAST('test plain returns' AS VARCHAR(60)) AS anon_1
|
|
webapp_1 | 2021-02-04 22:07:19,804 INFO sqlalchemy.engine.base.Engine ()
|
|
webapp_1 | 2021-02-04 22:07:19,804 INFO sqlalchemy.engine.base.Engine SELECT CAST('test unicode returns' AS VARCHAR(60)) AS anon_1
|
|
webapp_1 | 2021-02-04 22:07:19,804 INFO sqlalchemy.engine.base.Engine ()
|
|
webapp_1 | 2021-02-04 22:07:19,805 INFO sqlalchemy.engine.base.Engine PRAGMA main.table_info("users")
|
|
webapp_1 | 2021-02-04 22:07:19,805 INFO sqlalchemy.engine.base.Engine ()
|
|
webapp_1 | 2021-02-04 22:07:19,808 INFO sqlalchemy.engine.base.Engine PRAGMA temp.table_info("users")
|
|
webapp_1 | 2021-02-04 22:07:19,808 INFO sqlalchemy.engine.base.Engine ()
|
|
webapp_1 | 2021-02-04 22:07:19,809 INFO sqlalchemy.engine.base.Engine
|
|
webapp_1 | CREATE TABLE users (
|
|
webapp_1 | id INTEGER NOT NULL,
|
|
webapp_1 | email VARCHAR,
|
|
webapp_1 | hashed_password VARCHAR,
|
|
webapp_1 | is_active BOOLEAN,
|
|
webapp_1 | PRIMARY KEY (id),
|
|
webapp_1 | UNIQUE (email),
|
|
webapp_1 | CHECK (is_active IN (0, 1))
|
|
webapp_1 | )
|
|
webapp_1 |
|
|
webapp_1 |
|
|
webapp_1 | 2021-02-04 22:07:19,810 INFO sqlalchemy.engine.base.Engine ()
|
|
webapp_1 | 2021-02-04 22:07:19,821 INFO sqlalchemy.engine.base.Engine COMMIT
|
|
webapp_1 | INFO: Started server process [8]
|
|
webapp_1 | INFO: Waiting for application startup.
|
|
webapp_1 | INFO: Application startup complete.
|
|
webapp_1 | INFO: Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit)
|
|
|
|
After that visit http://127.0.0.1:8000/docs in your browser.
|
|
|
|
Test
|
|
----
|
|
|
|
This application comes with the unit tests.
|
|
|
|
To run the tests do:
|
|
|
|
.. code-block:: bash
|
|
|
|
docker-compose run --rm webapp py.test webapp/tests.py --cov=webapp
|
|
|
|
The output should be something like:
|
|
|
|
.. code-block::
|
|
|
|
platform linux -- Python 3.10.0, pytest-6.2.5, py-1.10.0, pluggy-1.0.0
|
|
rootdir: /code
|
|
plugins: cov-3.0.0
|
|
collected 7 items
|
|
|
|
webapp/tests.py ....... [100%]
|
|
|
|
---------- coverage: platform linux, python 3.10.0-final-0 ----------
|
|
Name Stmts Miss Cover
|
|
--------------------------------------------
|
|
webapp/__init__.py 0 0 100%
|
|
webapp/application.py 12 0 100%
|
|
webapp/containers.py 10 0 100%
|
|
webapp/database.py 24 8 67%
|
|
webapp/endpoints.py 32 0 100%
|
|
webapp/models.py 10 1 90%
|
|
webapp/repositories.py 36 20 44%
|
|
webapp/services.py 16 0 100%
|
|
webapp/tests.py 59 0 100%
|
|
--------------------------------------------
|
|
TOTAL 199 29 85%
|