sync
This commit is contained in:
8
flask_demo_api/config.py
Normal file
8
flask_demo_api/config.py
Normal file
@@ -0,0 +1,8 @@
|
||||
from dataclasses import dataclass
|
||||
|
||||
from repository.config import RedisSettings
|
||||
|
||||
|
||||
@dataclass(frozen=True)
|
||||
class Settings:
|
||||
redis: RedisSettings
|
47
flask_demo_api/ioc.py
Normal file
47
flask_demo_api/ioc.py
Normal file
@@ -0,0 +1,47 @@
|
||||
import redis # type: ignore
|
||||
from config import Settings
|
||||
from dishka import Container, Provider, Scope, make_container, provide
|
||||
from protocols.repository import Repository
|
||||
from repository.config import RedisSettings
|
||||
from repository.redis import RedisRepository
|
||||
from usecase.get import GetKey
|
||||
|
||||
|
||||
class RedisSettingsProvider(Provider):
|
||||
@provide(scope=Scope.APP)
|
||||
def redis_settings(self) -> RedisSettings:
|
||||
return RedisSettings()
|
||||
|
||||
|
||||
class SettingsProvider(Provider):
|
||||
@provide(scope=Scope.APP)
|
||||
def main_settings(self, redis_settings: RedisSettings) -> Settings:
|
||||
return Settings(redis=redis_settings)
|
||||
|
||||
|
||||
class RedisPoolProvider(Provider):
|
||||
@provide(scope=Scope.APP)
|
||||
def get_redis_pool(self, redis_settings: RedisSettings) -> redis.Redis:
|
||||
return redis.from_url(redis_settings.url, decode_responses=False)
|
||||
|
||||
|
||||
class RepositoryProvider(Provider):
|
||||
@provide(scope=Scope.REQUEST)
|
||||
def get_db(self, redis_pool: redis.Redis) -> Repository:
|
||||
return RedisRepository(redis_pool=redis_pool)
|
||||
|
||||
|
||||
class UseCasesProvider(Provider):
|
||||
scope = Scope.REQUEST
|
||||
|
||||
get = provide(GetKey)
|
||||
|
||||
|
||||
def create_container() -> Container:
|
||||
return make_container(
|
||||
RedisSettingsProvider(),
|
||||
SettingsProvider(),
|
||||
RedisPoolProvider(),
|
||||
RepositoryProvider(),
|
||||
UseCasesProvider(),
|
||||
)
|
@@ -1,4 +1,6 @@
|
||||
from dishka.integrations.flask import setup_dishka
|
||||
from flask import Flask
|
||||
from ioc import create_container
|
||||
from routers.key import key_bp
|
||||
|
||||
|
||||
@@ -10,4 +12,9 @@ def app_factory() -> Flask:
|
||||
|
||||
if __name__ == "__main__":
|
||||
app = app_factory()
|
||||
app.run(debug=True)
|
||||
container = create_container()
|
||||
setup_dishka(container=container, app=app, auto_inject=True)
|
||||
try:
|
||||
app.run(debug=True, host="0.0.0.0")
|
||||
finally:
|
||||
container.close()
|
||||
|
@@ -1,7 +1,7 @@
|
||||
from abc import abstractmethod
|
||||
from typing import Protocol
|
||||
|
||||
from flask_demo_api.protocols.models import KeyDTO
|
||||
from protocols.models import KeyDTO
|
||||
|
||||
|
||||
class Repository(Protocol):
|
||||
|
6
flask_demo_api/repository/config.py
Normal file
6
flask_demo_api/repository/config.py
Normal file
@@ -0,0 +1,6 @@
|
||||
from dataclasses import dataclass
|
||||
|
||||
|
||||
@dataclass(frozen=True)
|
||||
class RedisSettings:
|
||||
url: str = "redis://redis:6379/0"
|
@@ -1,7 +1,6 @@
|
||||
import redis
|
||||
|
||||
from flask_demo_api.protocols.models import KeyDTO
|
||||
from flask_demo_api.protocols.repository import Repository
|
||||
import redis # type: ignore
|
||||
from protocols.models import KeyDTO
|
||||
from protocols.repository import Repository
|
||||
|
||||
|
||||
class RedisRepository(Repository):
|
||||
|
@@ -1,5 +1,5 @@
|
||||
from flask_demo_api.protocols.models import KeyDTO
|
||||
from flask_demo_api.protocols.repository import Repository
|
||||
from protocols.models import KeyDTO
|
||||
from protocols.repository import Repository
|
||||
|
||||
|
||||
class GetKey:
|
||||
|
Reference in New Issue
Block a user