# third-party imports from rest_framework.response import Response from rest_framework import generics from django_redis import get_redis_connection from django.utils.decorators import method_decorator from django.views.decorators.cache import cache_page # app imports from app.models import BhavCopyEquity from app.serializers import BhavCopyEquitySerializer from app.utils import populate_bhav_copy_data cache = get_redis_connection("default") # Create your views here. class BhavCopyEquityView(generics.RetrieveAPIView): queryset = BhavCopyEquity.objects.all() def get(self, request, *args, **kwargs): queryset = self.get_queryset() serializer = BhavCopyEquitySerializer(queryset, many=True) return Response(serializer.data) class BhavCopyEquityDefaultRedisView(generics.RetrieveAPIView): queryset = BhavCopyEquity.objects.all() @method_decorator(cache_page(60*60*2)) def get(self, request, *args, **kwargs): queryset = self.get_queryset() serializer = BhavCopyEquitySerializer(queryset, many=True) return Response(serializer.data) class EmptyRespoinseView(generics.RetrieveAPIView): def get(self, request, *args, **kwargs): return Response([]) class BhavCopyEquityCustomRedisView(generics.RetrieveAPIView): def get(self, request, *args, **kwargs): # TODO: try stringified json pipe = cache.pipeline() stocks = cache.lrange("stocks", 0, -1) if len(stocks) == 0: populate_bhav_copy_data() stocks = cache.lrange("stocks", 0, -1) for stock in stocks: pipe.hgetall(f"stock:{stock}") return Response(pipe.execute())