--- a/src/p4l/api/serializers.py Fri Sep 06 16:39:50 2013 +0200
+++ b/src/p4l/api/serializers.py Sat Sep 07 14:41:20 2013 +0200
@@ -4,14 +4,37 @@
@author: ymh
'''
-from p4l.models import (Record, Title, Issn, Isbn, DocumentCode, Abstract,
- AddedTitle, TitleMainDocument, Imprint, Collation, VolumeIssue, Periodical,
+from django.core.exceptions import ValidationError
+from p4l.models import (Record, Title, Issn, Isbn, DocumentCode, Abstract,
+ AddedTitle, TitleMainDocument, Imprint, Collation, VolumeIssue, Periodical,
Meeting, SubjectMeeting, Serie, Url)
from rest_framework import serializers
+import logging
+
+logger = logging.getLogger(__name__)
+
+class ThesaurusSerializer(serializers.SlugRelatedField):
+
+ def __init__(self, *args, **kwargs):
+ kwargs.update({
+ 'read_only': False,
+ })
+ serializers.SlugRelatedField.__init__(self, *args, **kwargs)
+
+ def from_native(self, data):
+ if self.queryset is None:
+ raise Exception('Writable related fields must include a `queryset` argument')
+ try:
+ res, _ = self.queryset.get_or_create(**{self.slug_field: data})
+ return res
+ except (TypeError, ValueError):
+ msg = self.error_messages['invalid']
+ raise ValidationError(msg)
+
class BaseTitleSerializer(serializers.ModelSerializer):
class Meta:
- fields = ('title','lang')
+ fields = ('title', 'lang')
class TitleSerializer(BaseTitleSerializer):
class Meta(BaseTitleSerializer.Meta):
@@ -28,17 +51,17 @@
class IssnSerializer(serializers.ModelSerializer):
class Meta:
model = Issn
- fields = ('issn','lang')
+ fields = ('issn', 'lang')
class IsbnSerializer(serializers.ModelSerializer):
class Meta:
model = Isbn
- fields = ('isbn','lang')
+ fields = ('isbn', 'lang')
class DocumentCodeSerializer(serializers.ModelSerializer):
class Meta:
model = DocumentCode
- fields = ('documentCode','lang')
+ fields = ('documentCode', 'lang')
class AbstractSerializer(serializers.ModelSerializer):
class Meta:
@@ -48,7 +71,7 @@
class ImprintSerializer(serializers.ModelSerializer):
class Meta:
model = Imprint
- fields = ('imprintCity','publisher', 'imprintDate', 'lang')
+ fields = ('imprintCity', 'publisher', 'imprintDate', 'lang')
class CollationSerializer(serializers.ModelSerializer):
class Meta:
@@ -68,12 +91,12 @@
class MeetingSerializer(serializers.ModelSerializer):
class Meta:
model = Meeting
- fields = ('label','meetingNumber', 'meetingPlace','meetingDate', 'meetingYear', 'lang')
+ fields = ('label', 'meetingNumber', 'meetingPlace', 'meetingDate', 'meetingYear', 'lang')
class SubjectMeetingSerializer(serializers.ModelSerializer):
class Meta:
model = SubjectMeeting
- fields = ('label','meetingNumber', 'meetingPlace','meetingDate', 'meetingYear')
+ fields = ('label', 'meetingNumber', 'meetingPlace', 'meetingDate', 'meetingYear')
class SerieSerializer(serializers.ModelSerializer):
class Meta:
@@ -85,50 +108,54 @@
model = Url
fields = ('address', 'display', 'accessLevel')
+
class RecordSerializer(serializers.ModelSerializer):
'''
Serializer for record
'''
-
- language = serializers.SlugRelatedField(read_only=False, slug_field='uri')
- other_languages = serializers.SlugRelatedField(many=True, read_only=False, slug_field='uri')
- subjects = serializers.SlugRelatedField(many=True, read_only=False, slug_field='uri')
- themes = serializers.SlugRelatedField(many=True, read_only=False, slug_field='uri')
- countries = serializers.SlugRelatedField(many=True, read_only=False, slug_field='uri')
- projectNames = serializers.SlugRelatedField(many=True, read_only=False, slug_field='uri')
- subjectCorporateBodies = serializers.SlugRelatedField(many=True, read_only=False, slug_field='uri')
- corporateAuthors = serializers.SlugRelatedField(many=True, read_only=False, slug_field='uri')
- titles = TitleSerializer(many=True, read_only=False)
- addedTitles = AddedTitleSerializer(many=True, read_only=False)
- issns = IssnSerializer(many=True, read_only=False)
- isbns = IsbnSerializer(many=True, read_only=False)
- documentCodes = DocumentCodeSerializer(many=True, read_only=False)
- abstracts = AbstractSerializer(many=True, read_only=False)
- titlesMainDocument = TitleMainDocumentSerializer(many=True, read_only=False)
- imprints = ImprintSerializer(many=True, read_only=False)
- collations = CollationSerializer(many=True, read_only=False)
- volumeIssues = VolumeIssueSerializer(many=True, read_only=False)
- periodicals = PeriodicalSerializer(many=True, read_only=False)
- meetings = MeetingSerializer(many=True, read_only=False)
- subjectMeetings = SubjectMeetingSerializer(many=True, read_only=False)
- series = SerieSerializer(many=True, read_only=False)
- authors = serializers.SlugRelatedField(many=True, read_only=False, slug_field="name")
- subjectPersons = serializers.SlugRelatedField(many=True, read_only=False, slug_field="name")
- urls = UrlSerializer(many=True, read_only=False)
+ language = ThesaurusSerializer(many=False, slug_field='uri')
+ otherLanguages = ThesaurusSerializer(many=True, slug_field='uri')
+ subjects = ThesaurusSerializer(many=True, slug_field='uri')
+ themes = ThesaurusSerializer(many=True, slug_field='uri')
+ countries = ThesaurusSerializer(many=True, slug_field='uri')
+ projectNames = ThesaurusSerializer(many=True, slug_field='uri')
+ subjectCorporateBodies = ThesaurusSerializer(many=True, slug_field='uri')
+ corporateAuthors = ThesaurusSerializer(many=True, slug_field='uri')
+# titles = TitleSerializer(many=True, read_only=False)
+# addedTitles = AddedTitleSerializer(many=True, read_only=False)
+# issns = IssnSerializer(many=True, read_only=False)
+# isbns = IsbnSerializer(many=True, read_only=False)
+# documentCodes = DocumentCodeSerializer(many=True, read_only=False)
+# abstracts = AbstractSerializer(many=True, read_only=False)
+# titlesMainDocument = TitleMainDocumentSerializer(many=True, read_only=False)
+# imprints = ImprintSerializer(many=True, read_only=False)
+# collations = CollationSerializer(many=True, read_only=False)
+# volumeIssues = VolumeIssueSerializer(many=True, read_only=False)
+# periodicals = PeriodicalSerializer(many=True, read_only=False)
+# meetings = MeetingSerializer(many=True, read_only=False)
+# subjectMeetings = SubjectMeetingSerializer(many=True, read_only=False)
+# series = SerieSerializer(many=True, read_only=False)
+# authors = serializers.SlugRelatedField(many=True, read_only=False, slug_field="name")
+# subjectPersons = serializers.SlugRelatedField(many=True, read_only=False, slug_field="name")
+# urls = UrlSerializer(many=True, read_only=False)
class Meta:
model = Record
depth = 1
read_only_fields = ('identifier', 'uri')
- fields = ("identifier", "uri", "language", "otherLanguages", "notes",
- "editionStatement", "recordType","isDocumentPart",
- "isMultilingual","subjects", "themes", "countries",
- "projectNames", "subjectCorporateBodies", "corporateAuthors",
- "titles", "issns", "isbns", "documentCodes", "abstracts",
- "addedTitles", "titlesMainDocument", "imprints",
- "collations", "volumeIssues", "periodicals", "meetings",
- "subjectMeetings", "series", "authors", "subjectPersons",
- "urls")
+ fields = ("identifier", "uri", "subjects", "notes", "otherLanguages",
+ "language", "editionStatement", "recordType", "isDocumentPart",
+ "isMultilingual", "themes", "countries", "projectNames",
+ "subjectCorporateBodies", "corporateAuthors")
+# fields = (
+# "editionStatement", "recordType","isDocumentPart",
+# "isMultilingual","subjects", "themes", "countries",
+# "projectNames", "subjectCorporateBodies", "corporateAuthors",
+# "titles", "issns", "isbns", "documentCodes", "abstracts",
+# "addedTitles", "titlesMainDocument", "imprints",
+# "collations", "volumeIssues", "periodicals", "meetings",
+# "subjectMeetings", "series", "authors", "subjectPersons",
+# "urls")
-
\ No newline at end of file
+