Update PopulateVisit function to get only the new visits from Jamespot.
In case the parameter "parrent_visit" is passed when creating a book, we copy all the slide corresponding to the visit being copied.
Refactor PopulateVisite to PopulateVisit.
--- a/server/ammico/views.py Tue Apr 07 11:47:15 2015 +0200
+++ b/server/ammico/views.py Tue Apr 07 11:55:11 2015 +0200
@@ -1,4 +1,5 @@
+from copy import deepcopy
from datetime import datetime
import json
@@ -20,30 +21,31 @@
#from django.contrib.auth import login, logout
User = get_user_model()
-def populateVisite(user):
- # send request with usermail to get the visites of this user and add it to the database
+def populateVisit(user):
+ # 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)
- visites = json.loads(r.content.decode('utf-8'))
+ visits = json.loads(r.content.decode('utf-8'))
- for visite in visites['VAL']:
- params = {'o' : 'article', 'f' : 'get', 'idArticle' : visite['idArticle']}
+ for visit in visits['VAL']:
+ params = {'o' : 'article', 'f' : 'get', 'idArticle' : visit['idArticle']}
r = requests.get(URL_JAMESPOT, params=params)
- visiteInfo = json.loads(r.content.decode('utf-8'))['VAL']
- book, _ = Book.objects.update_or_create(
- user=user,
- idArticle=visiteInfo['idArticle'],
- defaults={
- 'title' : visiteInfo['title'],
- 'description' : visiteInfo['description'],
- 'image' : visiteInfo['image'],
- 'date' : parse_datetime(visiteInfo['dateCreation'])
- }
- )
- populateSlide(json.loads(visiteInfo['steps']), book)
+ visitInfo = json.loads(r.content.decode('utf-8'))['VAL']
+
+
+ if (not Book.objects.filter(idArticle=visit['idArticle']).exists()):
+ book = Book.objects.create(
+ user=user,
+ idArticle=visitInfo['idArticle'],
+ title = visitInfo['title'],
+ description = visitInfo['description'],
+ image = visitInfo['image'],
+ date = parse_datetime(visitInfo['dateCreation'])
+ )
+ populateSlide(json.loads(visitInfo['steps']), book)
def populateSlide(steps, book):
for step in steps:
@@ -83,16 +85,37 @@
"""
Add a Book
"""
- print (request.user)
+
DEFAULTS = {
"user":request.user.id,
}
- request.data.update(DEFAULTS)
- serializer = BookSerializer(data=request.data)
- if serializer.is_valid():
- serializer.save()
- return Response(serializer.data, status=status.HTTP_201_CREATED)
- return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
+
+ if ('idParent' in request.data):
+ try:
+ book = Book.objects.get(id=request.data['idParent'])
+ except Book.DoesNotExist:
+ return HttpResponse(status=404)
+ new_book = deepcopy(book)
+ new_book.title = request.data['title']
+ new_book.idArticle = None
+ new_book.parent_visit = book
+ new_book.id = None
+ new_book.save()
+ for i in book.slides.all():
+ print (i)
+ new_slide = deepcopy(i)
+ new_slide.id = None
+ new_slide.book = new_book
+ new_slide.save()
+ serializer = BookSerializer(new_book)
+ return Response(serializer.data)
+ else:
+ request.data.update(DEFAULTS)
+ serializer = BookSerializer(data=request.data)
+ if serializer.is_valid():
+ serializer.save()
+ return Response(serializer.data, status=status.HTTP_201_CREATED)
+ return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
class InfoBook(APIView):
"""
--- a/server/authentication/views.py Tue Apr 07 11:47:15 2015 +0200
+++ b/server/authentication/views.py Tue Apr 07 11:55:11 2015 +0200
@@ -10,7 +10,7 @@
from rest_framework.views import APIView
from config import URL_JAMESPOT
-from ammico.views import populateVisite
+from ammico.views import populateVisit
class UserSerializer(serializers.ModelSerializer):
@@ -63,6 +63,6 @@
serializer = AuthTokenSerializer(data=request.data)
serializer.is_valid(raise_exception=True)
user = serializer.validated_data['user']
- populateVisite(user)
+ populateVisit(user)
token, created = Token.objects.get_or_create(user=user)
return Response({'token': token.key})
\ No newline at end of file