From cf6213cca38f46dc7c299bbbe7302bd2ee9bf329 Mon Sep 17 00:00:00 2001 From: Kaladaran Date: Mon, 30 Oct 2023 11:41:40 +0100 Subject: [PATCH] fix redis cache & add cache to custom types search --- .env.template | 1 + api/views.py | 28 ++++++++++++++++------------ docker-compose.dev.yml | 2 +- marbas/pagination.py | 3 +-- marbas/settings.py | 5 ++--- 5 files changed, 21 insertions(+), 18 deletions(-) diff --git a/.env.template b/.env.template index bad4714..83628c3 100644 --- a/.env.template +++ b/.env.template @@ -7,6 +7,7 @@ REDIS_URL= REDIS_PORT= REDIS_DB= REDIS_PASSWORD= +REDIS_USER= SQLITE_DB_PATH= POSTGRES_HOST= diff --git a/api/views.py b/api/views.py index 7291476..80125af 100644 --- a/api/views.py +++ b/api/views.py @@ -2,6 +2,7 @@ from django.shortcuts import render from django.http import JsonResponse from django.db.models import Q 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.decorators import api_view from rest_framework.response import Response @@ -39,24 +40,27 @@ class AcquisitionViewSet(viewsets.ModelViewSet): @api_view(['POST']) def custom_types_search(request): - items = [] + cache_key = f"custom_types_search_{request.data}" + items = cache.get(cache_key, []) - for q in request.data: - conditions = Q() - for k in q.keys(): - value = q[k] + if not items: + for q in request.data: + conditions = Q() + for k in q.keys(): + value = q[k] - token = k.split('___') - key, mods = token[0], token[1:] + token = k.split('___') + key, mods = token[0], token[1:] - cond = Q(**{key: value}) + cond = Q(**{key: value}) - if "not" in mods: - cond = ~cond + if "not" in mods: + 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() result_page = paginator.paginate_queryset(items, request) diff --git a/docker-compose.dev.yml b/docker-compose.dev.yml index 2102756..d623bf9 100644 --- a/docker-compose.dev.yml +++ b/docker-compose.dev.yml @@ -30,7 +30,7 @@ services: - ./api:/app/api - ./sde:/app/sde - ./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"] depends_on: redis: diff --git a/marbas/pagination.py b/marbas/pagination.py index c4d4f9b..091686b 100644 --- a/marbas/pagination.py +++ b/marbas/pagination.py @@ -4,5 +4,4 @@ from rest_framework import pagination class CustomPagination(pagination.PageNumberPagination): page_size = 10 page_size_query_param = 'page_size' - max_page_size = 250 - + max_page_size = 1000 diff --git a/marbas/settings.py b/marbas/settings.py index d7e4424..a432644 100644 --- a/marbas/settings.py +++ b/marbas/settings.py @@ -92,10 +92,9 @@ WSGI_APPLICATION = 'marbas.wsgi.application' CACHES = { "default": { "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": { - "CLIENT_CLASS": "django_redis.client.DefaultClient", - "PASSWORD": os.getenv("REDIS_PASSWORD"), + "db": os.getenv('REDIS_DB', '0'), }, } }