fix redis cache & add cache to custom types search

This commit is contained in:
2023-10-30 11:41:40 +01:00
parent 38a5833e33
commit cf6213cca3
5 changed files with 21 additions and 18 deletions

View File

@@ -7,6 +7,7 @@ REDIS_URL=
REDIS_PORT= REDIS_PORT=
REDIS_DB= REDIS_DB=
REDIS_PASSWORD= REDIS_PASSWORD=
REDIS_USER=
SQLITE_DB_PATH= SQLITE_DB_PATH=
POSTGRES_HOST= POSTGRES_HOST=

View File

@@ -2,6 +2,7 @@ from django.shortcuts import render
from django.http import JsonResponse from django.http import JsonResponse
from django.db.models import Q from django.db.models import Q
from django.contrib.auth import models as auth_models from django.contrib.auth import models as auth_models
from django.core.cache import cache
from rest_framework import viewsets, permissions, settings from rest_framework import viewsets, permissions, settings
from rest_framework.decorators import api_view from rest_framework.decorators import api_view
from rest_framework.response import Response from rest_framework.response import Response
@@ -39,24 +40,27 @@ class AcquisitionViewSet(viewsets.ModelViewSet):
@api_view(['POST']) @api_view(['POST'])
def custom_types_search(request): def custom_types_search(request):
items = [] cache_key = f"custom_types_search_{request.data}"
items = cache.get(cache_key, [])
for q in request.data: if not items:
conditions = Q() for q in request.data:
for k in q.keys(): conditions = Q()
value = q[k] for k in q.keys():
value = q[k]
token = k.split('___') token = k.split('___')
key, mods = token[0], token[1:] key, mods = token[0], token[1:]
cond = Q(**{key: value}) cond = Q(**{key: value})
if "not" in mods: if "not" in mods:
cond = ~cond cond = ~cond
conditions = conditions & cond conditions = conditions & cond
items.extend(sde_models.SDEType.objects.filter(conditions)) items.extend(sde_models.SDEType.objects.filter(conditions))
cache.set(cache_key, items, 60 * 60)
paginator = settings.api_settings.DEFAULT_PAGINATION_CLASS() paginator = settings.api_settings.DEFAULT_PAGINATION_CLASS()
result_page = paginator.paginate_queryset(items, request) result_page = paginator.paginate_queryset(items, request)

View File

@@ -30,7 +30,7 @@ services:
- ./api:/app/api - ./api:/app/api
- ./sde:/app/sde - ./sde:/app/sde
- ./manage.py:/app/manage.py - ./manage.py:/app/manage.py
# - ./static_eve:/app/static_eve - ./static_eve:/app/static_eve
command: ["uvicorn", "marbas.asgi:application", "--host", "0.0.0.0", "--port", "8000", "--reload"] command: ["uvicorn", "marbas.asgi:application", "--host", "0.0.0.0", "--port", "8000", "--reload"]
depends_on: depends_on:
redis: redis:

View File

@@ -4,5 +4,4 @@ from rest_framework import pagination
class CustomPagination(pagination.PageNumberPagination): class CustomPagination(pagination.PageNumberPagination):
page_size = 10 page_size = 10
page_size_query_param = 'page_size' page_size_query_param = 'page_size'
max_page_size = 250 max_page_size = 1000

View File

@@ -92,10 +92,9 @@ WSGI_APPLICATION = 'marbas.wsgi.application'
CACHES = { CACHES = {
"default": { "default": {
"BACKEND": "django.core.cache.backends.redis.RedisCache", "BACKEND": "django.core.cache.backends.redis.RedisCache",
"LOCATION": f"redis://{os.getenv('REDIS_URL')}:{os.getenv('REDIS_PORT', '6379')}/{os.getenv('REDIS_DB', '0')}", "LOCATION": f"redis://{os.getenv('REDIS_USER', '')}:{os.getenv('REDIS_PASSWORD', '')}@{os.getenv('REDIS_URL')}:{os.getenv('REDIS_PORT', '6379')}",
"OPTIONS": { "OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient", "db": os.getenv('REDIS_DB', '0'),
"PASSWORD": os.getenv("REDIS_PASSWORD"),
}, },
} }
} }