bullish/backend/app/views.py
Ameya Shenoy 2b9bfd1ddb
feat: implement date picker
- re write postgres endpoint
- enable logging in django
- ui for date picker

Signed-off-by: Ameya Shenoy <shenoy.ameya@gmail.com>
2021-02-13 02:08:40 +05:30

72 lines
2.2 KiB
Python

#!/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())