API v11 implemented: Study Templates support added

This commit is contained in:
drbeep 2015-06-15 13:45:06 -04:00
parent 9fb16c71a1
commit 4db1008890
9 changed files with 82 additions and 47 deletions

View File

@ -1,19 +1,24 @@
from django.http import HttpResponse from django.http import HttpResponse
from model import models
import json import json
from datetime import datetime
import time import time
import common from datetime import datetime
from model import models
from api.v11 import common
def processRequest(request): def processRequest(request):
parsedRequest = common.parseRequest(request) parsedRequest = common.parseRequest(request)
if !(parsedRequest.error is None): if parsedRequest['error'] is not None:
return parsedRequest.error return parsedRequest['error']
clientId = parsedRequest.clientId if parsedRequest['response'] is not None:
userId = parsedRequest.userId return parsedRequest['response']
clientId = parsedRequest["clientId"]
userId = parsedRequest['userId']
chartId = request.GET.get('chart', '') chartId = request.GET.get('chart', '')

View File

@ -1,3 +1,7 @@
from django.http import HttpResponse
import json
def response(content): def response(content):
result = HttpResponse(content) result = HttpResponse(content)
result["Access-Control-Allow-Origin"] = "*" result["Access-Control-Allow-Origin"] = "*"
@ -5,13 +9,12 @@ def response(content):
return result return result
def error(text): def error(text):
return response(json.dumps({'status': 'error','message': text})) return response(json.dumps({'status': 'error','message': text}))
def respondToOptionsRequest(requestHeaders): def respondToOptionsRequest(requestHeaders):
result = common.response(json.dumps({'status': "ok"})) result = response(json.dumps({'status': "ok"}))
result["Access-Control-Allow-Headers"] = requestHeaders["HTTP_ACCESS_CONTROL_REQUEST_HEADERS"] result["Access-Control-Allow-Headers"] = requestHeaders["HTTP_ACCESS_CONTROL_REQUEST_HEADERS"]
return result return result
@ -20,15 +23,19 @@ def parseRequest(request):
clientId = request.GET.get('client', '') clientId = request.GET.get('client', '')
userId = request.GET.get('user', '') userId = request.GET.get('user', '')
err = '' err = None
response = None
if (clientId == ''): if (clientId == ''):
err = error('Wrong client id') err = error('Wrong client id')
elif (userId == ''):
if (userId == ''):
err = error('Wrong user id') err = error('Wrong user id')
elif request.method == 'OPTIONS':
if request.method == 'OPTIONS':
response = respondToOptionsRequest(request.META) response = respondToOptionsRequest(request.META)
return dict(error=err, response=response, clientId=clientId, iserId=userId) return {
"error": err,
"response": response,
"clientId": clientId,
"userId": userId
}

View File

@ -1,47 +1,47 @@
from django.http import HttpResponse from django.http import HttpResponse
from model import models
import json import json
from datetime import datetime
import time import time
from . import common from datetime import datetime
from model import models
from api.v11 import common
def processRequest(request): def processRequest(request):
parsedRequest = common.parseRequest(request) parsedRequest = common.parseRequest(request)
if !(parsedRequest.error is None): if parsedRequest['error'] is not None:
return parsedRequest.error return parsedRequest['error']
clientId = parsedRequest.clientId if parsedRequest['response'] is not None:
userId = parsedRequest.userId return parsedRequest['response']
templateId = request.GET.get('template', '')
clientId = parsedRequest["clientId"]
userId = parsedRequest['userId']
templateName = request.GET.get('template', '')
if request.method == 'GET': if request.method == 'GET':
if templateId == '': if templateName == '':
return getAllTemplatesList(clientId, userId) return getAllTemplatesList(clientId, userId)
else: else:
return getTemplate(clientId, userId, templateId) return getTemplate(clientId, userId, templateName)
elif request.method == 'DELETE': elif request.method == 'DELETE':
if templateId == '': if templateName == '':
return common.error('Wrong template id') return common.error('Wrong template id')
else: else:
return removeTemplate(clientId, userId, templateId) return removeTemplate(clientId, userId, templateName)
elif request.method == 'POST': elif request.method == 'POST':
chartName = request.POST.get('name') templateName = request.POST.get('name')
symbol = request.POST.get('symbol')
resoluion = request.POST.get('resolution')
content = request.POST.get('content') content = request.POST.get('content')
if templateId == '': return createTemplate(clientId, userId, templateName, content)
return saveChart(clientId, userId, chartName, symbol, resoluion, content)
else:
return rewriteChart(clientId, userId, templateId, chartName, symbol, resoluion, content)
else: else:
return common.error('Wrong request') return common.error('Wrong request')
#----------------------------------------------------------------------------------------------------- #-----------------------------------------------------------------------------------------------------
#----------------------------------------------------------------------------------------------------- #-----------------------------------------------------------------------------------------------------
#----------------------------------------------------------------------------------------------------- #-----------------------------------------------------------------------------------------------------
@ -83,9 +83,9 @@ def createTemplate(clientId, userId, name, content):
return common.response(json.dumps({'status': 'ok'})) return common.response(json.dumps({'status': 'ok'}))
def rewriteTemplate(clientId, userId, name, content): def rewriteTemplate(clientId, userId, templateId, name, content):
try: try:
chart = models.StudyTemplate.objects.get(ownerSource = clientId, ownerId = userId, id = chartId) chart = models.StudyTemplate.objects.get(ownerSource = clientId, ownerId = userId, id = templateId)
chart.lastModified = datetime.utcnow() chart.lastModified = datetime.utcnow()
chart.content = content chart.content = content
chart.name = chartName chart.name = chartName

View File

@ -1,13 +1,10 @@
from django.conf.urls import patterns, url from django.conf.urls import patterns, url
import charts from api.v11 import studyTemplates
import studyTemplates from api.v11 import charts
from django.views.decorators.csrf import csrf_exempt from django.views.decorators.csrf import csrf_exempt
urlpatterns = patterns('', urlpatterns = patterns('',
url(r'^charts$', csrf_exempt(charts.processRequest)), url(r'^charts$', csrf_exempt(charts.processRequest)),
)
urlpatterns = patterns('',
url(r'^study_templates$', csrf_exempt(studyTemplates.processRequest)), url(r'^study_templates$', csrf_exempt(studyTemplates.processRequest)),
) )

8
charting_library_charts/settings.py Normal file → Executable file
View File

@ -12,11 +12,11 @@ MANAGERS = ADMINS
DATABASES = { DATABASES = {
'default': { 'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2', 'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'charting_library_charts', 'NAME': 'charting_library',
'USER': 'postgres', 'USER': 'postgres',
'PASSWORD': '12345', ### Put your Postgres password here 'PASSWORD': 'postgres', ### Put your Postgres password here
'HOST': 'localhost', 'HOST': 'localhost',
'PORT': '5433', 'PORT': '5432',
} }
} }
@ -120,7 +120,7 @@ INSTALLED_APPS = (
# 'django.contrib.admin', # 'django.contrib.admin',
# Uncomment the next line to enable admin documentation: # Uncomment the next line to enable admin documentation:
# 'django.contrib.admindocs', # 'django.contrib.admindocs',
'charts', 'model',
) )
# A sample logging configuration. The only tangible logging # A sample logging configuration. The only tangible logging

View File

@ -2,4 +2,5 @@ from django.conf.urls import patterns, include, url
urlpatterns = patterns('', urlpatterns = patterns('',
url(r'^1\.0/', include('api.v10.urls')), url(r'^1\.0/', include('api.v10.urls')),
url(r'^1\.1/', include('api.v11.urls')),
) )

View File

@ -8,7 +8,7 @@ import datetime
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
('charts', '0001_initial'), ('model', '0001_initial'),
] ]
operations = [ operations = [

View File

@ -7,7 +7,7 @@ from django.db import models, migrations
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
('charts', '0002_auto_20141007_1601'), ('model', '0002_auto_20141007_1601'),
] ]
operations = [ operations = [

View File

@ -0,0 +1,25 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
import jsonfield.fields
class Migration(migrations.Migration):
dependencies = [
('model', '0003_auto_20141008_1252'),
]
operations = [
migrations.CreateModel(
name='StudyTemplate',
fields=[
('id', models.AutoField(primary_key=True, auto_created=True, serialize=False, verbose_name='ID')),
('ownerSource', models.CharField(max_length=200)),
('ownerId', models.CharField(max_length=200)),
('name', models.CharField(max_length=200)),
('content', jsonfield.fields.JSONField()),
],
),
]