#!/usr/bin/env python # -*- coding: utf-8 -*- """Bullish page views.""" # standard imports import datetime import logging # third-party imports from rest_framework import generics from rest_framework.response import Response from rest_framework.decorators import api_view from django_redis import get_redis_connection # 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") logger = logging.getLogger(__name__) # Create your views here. @api_view(['GET']) def bhavCopyEquityList(request): ret_message = "" # Verify Date req_date = datetime.datetime.strptime(request.query_params.get('date'), '%Y-%m-%d') # 18:00 IST == 12:30 UTC today = datetime.datetime.now().replace(hour=12, minute=30, second=0, microsecond=0) if req_date > today: ret_message = "Time travel not yet invented! Returning latest available data." req_date = today if datetime.datetime.now() < today: req_date = today - datetime.timedelta(days=1) queryset = BhavCopyEquity.objects.all().filter(date=req_date) serializer = BhavCopyEquitySerializer(queryset, many=True) # Fetch data if not present if len(serializer.data) == 0: logger.info(f'Data not available in DB') populate_bhav_copy_data(date=req_date) queryset = BhavCopyEquity.objects.all().filter(date=req_date) serializer = BhavCopyEquitySerializer(queryset, many=True) return Response({ "data": serializer.data, "message": ret_message }) 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())