server/ammico/serializers.py
author rougeronj
Tue, 31 Mar 2015 12:21:22 +0200
changeset 45 19f3f0a7fbd7
parent 38 96a7d3e4d073
child 63 bd7bcfc86232
permissions -rw-r--r--
add idInventory for slides saved from a research and not coming from Jamespot
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
45
19f3f0a7fbd7 add idInventory for slides saved from a research and not coming from Jamespot
rougeronj
parents: 38
diff changeset
     1
import json
19f3f0a7fbd7 add idInventory for slides saved from a research and not coming from Jamespot
rougeronj
parents: 38
diff changeset
     2
19f3f0a7fbd7 add idInventory for slides saved from a research and not coming from Jamespot
rougeronj
parents: 38
diff changeset
     3
import requests
13
08f34bbc70ee set up django rest framework
rougeronj
parents:
diff changeset
     4
from rest_framework import serializers
22
609fa711b324 add URL_JAMESPOT in settings - add requirements.txt to build the virtual env
rougeronj
parents: 20
diff changeset
     5
38
96a7d3e4d073 use URL in settings
rougeronj
parents: 22
diff changeset
     6
from ammico.models import AmmicoUser, Book, Slide
18
4d3f67ddbe72 return Stop information fetch from jamestop api in the Slide info - id to idBook and idSlide to avoid confusion
rougeronj
parents: 14
diff changeset
     7
from ammico.utils import fetchJson
45
19f3f0a7fbd7 add idInventory for slides saved from a research and not coming from Jamespot
rougeronj
parents: 38
diff changeset
     8
from config import URL_EXALEAD
38
96a7d3e4d073 use URL in settings
rougeronj
parents: 22
diff changeset
     9
from config import URL_JAMESPOT
22
609fa711b324 add URL_JAMESPOT in settings - add requirements.txt to build the virtual env
rougeronj
parents: 20
diff changeset
    10
13
08f34bbc70ee set up django rest framework
rougeronj
parents:
diff changeset
    11
08f34bbc70ee set up django rest framework
rougeronj
parents:
diff changeset
    12
class BookSerializer(serializers.ModelSerializer):
45
19f3f0a7fbd7 add idInventory for slides saved from a research and not coming from Jamespot
rougeronj
parents: 38
diff changeset
    13
    
13
08f34bbc70ee set up django rest framework
rougeronj
parents:
diff changeset
    14
    class Meta:
08f34bbc70ee set up django rest framework
rougeronj
parents:
diff changeset
    15
        model = Book
08f34bbc70ee set up django rest framework
rougeronj
parents:
diff changeset
    16
        fields = ('id', 'idArticle', 'title', 'description', 'image', 'date')
08f34bbc70ee set up django rest framework
rougeronj
parents:
diff changeset
    17
        
08f34bbc70ee set up django rest framework
rougeronj
parents:
diff changeset
    18
class SlideSerializer(serializers.ModelSerializer):
18
4d3f67ddbe72 return Stop information fetch from jamestop api in the Slide info - id to idBook and idSlide to avoid confusion
rougeronj
parents: 14
diff changeset
    19
    details = serializers.SerializerMethodField('getStopInfo')
45
19f3f0a7fbd7 add idInventory for slides saved from a research and not coming from Jamespot
rougeronj
parents: 38
diff changeset
    20
    index = serializers.SerializerMethodField('getOrder')
18
4d3f67ddbe72 return Stop information fetch from jamestop api in the Slide info - id to idBook and idSlide to avoid confusion
rougeronj
parents: 14
diff changeset
    21
    
4d3f67ddbe72 return Stop information fetch from jamestop api in the Slide info - id to idBook and idSlide to avoid confusion
rougeronj
parents: 14
diff changeset
    22
    def getStopInfo(self, slide):
45
19f3f0a7fbd7 add idInventory for slides saved from a research and not coming from Jamespot
rougeronj
parents: 38
diff changeset
    23
        if (slide.idInventory != ""):
19f3f0a7fbd7 add idInventory for slides saved from a research and not coming from Jamespot
rougeronj
parents: 38
diff changeset
    24
            return extractFromMIMO(slide)
19f3f0a7fbd7 add idInventory for slides saved from a research and not coming from Jamespot
rougeronj
parents: 38
diff changeset
    25
        else:
19f3f0a7fbd7 add idInventory for slides saved from a research and not coming from Jamespot
rougeronj
parents: 38
diff changeset
    26
            return extractFromJameSpot(slide)
19f3f0a7fbd7 add idInventory for slides saved from a research and not coming from Jamespot
rougeronj
parents: 38
diff changeset
    27
        
19f3f0a7fbd7 add idInventory for slides saved from a research and not coming from Jamespot
rougeronj
parents: 38
diff changeset
    28
    def getOrder(self, slide):
19f3f0a7fbd7 add idInventory for slides saved from a research and not coming from Jamespot
rougeronj
parents: 38
diff changeset
    29
        return slide.book.get_slide_order().index(slide.id)
13
08f34bbc70ee set up django rest framework
rougeronj
parents:
diff changeset
    30
08f34bbc70ee set up django rest framework
rougeronj
parents:
diff changeset
    31
    class Meta:
08f34bbc70ee set up django rest framework
rougeronj
parents:
diff changeset
    32
        model = Slide
45
19f3f0a7fbd7 add idInventory for slides saved from a research and not coming from Jamespot
rougeronj
parents: 38
diff changeset
    33
        fields = ('id', 'index', 'book', 'idStop', 'idInventory', 'title', 'description', 'comment', 'image', 'date', 'favorite', 'details')
19f3f0a7fbd7 add idInventory for slides saved from a research and not coming from Jamespot
rougeronj
parents: 38
diff changeset
    34
        
19f3f0a7fbd7 add idInventory for slides saved from a research and not coming from Jamespot
rougeronj
parents: 38
diff changeset
    35
19f3f0a7fbd7 add idInventory for slides saved from a research and not coming from Jamespot
rougeronj
parents: 38
diff changeset
    36
def extractFromMIMO(slide):
19f3f0a7fbd7 add idInventory for slides saved from a research and not coming from Jamespot
rougeronj
parents: 38
diff changeset
    37
    details = {}
19f3f0a7fbd7 add idInventory for slides saved from a research and not coming from Jamespot
rougeronj
parents: 38
diff changeset
    38
    params = {'of': 'json', 'q': 'record_inventorynumber:' + slide.idInventory} 
19f3f0a7fbd7 add idInventory for slides saved from a research and not coming from Jamespot
rougeronj
parents: 38
diff changeset
    39
    data = requests.get(URL_EXALEAD, params=params)
19f3f0a7fbd7 add idInventory for slides saved from a research and not coming from Jamespot
rougeronj
parents: 38
diff changeset
    40
    results = json.loads(data.content.decode('utf-8'))
19f3f0a7fbd7 add idInventory for slides saved from a research and not coming from Jamespot
rougeronj
parents: 38
diff changeset
    41
    if (len(results['hits']) == 1):
19f3f0a7fbd7 add idInventory for slides saved from a research and not coming from Jamespot
rougeronj
parents: 38
diff changeset
    42
        for i in results['hits'][0]['metas']:
19f3f0a7fbd7 add idInventory for slides saved from a research and not coming from Jamespot
rougeronj
parents: 38
diff changeset
    43
            if('images' not in i):
19f3f0a7fbd7 add idInventory for slides saved from a research and not coming from Jamespot
rougeronj
parents: 38
diff changeset
    44
                details[i['name']] = i['value']
19f3f0a7fbd7 add idInventory for slides saved from a research and not coming from Jamespot
rougeronj
parents: 38
diff changeset
    45
            else:
19f3f0a7fbd7 add idInventory for slides saved from a research and not coming from Jamespot
rougeronj
parents: 38
diff changeset
    46
                details['images'] = i['images'][0]['value']           
19f3f0a7fbd7 add idInventory for slides saved from a research and not coming from Jamespot
rougeronj
parents: 38
diff changeset
    47
        details['title'] = details.pop('name')
19f3f0a7fbd7 add idInventory for slides saved from a research and not coming from Jamespot
rougeronj
parents: 38
diff changeset
    48
    return details
19f3f0a7fbd7 add idInventory for slides saved from a research and not coming from Jamespot
rougeronj
parents: 38
diff changeset
    49
19f3f0a7fbd7 add idInventory for slides saved from a research and not coming from Jamespot
rougeronj
parents: 38
diff changeset
    50
def extractFromJameSpot(slide):
19f3f0a7fbd7 add idInventory for slides saved from a research and not coming from Jamespot
rougeronj
parents: 38
diff changeset
    51
    details={}
19f3f0a7fbd7 add idInventory for slides saved from a research and not coming from Jamespot
rougeronj
parents: 38
diff changeset
    52
    stopList = fetchJson(URL_JAMESPOT + '&f=list&o=article&type=stop&itemFormat=article')
19f3f0a7fbd7 add idInventory for slides saved from a research and not coming from Jamespot
rougeronj
parents: 38
diff changeset
    53
    for stops in stopList:
19f3f0a7fbd7 add idInventory for slides saved from a research and not coming from Jamespot
rougeronj
parents: 38
diff changeset
    54
        if (slide.idStop == stops['idStop']):
19f3f0a7fbd7 add idInventory for slides saved from a research and not coming from Jamespot
rougeronj
parents: 38
diff changeset
    55
            details = stops
19f3f0a7fbd7 add idInventory for slides saved from a research and not coming from Jamespot
rougeronj
parents: 38
diff changeset
    56
            details['images'] = details.pop('firstImg')
19f3f0a7fbd7 add idInventory for slides saved from a research and not coming from Jamespot
rougeronj
parents: 38
diff changeset
    57
            details['description'] = details.pop('captionImg')
19f3f0a7fbd7 add idInventory for slides saved from a research and not coming from Jamespot
rougeronj
parents: 38
diff changeset
    58
    return details