saveload_backend/api/v10/views.py

120 lines
3.6 KiB
Python

from django.http import HttpResponse
from model import models
import json
from datetime import datetime
import time
def response(content):
result = HttpResponse(content)
result["Access-Control-Allow-Origin"] = "*"
result["Access-Control-Allow-Methods"] = "GET, POST, DELETE, OPTIONS"
result["Content-Type"] = "application/json"
return result
def error(text):
return response(json.dumps({'status': 'error','message': text}))
def doTheMagic(request):
clientId = request.GET.get('client', '')
if (clientId == ''):
return error('Wrong client id')
userId = request.GET.get('user', '')
if (userId == ''):
return error('Wrong user id')
chartId = request.GET.get('chart', '')
if request.method == 'OPTIONS':
return respondToOptionsRequest(request.META)
if request.method == 'GET':
if chartId == '':
return getAllUserCharts(clientId, userId)
else:
return getChartContent(clientId, userId, chartId)
elif request.method == 'DELETE':
if chartId == '':
return error('Wrong chart id')
else:
return removeChart(clientId, userId, chartId)
elif request.method == 'POST':
chartName = request.POST.get('name')
symbol = request.POST.get('symbol')
resolution = request.POST.get('resolution')
content = request.POST.get('content')
if chartId == '':
return saveChart(clientId, userId, chartName, symbol, resolution, content)
else:
return rewriteChart(clientId, userId, chartId, chartName, symbol, resolution, content)
else:
return error('Wrong request')
def respondToOptionsRequest(requestHeaders):
result = response(json.dumps({'status': "ok"}))
result["Access-Control-Allow-Headers"] = requestHeaders["HTTP_ACCESS_CONTROL_REQUEST_HEADERS"]
return result
def getAllUserCharts(clientId, userId):
chartsList = models.Chart.objects.defer('content').filter(ownerSource = clientId, ownerId = userId)
result = map(lambda x : {'id': x.id, 'name': x.name, 'timestamp': time.mktime(x.lastModified.timetuple()), 'symbol': x.symbol, 'resolution': x.resolution} , chartsList)
return response(json.dumps({'status': "ok", 'data': list(result)}))
def getChartContent(clientId, userId, chartId):
try:
chart = models.Chart.objects.get(ownerSource = clientId, ownerId = userId, id = chartId)
result = json.dumps({'status': 'ok', 'data': { 'id': chart.id, 'name': chart.name, 'timestamp': time.mktime(chart.lastModified.timetuple()), 'content': chart.content}})
return response(result)
except:
return error('Chart not found')
def removeChart(clientId, userId, chartId):
try:
chart = models.Chart.objects.get(ownerSource = clientId, ownerId = userId, id = chartId)
chart.delete()
return response(json.dumps({'status': 'ok'}))
except:
return error('Chart not found')
def saveChart(clientId, userId, chartName, symbol, resolution, content):
newChart = models.Chart(
ownerSource = clientId,
ownerId = userId,
name = chartName,
content = content,
lastModified = datetime.now(),
symbol = symbol,
resolution = resolution
)
newChart.save()
return response(json.dumps({'status': 'ok', 'id': newChart.id}))
def rewriteChart(clientId, userId, chartId, chartName, symbol, resolution, content):
try:
chart = models.Chart.objects.get(ownerSource = clientId, ownerId = userId, id = chartId)
chart.lastModified = datetime.utcnow()
chart.content = content
chart.name = chartName
chart.symbol = symbol
chart.resolution = resolution
chart.save()
return response(json.dumps({'status': 'ok'}))
except:
return error('Chart not found')