src/p4l/api/serializers.py
author cavaliet
Tue, 03 Sep 2013 15:23:43 +0200
changeset 23 cd4055479ba3
parent 16 19fe06edb58d
child 47 b07f8d11f2b8
permissions -rw-r--r--
enhance label sparql request
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
16
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
     1
# -*- coding: utf-8 -*-
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
     2
'''
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
     3
Created on Sep 2, 2013
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
     4
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
     5
@author: ymh
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
     6
'''
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
     7
from p4l.models import (Record, Title, Issn, Isbn, DocumentCode, Abstract, 
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
     8
    AddedTitle, TitleMainDocument, Imprint, Collation, VolumeIssue, Periodical, 
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
     9
    Meeting, SubjectMeeting, Serie, Url)
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
    10
from rest_framework import serializers
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
    11
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
    12
class BaseTitleSerializer(serializers.ModelSerializer):
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
    13
    class Meta:
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
    14
        fields = ('title','lang')
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
    15
    
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
    16
class TitleSerializer(BaseTitleSerializer):    
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
    17
    class Meta(BaseTitleSerializer.Meta):
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
    18
        model = Title
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
    19
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
    20
class AddedTitleSerializer(BaseTitleSerializer):    
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
    21
    class Meta(BaseTitleSerializer.Meta):
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
    22
        model = AddedTitle
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
    23
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
    24
class TitleMainDocumentSerializer(BaseTitleSerializer):    
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
    25
    class Meta(BaseTitleSerializer.Meta):
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
    26
        model = TitleMainDocument
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
    27
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
    28
class IssnSerializer(serializers.ModelSerializer):
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
    29
    class Meta:
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
    30
        model = Issn
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
    31
        fields = ('issn','lang')
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
    32
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
    33
class IsbnSerializer(serializers.ModelSerializer):
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
    34
    class Meta:
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
    35
        model = Isbn
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
    36
        fields = ('isbn','lang')
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
    37
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
    38
class DocumentCodeSerializer(serializers.ModelSerializer):
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
    39
    class Meta:
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
    40
        model = DocumentCode
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
    41
        fields = ('documentCode','lang')
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
    42
        
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
    43
class AbstractSerializer(serializers.ModelSerializer):
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
    44
    class Meta:
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
    45
        model = Abstract
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
    46
        fields = ('abstract', 'lang')
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
    47
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
    48
class ImprintSerializer(serializers.ModelSerializer):
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
    49
    class Meta:
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
    50
        model = Imprint
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
    51
        fields = ('imprintCity','publisher', 'imprintDate', 'lang')
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
    52
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
    53
class CollationSerializer(serializers.ModelSerializer):
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
    54
    class Meta:
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
    55
        model = Collation
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
    56
        fields = ('collation', 'lang')
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
    57
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
    58
class VolumeIssueSerializer(serializers.ModelSerializer):
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
    59
    class Meta:
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
    60
        model = VolumeIssue
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
    61
        fields = ('volume', 'number', 'lang')
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
    62
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
    63
class PeriodicalSerializer(serializers.ModelSerializer):
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
    64
    class Meta:
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
    65
        model = Periodical
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
    66
        fields = ('label', 'lang')
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
    67
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
    68
class MeetingSerializer(serializers.ModelSerializer):
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
    69
    class Meta:
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
    70
        model = Meeting
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
    71
        fields = ('label','meetingNumber', 'meetingPlace','meetingDate', 'meetingYear', 'lang')
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
    72
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
    73
class SubjectMeetingSerializer(serializers.ModelSerializer):
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
    74
    class Meta:
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
    75
        model = SubjectMeeting
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
    76
        fields = ('label','meetingNumber', 'meetingPlace','meetingDate', 'meetingYear')
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
    77
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
    78
class SerieSerializer(serializers.ModelSerializer):
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
    79
    class Meta:
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
    80
        model = Serie
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
    81
        fields = ('title', 'volume', 'lang')
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
    82
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
    83
class UrlSerializer(serializers.ModelSerializer):
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
    84
    class Meta:
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
    85
        model = Url
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
    86
        fields = ('address', 'display', 'accessLevel')
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
    87
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
    88
class RecordSerializer(serializers.ModelSerializer):
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
    89
    '''
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
    90
    Serializer for record
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
    91
    '''
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
    92
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
    93
    language = serializers.SlugRelatedField(read_only=False, slug_field='uri') 
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
    94
    other_languages = serializers.SlugRelatedField(many=True, read_only=False, slug_field='uri')
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
    95
    subjects = serializers.SlugRelatedField(many=True, read_only=False, slug_field='uri')
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
    96
    themes = serializers.SlugRelatedField(many=True, read_only=False, slug_field='uri')
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
    97
    countries = serializers.SlugRelatedField(many=True, read_only=False, slug_field='uri')
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
    98
    projectNames = serializers.SlugRelatedField(many=True, read_only=False, slug_field='uri')
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
    99
    subjectCorporateBodies = serializers.SlugRelatedField(many=True, read_only=False, slug_field='uri') 
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
   100
    corporateAuthors = serializers.SlugRelatedField(many=True, read_only=False, slug_field='uri')
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
   101
    titles = TitleSerializer(many=True, read_only=False)
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
   102
    addedTitles = AddedTitleSerializer(many=True, read_only=False)
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
   103
    issns = IssnSerializer(many=True, read_only=False)
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
   104
    isbns = IsbnSerializer(many=True, read_only=False)
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
   105
    documentCodes = DocumentCodeSerializer(many=True, read_only=False)
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
   106
    abstracts = AbstractSerializer(many=True, read_only=False)
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
   107
    titlesMainDocument = TitleMainDocumentSerializer(many=True, read_only=False)
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
   108
    imprints = ImprintSerializer(many=True, read_only=False)
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
   109
    collations = CollationSerializer(many=True, read_only=False)    
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
   110
    volumeIssues = VolumeIssueSerializer(many=True, read_only=False)
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
   111
    periodicals = PeriodicalSerializer(many=True, read_only=False)
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
   112
    meetings = MeetingSerializer(many=True, read_only=False)
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
   113
    subjectMeetings = SubjectMeetingSerializer(many=True, read_only=False)
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
   114
    series = SerieSerializer(many=True, read_only=False)
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
   115
    authors = serializers.SlugRelatedField(many=True, read_only=False, slug_field="name")
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
   116
    subjectPersons = serializers.SlugRelatedField(many=True, read_only=False, slug_field="name")
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
   117
    urls = UrlSerializer(many=True, read_only=False)
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
   118
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
   119
    class Meta:
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
   120
        model = Record
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
   121
        depth = 1
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
   122
        read_only_fields = ('identifier', 'uri')
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
   123
        fields = ("identifier", "uri", "language", "otherLanguages", "notes",
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
   124
                  "editionStatement", "recordType","isDocumentPart",
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
   125
                  "isMultilingual","subjects", "themes", "countries",
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
   126
                  "projectNames", "subjectCorporateBodies", "corporateAuthors",
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
   127
                  "titles", "issns", "isbns", "documentCodes", "abstracts",
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
   128
                  "addedTitles", "titlesMainDocument", "imprints",
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
   129
                  "collations", "volumeIssues", "periodicals", "meetings",
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
   130
                  "subjectMeetings", "series", "authors", "subjectPersons",
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
   131
                  "urls")        
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
   132
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
   133
19fe06edb58d Add api for records
ymh <ymh.work@gmail.com>
parents:
diff changeset
   134