src/p4l/api/serializers.py
changeset 47 b07f8d11f2b8
parent 16 19fe06edb58d
child 48 e2ccb0093452
equal deleted inserted replaced
46:1cee12d1d400 47:b07f8d11f2b8
     2 '''
     2 '''
     3 Created on Sep 2, 2013
     3 Created on Sep 2, 2013
     4 
     4 
     5 @author: ymh
     5 @author: ymh
     6 '''
     6 '''
     7 from p4l.models import (Record, Title, Issn, Isbn, DocumentCode, Abstract, 
     7 from django.core.exceptions import ValidationError
     8     AddedTitle, TitleMainDocument, Imprint, Collation, VolumeIssue, Periodical, 
     8 from p4l.models import (Record, Title, Issn, Isbn, DocumentCode, Abstract,
       
     9     AddedTitle, TitleMainDocument, Imprint, Collation, VolumeIssue, Periodical,
     9     Meeting, SubjectMeeting, Serie, Url)
    10     Meeting, SubjectMeeting, Serie, Url)
    10 from rest_framework import serializers
    11 from rest_framework import serializers
       
    12 import logging
       
    13 
       
    14 logger = logging.getLogger(__name__)
       
    15 
       
    16 class ThesaurusSerializer(serializers.SlugRelatedField):
       
    17     
       
    18     def __init__(self, *args, **kwargs):
       
    19         kwargs.update({                       
       
    20             'read_only': False,
       
    21         })
       
    22         serializers.SlugRelatedField.__init__(self, *args, **kwargs)
       
    23         
       
    24     def from_native(self, data):
       
    25         if self.queryset is None:
       
    26             raise Exception('Writable related fields must include a `queryset` argument')
       
    27         try:
       
    28             res, _ = self.queryset.get_or_create(**{self.slug_field: data})
       
    29             return res
       
    30         except (TypeError, ValueError):
       
    31             msg = self.error_messages['invalid']
       
    32             raise ValidationError(msg)
       
    33 
    11 
    34 
    12 class BaseTitleSerializer(serializers.ModelSerializer):
    35 class BaseTitleSerializer(serializers.ModelSerializer):
    13     class Meta:
    36     class Meta:
    14         fields = ('title','lang')
    37         fields = ('title', 'lang')
    15     
    38     
    16 class TitleSerializer(BaseTitleSerializer):    
    39 class TitleSerializer(BaseTitleSerializer):    
    17     class Meta(BaseTitleSerializer.Meta):
    40     class Meta(BaseTitleSerializer.Meta):
    18         model = Title
    41         model = Title
    19 
    42 
    26         model = TitleMainDocument
    49         model = TitleMainDocument
    27 
    50 
    28 class IssnSerializer(serializers.ModelSerializer):
    51 class IssnSerializer(serializers.ModelSerializer):
    29     class Meta:
    52     class Meta:
    30         model = Issn
    53         model = Issn
    31         fields = ('issn','lang')
    54         fields = ('issn', 'lang')
    32 
    55 
    33 class IsbnSerializer(serializers.ModelSerializer):
    56 class IsbnSerializer(serializers.ModelSerializer):
    34     class Meta:
    57     class Meta:
    35         model = Isbn
    58         model = Isbn
    36         fields = ('isbn','lang')
    59         fields = ('isbn', 'lang')
    37 
    60 
    38 class DocumentCodeSerializer(serializers.ModelSerializer):
    61 class DocumentCodeSerializer(serializers.ModelSerializer):
    39     class Meta:
    62     class Meta:
    40         model = DocumentCode
    63         model = DocumentCode
    41         fields = ('documentCode','lang')
    64         fields = ('documentCode', 'lang')
    42         
    65         
    43 class AbstractSerializer(serializers.ModelSerializer):
    66 class AbstractSerializer(serializers.ModelSerializer):
    44     class Meta:
    67     class Meta:
    45         model = Abstract
    68         model = Abstract
    46         fields = ('abstract', 'lang')
    69         fields = ('abstract', 'lang')
    47 
    70 
    48 class ImprintSerializer(serializers.ModelSerializer):
    71 class ImprintSerializer(serializers.ModelSerializer):
    49     class Meta:
    72     class Meta:
    50         model = Imprint
    73         model = Imprint
    51         fields = ('imprintCity','publisher', 'imprintDate', 'lang')
    74         fields = ('imprintCity', 'publisher', 'imprintDate', 'lang')
    52 
    75 
    53 class CollationSerializer(serializers.ModelSerializer):
    76 class CollationSerializer(serializers.ModelSerializer):
    54     class Meta:
    77     class Meta:
    55         model = Collation
    78         model = Collation
    56         fields = ('collation', 'lang')
    79         fields = ('collation', 'lang')
    66         fields = ('label', 'lang')
    89         fields = ('label', 'lang')
    67 
    90 
    68 class MeetingSerializer(serializers.ModelSerializer):
    91 class MeetingSerializer(serializers.ModelSerializer):
    69     class Meta:
    92     class Meta:
    70         model = Meeting
    93         model = Meeting
    71         fields = ('label','meetingNumber', 'meetingPlace','meetingDate', 'meetingYear', 'lang')
    94         fields = ('label', 'meetingNumber', 'meetingPlace', 'meetingDate', 'meetingYear', 'lang')
    72 
    95 
    73 class SubjectMeetingSerializer(serializers.ModelSerializer):
    96 class SubjectMeetingSerializer(serializers.ModelSerializer):
    74     class Meta:
    97     class Meta:
    75         model = SubjectMeeting
    98         model = SubjectMeeting
    76         fields = ('label','meetingNumber', 'meetingPlace','meetingDate', 'meetingYear')
    99         fields = ('label', 'meetingNumber', 'meetingPlace', 'meetingDate', 'meetingYear')
    77 
   100 
    78 class SerieSerializer(serializers.ModelSerializer):
   101 class SerieSerializer(serializers.ModelSerializer):
    79     class Meta:
   102     class Meta:
    80         model = Serie
   103         model = Serie
    81         fields = ('title', 'volume', 'lang')
   104         fields = ('title', 'volume', 'lang')
    83 class UrlSerializer(serializers.ModelSerializer):
   106 class UrlSerializer(serializers.ModelSerializer):
    84     class Meta:
   107     class Meta:
    85         model = Url
   108         model = Url
    86         fields = ('address', 'display', 'accessLevel')
   109         fields = ('address', 'display', 'accessLevel')
    87 
   110 
       
   111 
    88 class RecordSerializer(serializers.ModelSerializer):
   112 class RecordSerializer(serializers.ModelSerializer):
    89     '''
   113     '''
    90     Serializer for record
   114     Serializer for record
    91     '''
   115     '''
    92 
   116     language = ThesaurusSerializer(many=False, slug_field='uri') 
    93     language = serializers.SlugRelatedField(read_only=False, slug_field='uri') 
   117     otherLanguages = ThesaurusSerializer(many=True, slug_field='uri')
    94     other_languages = serializers.SlugRelatedField(many=True, read_only=False, slug_field='uri')
   118     subjects = ThesaurusSerializer(many=True, slug_field='uri')
    95     subjects = serializers.SlugRelatedField(many=True, read_only=False, slug_field='uri')
   119     themes = ThesaurusSerializer(many=True, slug_field='uri')
    96     themes = serializers.SlugRelatedField(many=True, read_only=False, slug_field='uri')
   120     countries = ThesaurusSerializer(many=True, slug_field='uri')
    97     countries = serializers.SlugRelatedField(many=True, read_only=False, slug_field='uri')
   121     projectNames = ThesaurusSerializer(many=True, slug_field='uri')
    98     projectNames = serializers.SlugRelatedField(many=True, read_only=False, slug_field='uri')
   122     subjectCorporateBodies = ThesaurusSerializer(many=True, slug_field='uri') 
    99     subjectCorporateBodies = serializers.SlugRelatedField(many=True, read_only=False, slug_field='uri') 
   123     corporateAuthors = ThesaurusSerializer(many=True, slug_field='uri')
   100     corporateAuthors = serializers.SlugRelatedField(many=True, read_only=False, slug_field='uri')
   124 #    titles = TitleSerializer(many=True, read_only=False)
   101     titles = TitleSerializer(many=True, read_only=False)
   125 #    addedTitles = AddedTitleSerializer(many=True, read_only=False)
   102     addedTitles = AddedTitleSerializer(many=True, read_only=False)
   126 #    issns = IssnSerializer(many=True, read_only=False)
   103     issns = IssnSerializer(many=True, read_only=False)
   127 #    isbns = IsbnSerializer(many=True, read_only=False)
   104     isbns = IsbnSerializer(many=True, read_only=False)
   128 #    documentCodes = DocumentCodeSerializer(many=True, read_only=False)
   105     documentCodes = DocumentCodeSerializer(many=True, read_only=False)
   129 #    abstracts = AbstractSerializer(many=True, read_only=False)
   106     abstracts = AbstractSerializer(many=True, read_only=False)
   130 #    titlesMainDocument = TitleMainDocumentSerializer(many=True, read_only=False)
   107     titlesMainDocument = TitleMainDocumentSerializer(many=True, read_only=False)
   131 #    imprints = ImprintSerializer(many=True, read_only=False)
   108     imprints = ImprintSerializer(many=True, read_only=False)
   132 #    collations = CollationSerializer(many=True, read_only=False)    
   109     collations = CollationSerializer(many=True, read_only=False)    
   133 #    volumeIssues = VolumeIssueSerializer(many=True, read_only=False)
   110     volumeIssues = VolumeIssueSerializer(many=True, read_only=False)
   134 #    periodicals = PeriodicalSerializer(many=True, read_only=False)
   111     periodicals = PeriodicalSerializer(many=True, read_only=False)
   135 #    meetings = MeetingSerializer(many=True, read_only=False)
   112     meetings = MeetingSerializer(many=True, read_only=False)
   136 #    subjectMeetings = SubjectMeetingSerializer(many=True, read_only=False)
   113     subjectMeetings = SubjectMeetingSerializer(many=True, read_only=False)
   137 #    series = SerieSerializer(many=True, read_only=False)
   114     series = SerieSerializer(many=True, read_only=False)
   138 #    authors = serializers.SlugRelatedField(many=True, read_only=False, slug_field="name")
   115     authors = serializers.SlugRelatedField(many=True, read_only=False, slug_field="name")
   139 #    subjectPersons = serializers.SlugRelatedField(many=True, read_only=False, slug_field="name")
   116     subjectPersons = serializers.SlugRelatedField(many=True, read_only=False, slug_field="name")
   140 #    urls = UrlSerializer(many=True, read_only=False)
   117     urls = UrlSerializer(many=True, read_only=False)
       
   118 
   141 
   119     class Meta:
   142     class Meta:
   120         model = Record
   143         model = Record
   121         depth = 1
   144         depth = 1
   122         read_only_fields = ('identifier', 'uri')
   145         read_only_fields = ('identifier', 'uri')
   123         fields = ("identifier", "uri", "language", "otherLanguages", "notes",
   146         fields = ("identifier", "uri", "subjects", "notes", "otherLanguages",
   124                   "editionStatement", "recordType","isDocumentPart",
   147                   "language", "editionStatement", "recordType", "isDocumentPart",
   125                   "isMultilingual","subjects", "themes", "countries",
   148                   "isMultilingual", "themes", "countries", "projectNames", 
   126                   "projectNames", "subjectCorporateBodies", "corporateAuthors",
   149                   "subjectCorporateBodies", "corporateAuthors")
   127                   "titles", "issns", "isbns", "documentCodes", "abstracts",
   150 #         fields = (
   128                   "addedTitles", "titlesMainDocument", "imprints",
   151 #                       "editionStatement", "recordType","isDocumentPart",
   129                   "collations", "volumeIssues", "periodicals", "meetings",
   152 #                   "isMultilingual","subjects", "themes", "countries",
   130                   "subjectMeetings", "series", "authors", "subjectPersons",
   153 #                   "projectNames", "subjectCorporateBodies", "corporateAuthors",
   131                   "urls")        
   154 #                   "titles", "issns", "isbns", "documentCodes", "abstracts",
       
   155 #                   "addedTitles", "titlesMainDocument", "imprints",
       
   156 #                   "collations", "volumeIssues", "periodicals", "meetings",
       
   157 #                   "subjectMeetings", "series", "authors", "subjectPersons",
       
   158 #                   "urls")        
   132 
   159 
   133 
   160 
   134     
   161