From 9fb16c71a15743014a86bd8df0832960cbdedddb Mon Sep 17 00:00:00 2001 From: drbeep Date: Mon, 25 May 2015 13:51:25 -0400 Subject: [PATCH] Api v11 introduced --- api/v11/__init__.py | 0 api/v11/charts.py | 102 ++++++++++++++++++++++++++++++++++++++ api/v11/common.py | 34 +++++++++++++ api/v11/studyTemplates.py | 98 ++++++++++++++++++++++++++++++++++++ api/v11/urls.py | 13 +++++ 5 files changed, 247 insertions(+) create mode 100755 api/v11/__init__.py create mode 100644 api/v11/charts.py create mode 100644 api/v11/common.py create mode 100644 api/v11/studyTemplates.py create mode 100755 api/v11/urls.py diff --git a/api/v11/__init__.py b/api/v11/__init__.py new file mode 100755 index 0000000..e69de29 diff --git a/api/v11/charts.py b/api/v11/charts.py new file mode 100644 index 0000000..4fdeca5 --- /dev/null +++ b/api/v11/charts.py @@ -0,0 +1,102 @@ +from django.http import HttpResponse +from model import models +import json +from datetime import datetime +import time +import common + + +def processRequest(request): + parsedRequest = common.parseRequest(request) + + if !(parsedRequest.error is None): + return parsedRequest.error + + clientId = parsedRequest.clientId + userId = parsedRequest.userId + chartId = request.GET.get('chart', '') + + + if request.method == 'GET': + if chartId == '': + return getAllUserCharts(clientId, userId) + else: + return getChartContent(clientId, userId, chartId) + + elif request.method == 'DELETE': + if chartId == '': + return common.error('Wrong chart id') + else: + return removeChart(clientId, userId, chartId) + + elif request.method == 'POST': + chartName = request.POST.get('name') + symbol = request.POST.get('symbol') + resoluion = request.POST.get('resolution') + content = request.POST.get('content') + if chartId == '': + return saveChart(clientId, userId, chartName, symbol, resoluion, content) + else: + return rewriteChart(clientId, userId, chartId, chartName, symbol, resoluion, content) + + else: + return common.error('Wrong request') + + +#----------------------------------------------------------------------------------------------------- +#----------------------------------------------------------------------------------------------------- +#----------------------------------------------------------------------------------------------------- + + +def getAllUserCharts(clientId, userId): + chartsList = models.Chart.objects.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 common.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 common.response(result) + except: + return common.error('Chart not found') + + +def removeChart(clientId, userId, chartId): + try: + chart = models.Chart.objects.get(ownerSource = clientId, ownerId = userId, id = chartId) + chart.delete() + return common.response(json.dumps({'status': 'ok'})) + except: + return common.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.utcnow(), + symbol = symbol, + resolution = resolution + ) + + newChart.save() + return common.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 common.response(json.dumps({'status': 'ok'})) + except: + return common.error('Chart not found') diff --git a/api/v11/common.py b/api/v11/common.py new file mode 100644 index 0000000..e6fe660 --- /dev/null +++ b/api/v11/common.py @@ -0,0 +1,34 @@ +def response(content): + result = HttpResponse(content) + result["Access-Control-Allow-Origin"] = "*" + result["Access-Control-Allow-Methods"] = "GET, POST, DELETE, OPTIONS" + return result + + + +def error(text): + return response(json.dumps({'status': 'error','message': text})) + + +def respondToOptionsRequest(requestHeaders): + result = common.response(json.dumps({'status': "ok"})) + result["Access-Control-Allow-Headers"] = requestHeaders["HTTP_ACCESS_CONTROL_REQUEST_HEADERS"] + return result + + +def parseRequest(request): + clientId = request.GET.get('client', '') + userId = request.GET.get('user', '') + + err = '' + + if (clientId == ''): + err = error('Wrong client id') + + if (userId == ''): + err = error('Wrong user id') + + if request.method == 'OPTIONS': + response = respondToOptionsRequest(request.META) + + return dict(error=err, response=response, clientId=clientId, iserId=userId) diff --git a/api/v11/studyTemplates.py b/api/v11/studyTemplates.py new file mode 100644 index 0000000..d084421 --- /dev/null +++ b/api/v11/studyTemplates.py @@ -0,0 +1,98 @@ +from django.http import HttpResponse +from model import models +import json +from datetime import datetime +import time +from . import common + + +def processRequest(request): + parsedRequest = common.parseRequest(request) + + if !(parsedRequest.error is None): + return parsedRequest.error + + clientId = parsedRequest.clientId + userId = parsedRequest.userId + templateId = request.GET.get('template', '') + + + if request.method == 'GET': + if templateId == '': + return getAllTemplatesList(clientId, userId) + else: + return getTemplate(clientId, userId, templateId) + + elif request.method == 'DELETE': + if templateId == '': + return common.error('Wrong template id') + else: + return removeTemplate(clientId, userId, templateId) + + elif request.method == 'POST': + chartName = request.POST.get('name') + symbol = request.POST.get('symbol') + resoluion = request.POST.get('resolution') + content = request.POST.get('content') + if templateId == '': + return saveChart(clientId, userId, chartName, symbol, resoluion, content) + else: + return rewriteChart(clientId, userId, templateId, chartName, symbol, resoluion, content) + + else: + return common.error('Wrong request') + +#----------------------------------------------------------------------------------------------------- +#----------------------------------------------------------------------------------------------------- +#----------------------------------------------------------------------------------------------------- + + +def getAllTemplatesList(clientId, userId): + items = models.StudyTemplate.objects.filter(ownerSource = clientId, ownerId = userId) + result = map(lambda x : {'name': x.name} , items) + return common.response(json.dumps({'status': "ok", 'data': list(result)})) + + +def getTemplate(clientId, userId, name): + try: + item = models.StudyTemplate.objects.get(ownerSource = clientId, ownerId = userId, name = name) + result = json.dumps({'status': 'ok', 'data': { 'name': item.name, 'content': item.content}}) + return common.response(result) + except: + return common.error('StudyTemplate not found') + + +def removeTemplate(clientId, userId, name): + try: + item = models.StudyTemplate.objects.get(ownerSource = clientId, ownerId = userId, name = name) + item.delete() + return common.response(json.dumps({'status': 'ok'})) + except: + return common.error('StudyTemplate not found') + + +def createTemplate(clientId, userId, name, content): + newItem = models.StudyTemplate( + ownerSource = clientId, + ownerId = userId, + name = name, + content = content + ) + + newItem.save() + return common.response(json.dumps({'status': 'ok'})) + + +def rewriteTemplate(clientId, userId, name, content): + try: + chart = models.StudyTemplate.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 common.response(json.dumps({'status': 'ok'})) + except: + return common.error('StudyTemplate not found') diff --git a/api/v11/urls.py b/api/v11/urls.py new file mode 100755 index 0000000..a8911ea --- /dev/null +++ b/api/v11/urls.py @@ -0,0 +1,13 @@ +from django.conf.urls import patterns, url +import charts +import studyTemplates +from django.views.decorators.csrf import csrf_exempt + + +urlpatterns = patterns('', + url(r'^charts$', csrf_exempt(charts.processRequest)), +) + +urlpatterns = patterns('', + url(r'^study_templates$', csrf_exempt(studyTemplates.processRequest)), +)