# HG changeset patch # User rougeronj # Date 1428400511 -7200 # Node ID ed2ee692ff6f6ed17bc38f4d24c74a807c58fbc2 # Parent a5dedc11ba8fce6a50aa5a276ce1ab4a18a86bbc 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. diff -r a5dedc11ba8f -r ed2ee692ff6f server/ammico/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): """ diff -r a5dedc11ba8f -r ed2ee692ff6f server/authentication/views.py --- 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