summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMaksim A. Boyko <maksim.a.boyko@gmail.com>2012-08-16 06:45:46 -0400
committerMaksim A. Boyko <maksim.a.boyko@gmail.com>2012-08-16 06:45:46 -0400
commitd5e9f15999aeca7e97b3c8d38d956e0d4494c087 (patch)
treef41c1174da7e289ccd97ebdea312e84ef5fa9a86
parent646ce806add719db35ec1fba86248614f55af157 (diff)
Backend: Views refactoring
-rw-r--r--backend/models.py2
-rw-r--r--backend/views.py159
2 files changed, 82 insertions, 79 deletions
diff --git a/backend/models.py b/backend/models.py
index 6e015cd..9d970c5 100644
--- a/backend/models.py
+++ b/backend/models.py
@@ -19,7 +19,7 @@ class SJSettingsModel(models.Model):
def settings(self):
if not self.settings_text:
return dict()
- return json.loads(self.settings_text, parse_float=True, parse_int=True)
+ return json.loads(self.settings_text, encoding='utf8', parse_float=True, parse_int=True)
@settings.setter
def settings(self, settings):
diff --git a/backend/views.py b/backend/views.py
index f0cfb3f..e084325 100644
--- a/backend/views.py
+++ b/backend/views.py
@@ -26,7 +26,7 @@ ROOM_VIDEO_LOG_SIZE = 50
# Common funtions
#
-def set_cors_headers(response):
+def headers(response):
""" Setup additional headers for response
"""
response['Access-Control-Allow-Origin'] = '*'
@@ -35,22 +35,22 @@ def set_cors_headers(response):
response['Access-Control-Max-Age'] = '3628800'
response['Content-type'] = 'text/plain; charset=UTF-8'
-def api_error_headers(error, response=None):
+def response_error(error, response=None):
""" Add API error name with setup headers to response
"""
if not response:
response = HttpResponse()
- set_cors_headers(response)
+ headers(response)
response.write(API_HEADER)
response.write('0\t%s\n' % error)
return response
-def api_ok_headers(response=None):
+def response_success(response=None):
""" Add API OK with setup headers to response
"""
if not response:
response = HttpResponse()
- set_cors_headers(response)
+ headers(response)
response.write(API_HEADER)
response.write('OK\n')
return response
@@ -62,9 +62,9 @@ def check_form_fields(request, form_fields):
print field, '= "%s"' % value
for field in form_fields:
if field not in request.POST:
- return api_error_headers('incomplete form')
+ return response_error('incomplete form')
if not request.POST[field]:
- return api_error_headers('no %s' % field)
+ return response_error('no %s' % field)
def user_response_str(request, user=None):
""" Return API response string for user
@@ -100,23 +100,23 @@ def api_auth_login(request):
if user:
if user.is_active:
auth.login(request, user)
- response = api_ok_headers()
+ response = response_success()
response.write(user_response_str(request))
return response
else:
- return api_error_headers('user disabled')
+ return response_error('user disabled')
else:
if auth.models.User.objects.filter(username=request.POST['username']):
- return api_error_headers('wrong password')
+ return response_error('wrong password')
else:
- return api_error_headers('no such user')
+ return response_error('no such user')
@require_POST
def api_auth_logout(request):
""" Log out user. Public API
"""
auth.logout(request)
- return api_ok_headers()
+ return response_success()
@require_POST
def api_auth_sneakin(request):
@@ -129,15 +129,15 @@ def api_auth_sneakin(request):
try:
user = auth.models.User.objects.get(username=request.POST['username'])
if user.id != int(request.POST['userid']):
- return api_error_headers('no match')
+ return response_error('no match')
except:
- return api_error_headers('no such user')
+ return response_error('no such user')
# Hack to authenticate user manually
for backend in auth.get_backends():
user.backend = "%s.%s" % (backend.__module__, backend.__class__.__name__)
break
auth.login(request, user)
- response = api_ok_headers()
+ response = response_success()
response.write(user_response_str(request, user))
return response
@@ -150,7 +150,7 @@ def api_auth_register(request):
if response:
return response
if auth.models.User.objects.filter(username=request.POST['username']):
- return api_error_headers('user exists')
+ return response_error('user exists')
user = auth.models.User.objects.create_user(username=request.POST['username'],
email='default@noemail.com',
password=request.POST['password'])
@@ -158,13 +158,13 @@ def api_auth_register(request):
try:
user.save()
except:
- return api_error_headers('db error')
+ return response_error('db error')
user_profile = SJUserProfile(user=user)
try:
user_profile.save()
except:
- return api_error_headers('db error')
- response = api_ok_headers()
+ return response_error('db error')
+ response = response_success()
response.write(user_response_str(request, user))
return response
@@ -177,15 +177,15 @@ def api_auth_available(request):
if response:
return response
if auth.models.User.objects.filter(username=request.POST['username']):
- return api_error_headers('user exists')
- return api_ok_headers()
+ return response_error('user exists')
+ return response_success()
@require_POST
def api_auth_checkin(request):
""" Check in user. Private API
"""
if request.user.is_authenticated():
- response = api_ok_headers()
+ response = response_success()
response.write(user_response_str(request))
return response
return HttpResponse()
@@ -206,10 +206,10 @@ def api_auth_password(request):
user_profile = user.get_profile()
user_profile.save()
except auth.models.User.DoesNotExist:
- return api_error_headers('no such user')
+ return response_error('no such user')
except:
- return api_error_headers('db error')
- return api_ok_headers()
+ return response_error('db error')
+ return response_success()
return HttpResponse()
#
@@ -220,64 +220,67 @@ def api_auth_password(request):
def api_user_videos(request):
""" Get list of user videos. Public API
"""
-# form_fields = ['user']
-# response = check_form_fields(request, form_fields)
-# if response:
-# return response
-# try:
-# query = Q(user=auth.models.User.objects.get(id=request.POST['user']))
-# except auth.models.User.DoesNotExist:
-# return api_error_headers('no such user')
-# except:
-# return api_error_headers('db error')
-# if 'start' in request.POST:
-# try:
-# timestamp = float(request.POST['start'])
-# query = query & Q(date__lte=datetime.fromtimestamp(timestamp))
-# except:
-# pass
-# videos = SJVideo.objects.filter(query).order_by('-date')[0:ROOM_VIDEO_LOG_SIZE]
-# if not videos:
-# return api_error_headers('no videos')
-# response = api_ok_headers()
-# response.write('\n'.join(['\t'.join([str(v.id),
-# str(v.date),
-# str(v.user.id),
-# v.user.username,
-# v.url,
-# v.title]) for v in videos]))
-# return response
- return HttpResponse('Not implemented yet!\n')
+ form_fields = ['user']
+ response = check_form_fields(request, form_fields)
+ if response:
+ return response
+ try:
+ query = Q(user=auth.models.User.objects.get(id=request.POST['user']))
+ except auth.models.User.DoesNotExist:
+ return response_error('no such user')
+ except:
+ return response_error('db error')
+ if 'start' in request.POST:
+ try:
+ timestamp = float(request.POST['start'])
+ query = query & Q(datetime__lte=datetime.fromtimestamp(timestamp))
+ except:
+ pass
+ videos = SJContent.objects.filter(content_type='video').filter(query).order_by('-datetime')[0:ROOM_VIDEO_LOG_SIZE]
+ if not videos:
+ return response_error('no videos')
+ response = response_success()
+ for v in videos:
+ s = v.settings
+ l = '\t'.join([
+ str(v.id),
+ str(v.datetime),
+ str(v.user.id),
+ v.user.username,
+ s['url'],
+ s['title'],
+ ])
+ response.write(l + '\n')
+ return response
@require_POST
def api_user_likes(request):
""" Get list of liked videos. Public API
"""
-# form_fields = ['user']
-# response = check_form_fields(request, form_fields)
-# if response:
-# return response
-# try:
-# query = Q(sjlike__user=auth.models.User.objects.get(id=request.POST['user']))
-# except auth.models.User.DoesNotExist:
-# return api_error_headers('no such user')
-# except:
-# return api_error_headers('db error')
-# if 'start' in request.POST:
-# try:
-# timestamp = float(request.POST['start'])
-# query = query & Q(date__lte=datetime.fromtimestamp(timestamp))
-# except:
-# pass
-# videos = SJVideo.objects.filter(query).order_by('-date')[0:ROOM_VIDEO_LOG_SIZE]
-# if not videos:
-# return api_error_headers('no videos')
-# response = api_ok_headers()
-# response.write('\n'.join(['\t'.join([str(v.user.id),
-# str(v.id),
-# str(v.date)]) for v in videos]))
-# return response
- return HttpResponse('Not implemented yet!\n')
+ form_fields = ['user']
+ response = check_form_fields(request, form_fields)
+ if response:
+ return response
+ try:
+ query = Q(sjlike__user=auth.models.User.objects.get(id=request.POST['user']))
+ except auth.models.User.DoesNotExist:
+ return response_error('no such user')
+ except:
+ return response_error('db error')
+ if 'start' in request.POST:
+ try:
+ timestamp = float(request.POST['start'])
+ query = query & Q(datetime__lte=datetime.fromtimestamp(timestamp))
+ except:
+ pass
+ videos = SJContent.objects.filter(content_type='video').filter(query).order_by('-datetime')[0:ROOM_VIDEO_LOG_SIZE]
+ if not videos:
+ return response_error('no videos')
+ response = response_success()
+ for v in videos:
+ l = '\t'.join([str(v.user.id), str(v.id), str(v.datetime)])
+ response.write(l + '\n')
+ return response
@require_POST
def api_user_top(request):