add idInventory for slides saved from a research and not coming from Jamespot
authorrougeronj
Tue, 31 Mar 2015 12:21:22 +0200
changeset 45 19f3f0a7fbd7
parent 44 5eab9718182b
child 46 f909e7f2917d
add idInventory for slides saved from a research and not coming from Jamespot
server/ammico/models.py
server/ammico/serializers.py
--- a/server/ammico/models.py	Fri Mar 27 16:33:30 2015 +0100
+++ b/server/ammico/models.py	Tue Mar 31 12:21:22 2015 +0200
@@ -1,3 +1,5 @@
+import datetime
+
 from django.contrib.auth.models import User
 from django.db import models
 from taggit.managers import TaggableManager
@@ -24,12 +26,13 @@
 
 class Slide(models.Model):
     book = models.ForeignKey(Book, related_name = "slides")
-    idStop = models.CharField(max_length=512, blank=False)
+    idStop = models.CharField(max_length=512, blank=True)
+    idInventory = models.CharField(max_length=512, blank=True)
     title = models.CharField(max_length=512, blank=True)
     description = models.CharField(max_length=1024, blank=True)
     comment = models.CharField(max_length=2048, blank=True)
     image = models.URLField(max_length=2048, blank=True)
-    date = models.DateTimeField(blank=True)
+    date = models.DateTimeField(default=datetime.datetime.now)
     favorite = models.BooleanField(default=False, db_index=True)
     
     def __str__(self):
--- a/server/ammico/serializers.py	Fri Mar 27 16:33:30 2015 +0100
+++ b/server/ammico/serializers.py	Tue Mar 31 12:21:22 2015 +0200
@@ -1,26 +1,58 @@
+import json
+
+import requests
 from rest_framework import serializers
 
 from ammico.models import AmmicoUser, Book, Slide
 from ammico.utils import fetchJson
+from config import URL_EXALEAD
 from config import URL_JAMESPOT
 
 
 class BookSerializer(serializers.ModelSerializer):
-
+    
     class Meta:
         model = Book
         fields = ('id', 'idArticle', 'title', 'description', 'image', 'date')
         
 class SlideSerializer(serializers.ModelSerializer):
     details = serializers.SerializerMethodField('getStopInfo')
+    index = serializers.SerializerMethodField('getOrder')
     
     def getStopInfo(self, slide):
-        stopList = fetchJson(URL_JAMESPOT + '&f=list&o=article&type=stop&itemFormat=article')
-        #print (stopList) 
-        for stops in stopList:
-            if (slide.idStop == stops['idStop']):
-                return stops 
+        if (slide.idInventory != ""):
+            return extractFromMIMO(slide)
+        else:
+            return extractFromJameSpot(slide)
+        
+    def getOrder(self, slide):
+        return slide.book.get_slide_order().index(slide.id)
 
     class Meta:
         model = Slide
-        fields = ('id', 'book', 'idStop', 'title', 'description', 'comment', 'image', 'date', 'favorite', 'details')
\ No newline at end of file
+        fields = ('id', 'index', 'book', 'idStop', 'idInventory', 'title', 'description', 'comment', 'image', 'date', 'favorite', 'details')
+        
+
+def extractFromMIMO(slide):
+    details = {}
+    params = {'of': 'json', 'q': 'record_inventorynumber:' + slide.idInventory} 
+    data = requests.get(URL_EXALEAD, params=params)
+    results = json.loads(data.content.decode('utf-8'))
+    if (len(results['hits']) == 1):
+        for i in results['hits'][0]['metas']:
+            if('images' not in i):
+                details[i['name']] = i['value']
+            else:
+                details['images'] = i['images'][0]['value']           
+        details['title'] = details.pop('name')
+    return details
+
+def extractFromJameSpot(slide):
+    details={}
+    stopList = fetchJson(URL_JAMESPOT + '&f=list&o=article&type=stop&itemFormat=article')
+    for stops in stopList:
+        if (slide.idStop == stops['idStop']):
+            details = stops
+            details['images'] = details.pop('firstImg')
+            details['description'] = details.pop('captionImg')
+    return details
\ No newline at end of file