- re write postgres endpoint - enable logging in django - ui for date picker Signed-off-by: Ameya Shenoy <shenoy.ameya@gmail.com>
72 lines
2.2 KiB
Python
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())
|
|
|