mirror of
				https://github.com/ets-labs/python-dependency-injector.git
				synced 2025-10-31 16:07:51 +03:00 
			
		
		
		
	* Add application * Dockerize the app * Fix 204 content-leength error * Rename database file * Add tests * Add README * Fix a typo in FastAPI example * Add docs on FastAPI + SQLAlchemy example * Update changelog * Add link to the example to README and other docs pages * Add EOF to the config.yml
		
			
				
	
	
		
			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.9.1, pytest-6.2.2, py-1.10.0, pluggy-0.13.1
 | |
|    rootdir: /code
 | |
|    plugins: cov-2.11.1
 | |
|    collected 7 items
 | |
| 
 | |
|    webapp/tests.py .......                                         [100%]
 | |
| 
 | |
|    ----------- coverage: platform linux, python 3.9.1-final-0 -----------
 | |
|    Name                     Stmts   Miss  Cover
 | |
|    --------------------------------------------
 | |
|    webapp/__init__.py           0      0   100%
 | |
|    webapp/application.py       14      0   100%
 | |
|    webapp/containers.py         9      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                      200     29    86%
 |