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') |
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 |