Skip to content

Commit

Permalink
♻️ Move redis lifetime handling to redis_handler.py
Browse files Browse the repository at this point in the history
  • Loading branch information
AA-Turner committed Aug 5, 2020
1 parent 5307f3d commit 2a669dc
Show file tree
Hide file tree
Showing 3 changed files with 31 additions and 20 deletions.
17 changes: 3 additions & 14 deletions src/api/app.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

from src.api.routes import members
from src.api.routes import authentication
from src.api.plugins import redis
from src.api.utility import redis_handler

app = FastAPI()

Expand All @@ -13,7 +13,7 @@
members.router,
prefix="/members",
tags=["Members"],
dependencies=[],
dependencies=[], # can't currently put auth here as we want the logon object directly...
responses={404: {"description": "Not found!"}}
)
version_one.include_router(
Expand All @@ -28,21 +28,10 @@
)


class RedisConfig(redis.RedisSettings):
pass


redis_plugin = redis.RedisPlugin(app, config=RedisConfig())


@app.on_event('startup')
async def on_startup() -> None:
await redis_plugin.init()

await redis_handler.on_startup(app)

@app.on_event('shutdown')
async def on_shutdown() -> None:
await redis_plugin.terminate()

# Appointments report - role details (except M01Ex, M04), ongoing details (except M01Ex imputing), disclosures
# Member Directory - emergency contact details
Expand Down
16 changes: 10 additions & 6 deletions src/api/plugins/redis.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,20 +36,24 @@ class Config:
class RedisPlugin:
def __init__(self, app: FastAPI = None, config: BaseSettings = None):
self.redis: Optional[Redis] = None
if app:
self.config = config or RedisSettings()
self.config = config or RedisSettings()

if self.config is None:
raise RedisError("Redis configuration is not initialized")
elif not isinstance(self.config, RedisSettings):
raise RedisError("Redis configuration is invalid")

if self.config is None:
raise RedisError("Redis configuration is not initialized")
elif not isinstance(self.config, RedisSettings):
raise RedisError("Redis configuration is invalid")
if app:
app.state.REDIS = self

async def __call__(self) -> Any:
if self.redis is None:
raise RedisError("Redis is not initialized")
return self.redis

async def setup(self, app: FastAPI):
app.state.REDIS = self

async def init(self):
if self.redis is not None:
return self.redis
Expand Down
18 changes: 18 additions & 0 deletions src/api/utility/redis_handler.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
from src.api.plugins import redis


class RedisConfig(redis.RedisSettings):
pass


redis_plugin = redis.RedisPlugin(config=RedisConfig())


async def on_startup(app) -> None:
await redis_plugin.setup(app)
await redis_plugin.init()


async def on_shutdown() -> None:
await redis_plugin.terminate()
print("Redis connection terminated")

0 comments on commit 2a669dc

Please sign in to comment.