Update PopulateVisit function to get only the new visits from Jamespot.
authorrougeronj
Tue, 07 Apr 2015 11:55:11 +0200
changeset 72 ed2ee692ff6f
parent 71 a5dedc11ba8f
child 73 1aa813be49ec
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.
server/ammico/views.py
server/authentication/views.py
--- 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