--- a/server/src/ammico/views.py Fri Jun 05 16:10:12 2015 +0200
+++ b/server/src/ammico/views.py Tue Jun 09 19:05:05 2015 +0200
@@ -3,51 +3,54 @@
from datetime import datetime
import json
+from django.conf import settings
from django.contrib.auth import get_user_model
+from django.core.urlresolvers import reverse, reverse_lazy
from django.http import HttpResponse
from django.shortcuts import render
from django.utils.dateparse import parse_datetime
+from django.views.generic import View
+import jwt
import requests
from rest_framework import status
from rest_framework.authentication import TokenAuthentication
from rest_framework.authtoken.models import Token
+from rest_framework.decorators import api_view
from rest_framework.permissions import IsAuthenticated, AllowAny
from rest_framework.response import Response
from rest_framework.views import APIView
-from ammico.models import Book, Slide
+from ammico.models import Book, Slide, Exposition
from ammico.serializers.ammico import BookSerializer, SlideSerializer
-from config import AUTH_JAMESPOT
-import jwt
-from settings import URL_JAMESPOT
#from django.contrib.auth import login, logout
User = get_user_model()
-def populateVisit(user):
+def populateVisit(user, idExpo):
# send request with usermail to get the visits of this user and add it to the database
#r = requests.get('http://fui-ammico.jamespot.pro/api/api.php?&k=6c8bfcea247e8a5841288269887d88f0&d=2016-01-31&m=EXT-IRI&v=2.0&f=get&o=article&idArticle=169')
#simulate the request
params = {'o': 'article', 'f': 'list', 'idUser': user.idUser}
- r = requests.get(URL_JAMESPOT, params=params)
+ r = requests.get(settings.URL_JAMESPOT, params=params)
visits = json.loads(r.content.decode('utf-8'))
for visit in visits['VAL']:
params = {'o' : 'article', 'f' : 'get', 'idArticle' : visit['idArticle']}
- r = requests.get(URL_JAMESPOT, params=params)
+ r = requests.get(settings.URL_JAMESPOT, params=params)
visitInfo = json.loads(r.content.decode('utf-8'))['VAL']
- if (not Book.objects.filter(idArticle=visit['idArticle']).exists()):
+ if (not Book.objects.filter(id_article=visit['idArticle']).exists()):
book = Book.objects.create(
user=user,
- idArticle=visitInfo['idArticle'],
+ exposition = Exposition.objects.get(id=idExpo),
+ id_article=visitInfo['idArticle'],
title = visitInfo['title'],
description = visitInfo['description'],
image = visitInfo['image'],
- date = parse_datetime(visitInfo['dateCreation'])
+ date = parse_datetime(visitInfo['dateCreation']),
)
populateSlide(json.loads(visitInfo['steps']), book)
@@ -62,27 +65,44 @@
Slide.objects.update_or_create(
book=book,
- idStop=step['stop'],
+ id_stop=step['stop'],
defaults={
'description' : description,
'date' : parse_datetime(str(datetime.strptime(step['DATE'] + " " + step['TIME'], "%d/%m/%Y %H:%M:%S")))
}
)
-
-class AmmicoView(APIView):
- permission_classes = (AllowAny,)
+
+@api_view(('GET',))
+def api_root(request, format=None):
+ return Response({
+ 'books': reverse('books', request=request, format=format),
+ 'slides': reverse('slides', request=request, format=format)
+ })
- def get(self, request):
- key = ''
- if ('k' in request.GET):
- payload = jwt.decode(request.GET['k'], AUTH_JAMESPOT, algorithms=['HS256'])
- if (('email' and 'idUser') in payload):
- user, _ = User.objects.get_or_create(email = payload['email'], idUser = payload['idUser'])
- populateVisit(user)
- token, _ = Token.objects.get_or_create(user=user)
- key = str(token.key)
-
- return render(request, 'index.html', {'token': key})
+class AmmicoView(View):
+ def get(self, request, idExpo):
+ if (idExpo and Exposition.objects.filter(id=idExpo).exists()):
+ key = ''
+ if ('k' in request.GET):
+ payload = jwt.decode(request.GET['k'], settings.AUTH_JAMESPOT, algorithms=['HS256'])
+ print(payload)
+ if (('email' and 'idUser') in payload):
+ print('here !');
+ user, _ = User.objects.get_or_create(email = payload['email'], idUser = payload['idUser'])
+ populateVisit(user, idExpo)
+ token, _ = Token.objects.get_or_create(user=user)
+ key = str(token.key)
+ print(reverse_lazy('ammico:api-root'))
+ context = {
+ 'token': key,
+ 'idExpo': idExpo,
+ 'ammicoUrl': request.build_absolute_uri(reverse('ammico:api-root')),
+ 'searchUrl': settings.URL_EXALEAD
+ }
+ return render(request, 'indexAmmico.html', {'context': context})
+ else:
+ expositions = Exposition.objects.all()
+ return render(request, 'index.html', {'expositions' : expositions})
class PublicBooks(APIView):
@@ -98,6 +118,8 @@
Return a list of all Books.
"""
books = Book.objects.filter(public=True)
+ if 'idExpo' in request.GET:
+ books = books.filter(exposition = request.GET['idExpo'])
serializer = BookSerializer(books, many=True)
return Response(serializer.data)
@@ -114,6 +136,8 @@
Return a list of all Books.
"""
books = Book.objects.filter(user = request.user.id)
+ if 'idExpo' in request.GET:
+ books = books.filter(exposition = request.GET['idExpo'])
serializer = BookSerializer(books, many=True)
return Response(serializer.data)
@@ -122,8 +146,12 @@
Add a Book
"""
+ if ('idExpo' not in request.GET):
+ return Response("please specify a correct idExpo as a get parameter", status=status.HTTP_400_BAD_REQUEST)
+
DEFAULTS = {
"user":request.user.id,
+ "exposition": request.GET['idExpo']
}
if ('idParent' in request.data):
@@ -133,7 +161,7 @@
return Response(status=status.HTTP_400_BAD_REQUEST)
new_book = deepcopy(book)
new_book.title = request.data['title']
- new_book.idArticle = None
+ new_book.id_article = None
new_book.parent_visit = book
new_book.id = None
new_book.save()
@@ -182,7 +210,7 @@
except Book.DoesNotExist:
return Response(status=status.HTTP_204_NO_CONTENT)
- if (book.idArticle):
+ if (book.id_article):
return Response(status=status.HTTP_403_FORBIDDEN)
serializer = BookSerializer(book, data=request.data)
@@ -200,7 +228,7 @@
except Book.DoesNotExist:
return Response(status=status.HTTP_404_NOT_FOUND)
- if (book.idArticle):
+ if (book.id_article):
return Response(status=status.HTTP_403_FORBIDDEN)
book.delete()
@@ -236,7 +264,7 @@
except Book.DoesNotExist:
return Response(status=status.HTTP_204_NO_CONTENT)
- if (book.idArticle):
+ if (book.id_article):
return Response(status=status.HTTP_403_FORBIDDEN)
book.set_slide_order(request.data['order'])
@@ -275,7 +303,7 @@
book = Book.objects.get(user = request.user.id, id=request.data['book'])
except Book.DoesNotExist:
return Response(status=status.HTTP_204_NO_CONTENT)
- if (book.idArticle):
+ if (book.id_article):
return Response(status=status.HTTP_403_FORBIDDEN)
serializer = SlideSerializer(data=request.data)
@@ -313,8 +341,9 @@
except Slide.DoesNotExist:
return HttpResponse(status=status.HTTP_204_NO_CONTENT)
- if (slide.book.idArticle):
- return Response(status=status.HTTP_403_FORBIDDEN)
+ if (slide.book.id_article):
+ slide.favorite=request.data['favorite']
+ return Response(status=status.HTTP_200_OK)
serializer = SlideSerializer(slide, data=request.data)
if serializer.is_valid():
serializer.save()
@@ -330,7 +359,7 @@
except Slide.DoesNotExist:
return Response(status=status.HTTP_404_NOT_FOUND)
- if (slide.book.idArticle):
+ if (slide.book.id_article):
return Response(status=status.HTTP_403_FORBIDDEN)
slide.delete()