mirror of
https://github.com/fastapi-admin/fastapi-admin.git
synced 2026-03-13 10:32:25 +08:00
feat: remove aioredis to redis
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
import os
|
||||
|
||||
import aioredis
|
||||
import redis.asyncio as redis
|
||||
import uvicorn
|
||||
from fastapi import FastAPI
|
||||
from starlette.middleware.cors import CORSMiddleware
|
||||
@@ -46,7 +46,7 @@ def create_app():
|
||||
|
||||
@app.on_event("startup")
|
||||
async def startup():
|
||||
redis = aioredis.from_url(
|
||||
r = redis.from_url(
|
||||
settings.REDIS_URL,
|
||||
decode_responses=True,
|
||||
encoding="utf8",
|
||||
@@ -61,7 +61,7 @@ def create_app():
|
||||
admin_model=Admin,
|
||||
)
|
||||
],
|
||||
redis=redis,
|
||||
redis=r,
|
||||
)
|
||||
|
||||
app.mount("/admin", admin_app)
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
from typing import Dict, List, Optional, Type
|
||||
|
||||
from aioredis import Redis
|
||||
import redis.asyncio as redis
|
||||
from fastapi import FastAPI
|
||||
from pydantic import HttpUrl
|
||||
from starlette.middleware.base import BaseHTTPMiddleware
|
||||
@@ -22,13 +22,13 @@ class FastAPIAdmin(FastAPI):
|
||||
admin_path: str
|
||||
resources: List[Type[Resource]] = []
|
||||
model_resources: Dict[Type[Model], Type[Resource]] = {}
|
||||
redis: Redis
|
||||
redis: redis.Redis
|
||||
language_switch: bool = True
|
||||
favicon_url: Optional[HttpUrl] = None
|
||||
|
||||
async def configure(
|
||||
self,
|
||||
redis: Redis,
|
||||
redis: redis.Redis,
|
||||
logo_url: str = None,
|
||||
default_locale: str = "en_US",
|
||||
language_switch: bool = True,
|
||||
|
||||
@@ -12,7 +12,7 @@ class FileUpload:
|
||||
self,
|
||||
uploads_dir: str,
|
||||
allow_extensions: Optional[List[str]] = None,
|
||||
max_size: int = 1024 ** 3,
|
||||
max_size: int = 1024**3,
|
||||
filename_generator: Optional[Callable] = None,
|
||||
prefix: str = "/static/uploads",
|
||||
):
|
||||
|
||||
@@ -2,7 +2,7 @@ import typing
|
||||
import uuid
|
||||
from typing import Type
|
||||
|
||||
from aioredis import Redis
|
||||
import redis.asyncio as redis
|
||||
from fastapi import Depends, Form
|
||||
from starlette.middleware.base import BaseHTTPMiddleware, RequestResponseEndpoint
|
||||
from starlette.requests import Request
|
||||
@@ -77,7 +77,7 @@ class UsernamePasswordProvider(Provider):
|
||||
else:
|
||||
instance.password = hash_password(instance.password)
|
||||
|
||||
async def login(self, request: Request, redis: Redis = Depends(get_redis)):
|
||||
async def login(self, request: Request, redis: redis.Redis = Depends(get_redis)):
|
||||
form = await request.form()
|
||||
username = form.get("username")
|
||||
password = form.get("password")
|
||||
|
||||
@@ -140,7 +140,7 @@ class Model(Resource):
|
||||
and name in obj._meta.fk_fields
|
||||
):
|
||||
await obj.fetch_related(name)
|
||||
# Value must be the string representation of the fk obj
|
||||
# Value must be the string representation of the fk obj
|
||||
value = str(getattr(obj, name, None))
|
||||
ret.append(await input_.render(request, value))
|
||||
continue
|
||||
@@ -314,6 +314,7 @@ class Model(Resource):
|
||||
ret.append(field)
|
||||
return ret
|
||||
|
||||
|
||||
class Dropdown(Resource):
|
||||
resources: List[Type[Resource]]
|
||||
|
||||
|
||||
@@ -30,9 +30,7 @@ async def list_view(
|
||||
fields = model_resource.get_fields()
|
||||
fk_fields = model_resource.get_fk_field()
|
||||
qs = model.all()
|
||||
params, qs = await model_resource.resolve_query_params(
|
||||
request, dict(request.query_params), qs
|
||||
)
|
||||
params, qs = await model_resource.resolve_query_params(request, dict(request.query_params), qs)
|
||||
filters = await model_resource.get_filters(request, params)
|
||||
total = await qs.count()
|
||||
if page_size:
|
||||
@@ -257,14 +255,10 @@ async def create(
|
||||
@router.delete("/{resource}/delete/{pk}")
|
||||
async def delete(request: Request, pk: str, model: Model = Depends(get_model)):
|
||||
await model.filter(pk=pk).delete()
|
||||
return RedirectResponse(
|
||||
url=request.headers.get("referer"), status_code=HTTP_303_SEE_OTHER
|
||||
)
|
||||
return RedirectResponse(url=request.headers.get("referer"), status_code=HTTP_303_SEE_OTHER)
|
||||
|
||||
|
||||
@router.delete("/{resource}/delete")
|
||||
async def bulk_delete(request: Request, ids: str, model: Model = Depends(get_model)):
|
||||
await model.filter(pk__in=ids.split(",")).delete()
|
||||
return RedirectResponse(
|
||||
url=request.headers.get("referer"), status_code=HTTP_303_SEE_OTHER
|
||||
)
|
||||
return RedirectResponse(url=request.headers.get("referer"), status_code=HTTP_303_SEE_OTHER)
|
||||
|
||||
@@ -205,7 +205,9 @@ class Boolean(Select):
|
||||
|
||||
return options
|
||||
|
||||
async def get_queryset(self, request: Request, value: str, qs: QuerySet[Model]) -> QuerySet[Model]:
|
||||
async def get_queryset(
|
||||
self, request: Request, value: str, qs: QuerySet[Model]
|
||||
) -> QuerySet[Model]:
|
||||
"""Return filtered queryset."""
|
||||
filters = {self.context.get("name"): (value == "true")}
|
||||
return qs.filter(**filters)
|
||||
|
||||
730
poetry.lock
generated
730
poetry.lock
generated
File diff suppressed because it is too large
Load Diff
@@ -23,7 +23,7 @@ version = "1.0.4"
|
||||
[tool.poetry.dependencies]
|
||||
Babel = "*"
|
||||
aiofiles = "*"
|
||||
aioredis = "*"
|
||||
redis = "^4.2.0rc1"
|
||||
bcrypt = "*"
|
||||
fastapi = "*"
|
||||
jinja2 = "*"
|
||||
@@ -43,12 +43,12 @@ pytest-xdist = "*"
|
||||
black = "*"
|
||||
flake8 = "*"
|
||||
isort = "*"
|
||||
mypy = "*"
|
||||
pylint = "*"
|
||||
# example
|
||||
asyncmy = "*"
|
||||
asyncpg = "*"
|
||||
python-dotenv = "*"
|
||||
mypy = "*"
|
||||
|
||||
[build-system]
|
||||
build-backend = "poetry.core.masonry.api"
|
||||
|
||||
Reference in New Issue
Block a user