add redis
This commit is contained in:
parent
05c6f2b8da
commit
9020f8880b
|
@ -2,7 +2,15 @@ OAA_CFG__RUN__HOST=0.0.0.0
|
||||||
OAA_CFG__RUN__PORT=8000
|
OAA_CFG__RUN__PORT=8000
|
||||||
OAA_CFG__RUN__RELOAD=True
|
OAA_CFG__RUN__RELOAD=True
|
||||||
OAA_CFG__LOG__LEVEL=20
|
OAA_CFG__LOG__LEVEL=20
|
||||||
|
|
||||||
OAA_CFG__TOKEN__ADMIN=pE0ULNppBtQOOxRuVw1tdiXTG5dZTaSx
|
OAA_CFG__TOKEN__ADMIN=pE0ULNppBtQOOxRuVw1tdiXTG5dZTaSx
|
||||||
OAA_CFG__TOKEN__USER=A3mojtenQqYwJAgrSiiFaVHX6fRoVW15
|
OAA_CFG__TOKEN__USER=A3mojtenQqYwJAgrSiiFaVHX6fRoVW15
|
||||||
|
|
||||||
OAA_CFG__ADMIN_USER__LOGIN=admin
|
OAA_CFG__ADMIN_USER__LOGIN=admin
|
||||||
OAA_CFG__ADMIN_USER__PWD=P@ssw0rd!
|
OAA_CFG__ADMIN_USER__PWD=P@ssw0rd!
|
||||||
|
|
||||||
|
OAA_CFG__REDDIS__HOST=localhost
|
||||||
|
OAA_CFG__REDDIS__PORT=6379
|
||||||
|
OAA_CFG__REDDIS__DB=0
|
||||||
|
OAA_CFG__REDDIS__LOGIN=admin
|
||||||
|
OAA_CFG__REDDIS__PWD=P@ssw0rd!
|
|
@ -28,13 +28,13 @@ class LogConfig(BaseModel):
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
class Prefix(BaseModel):
|
class PrefixConfig(BaseModel):
|
||||||
swagger: str = "/docs"
|
swagger: str = "/docs"
|
||||||
api_v1: str = "/api/v1"
|
api_v1: str = "/api/v1"
|
||||||
tg_v1: str = api_v1 + "/tg"
|
tg_v1: str = api_v1 + "/tg"
|
||||||
|
|
||||||
|
|
||||||
class Token(BaseModel):
|
class TokenConfig(BaseModel):
|
||||||
admin: str
|
admin: str
|
||||||
user: str
|
user: str
|
||||||
|
|
||||||
|
@ -44,6 +44,14 @@ class AdminUser(BaseModel):
|
||||||
pwd: str
|
pwd: str
|
||||||
|
|
||||||
|
|
||||||
|
class ReddisConfig(BaseModel):
|
||||||
|
host: str = "localhost"
|
||||||
|
port: int = 6379
|
||||||
|
db: int = 0
|
||||||
|
login: str
|
||||||
|
pwd: str
|
||||||
|
|
||||||
|
|
||||||
class SwaggerConfig(BaseModel):
|
class SwaggerConfig(BaseModel):
|
||||||
openapi_url: str = "/openapi.json"
|
openapi_url: str = "/openapi.json"
|
||||||
title: str = "API"
|
title: str = "API"
|
||||||
|
@ -66,9 +74,10 @@ class Settings(BaseSettings):
|
||||||
run: RunConfig = RunConfig()
|
run: RunConfig = RunConfig()
|
||||||
swagger: SwaggerConfig = SwaggerConfig()
|
swagger: SwaggerConfig = SwaggerConfig()
|
||||||
log: LogConfig = LogConfig()
|
log: LogConfig = LogConfig()
|
||||||
prefix: Prefix = Prefix()
|
prefix: PrefixConfig = PrefixConfig()
|
||||||
token: Token
|
token: TokenConfig
|
||||||
admin_user: AdminUser
|
admin_user: AdminUser
|
||||||
|
reddis: ReddisConfig
|
||||||
|
|
||||||
|
|
||||||
conf = Settings()
|
conf = Settings()
|
||||||
|
|
10
main.py
10
main.py
|
@ -5,12 +5,22 @@ from fastapi import FastAPI
|
||||||
from fastapi.responses import ORJSONResponse
|
from fastapi.responses import ORJSONResponse
|
||||||
from starlette.staticfiles import StaticFiles
|
from starlette.staticfiles import StaticFiles
|
||||||
from routers import router
|
from routers import router
|
||||||
|
from contextlib import asynccontextmanager
|
||||||
|
|
||||||
|
|
||||||
|
@asynccontextmanager
|
||||||
|
async def lifespan(app: FastAPI):
|
||||||
|
yield
|
||||||
|
await db_helper.dispose()
|
||||||
|
|
||||||
|
|
||||||
main_app = FastAPI(
|
main_app = FastAPI(
|
||||||
default_response_class=ORJSONResponse,
|
default_response_class=ORJSONResponse,
|
||||||
docs_url=None,
|
docs_url=None,
|
||||||
|
lifespan=lifespan,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
main_app.include_router(router)
|
main_app.include_router(router)
|
||||||
|
|
||||||
main_app.mount("/static", StaticFiles(directory=STATIC_DIR), name="static")
|
main_app.mount("/static", StaticFiles(directory=STATIC_DIR), name="static")
|
||||||
|
|
|
@ -528,6 +528,21 @@ files = [
|
||||||
{file = "pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e"},
|
{file = "pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e"},
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "redis"
|
||||||
|
version = "5.1.1"
|
||||||
|
description = "Python client for Redis database and key-value store"
|
||||||
|
optional = false
|
||||||
|
python-versions = ">=3.8"
|
||||||
|
files = [
|
||||||
|
{file = "redis-5.1.1-py3-none-any.whl", hash = "sha256:f8ea06b7482a668c6475ae202ed8d9bcaa409f6e87fb77ed1043d912afd62e24"},
|
||||||
|
{file = "redis-5.1.1.tar.gz", hash = "sha256:f6c997521fedbae53387307c5d0bf784d9acc28d9f1d058abeac566ec4dbed72"},
|
||||||
|
]
|
||||||
|
|
||||||
|
[package.extras]
|
||||||
|
hiredis = ["hiredis (>=3.0.0)"]
|
||||||
|
ocsp = ["cryptography (>=36.0.1)", "pyopenssl (==23.2.1)", "requests (>=2.31.0)"]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "sniffio"
|
name = "sniffio"
|
||||||
version = "1.3.1"
|
version = "1.3.1"
|
||||||
|
@ -829,4 +844,4 @@ files = [
|
||||||
[metadata]
|
[metadata]
|
||||||
lock-version = "2.0"
|
lock-version = "2.0"
|
||||||
python-versions = "^3.12"
|
python-versions = "^3.12"
|
||||||
content-hash = "03bfacdc4e1c32b9de32fc239cf6219e6c07d189a07fe6d29f8d050fc7166f53"
|
content-hash = "94c62ee12b20f7b2cdc03c8d1e8e8e31478a5dc9eb541ada0119fbb8a4b62222"
|
||||||
|
|
|
@ -12,6 +12,7 @@ pydantic-settings = "^2.5.2"
|
||||||
fastapi = "^0.115.0"
|
fastapi = "^0.115.0"
|
||||||
uvicorn = {extras = ["standard"], version = "^0.31.0"}
|
uvicorn = {extras = ["standard"], version = "^0.31.0"}
|
||||||
orjson = "^3.10.7"
|
orjson = "^3.10.7"
|
||||||
|
redis = "^5.1.1"
|
||||||
|
|
||||||
|
|
||||||
[tool.poetry.group.dev.dependencies]
|
[tool.poetry.group.dev.dependencies]
|
||||||
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
from .crud import get_value, set_value
|
||||||
|
|
||||||
|
__all__ = [
|
||||||
|
"get_value",
|
||||||
|
"set_value",
|
||||||
|
]
|
|
@ -0,0 +1,16 @@
|
||||||
|
import logging as log
|
||||||
|
|
||||||
|
from r_helper import RedisClient
|
||||||
|
|
||||||
|
|
||||||
|
async def set_value(key, value):
|
||||||
|
async with RedisClient() as redis_client:
|
||||||
|
await redis_client.set_value(key, value)
|
||||||
|
log.info("Set %s = %s", key, value)
|
||||||
|
|
||||||
|
|
||||||
|
async def get_value(key):
|
||||||
|
async with RedisClient() as redis_client:
|
||||||
|
value = await redis_client.get_value(key)
|
||||||
|
log.info("Get %s = %s", key, value)
|
||||||
|
return value
|
|
@ -0,0 +1,25 @@
|
||||||
|
from redis.asyncio import Redis
|
||||||
|
from config import conf
|
||||||
|
|
||||||
|
|
||||||
|
class RedisClient:
|
||||||
|
async def __aenter__(self):
|
||||||
|
self.client = Redis(
|
||||||
|
host=conf.reddis.host,
|
||||||
|
port=conf.reddis.port,
|
||||||
|
db=conf.reddis.db,
|
||||||
|
username=conf.reddis.login,
|
||||||
|
password=conf.reddis.pwd,
|
||||||
|
)
|
||||||
|
return self.client
|
||||||
|
|
||||||
|
async def __aexit__(self, exc_type, exc_val, exc_tb):
|
||||||
|
await self.client.close()
|
||||||
|
|
||||||
|
async def set_value(self, key, value):
|
||||||
|
async with self as client:
|
||||||
|
await client.set(key, value)
|
||||||
|
|
||||||
|
async def get_value(self, key):
|
||||||
|
async with self as client:
|
||||||
|
return await client.get(key)
|
|
@ -43,6 +43,7 @@ pyproject_hooks==1.2.0
|
||||||
python-dotenv==1.0.1
|
python-dotenv==1.0.1
|
||||||
PyYAML==6.0.2
|
PyYAML==6.0.2
|
||||||
RapidFuzz==3.10.0
|
RapidFuzz==3.10.0
|
||||||
|
redis==5.1.1
|
||||||
requests==2.32.3
|
requests==2.32.3
|
||||||
requests-toolbelt==1.0.0
|
requests-toolbelt==1.0.0
|
||||||
SecretStorage==3.3.3
|
SecretStorage==3.3.3
|
||||||
|
|
|
@ -11,7 +11,6 @@ router = APIRouter()
|
||||||
router.include_router(
|
router.include_router(
|
||||||
swagger_router,
|
swagger_router,
|
||||||
prefix=conf.prefix.swagger,
|
prefix=conf.prefix.swagger,
|
||||||
tags=["Swagger"],
|
|
||||||
)
|
)
|
||||||
router.include_router(
|
router.include_router(
|
||||||
tg_send_router,
|
tg_send_router,
|
||||||
|
|
Loading…
Reference in New Issue