Merge with 19fe06edb58d529e642ddd9aff6eccaddcc6161c
authorcavaliet
Mon, 02 Sep 2013 16:27:06 +0200
changeset 18 88d675d5e27e
parent 17 b31a67614f76 (current diff)
parent 16 19fe06edb58d (diff)
child 19 6b45fd23e4a0
Merge with 19fe06edb58d529e642ddd9aff6eccaddcc6161c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/p4l/api/serializers.py	Mon Sep 02 16:27:06 2013 +0200
@@ -0,0 +1,134 @@
+# -*- coding: utf-8 -*-
+'''
+Created on Sep 2, 2013
+
+@author: ymh
+'''
+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
+
+class BaseTitleSerializer(serializers.ModelSerializer):
+    class Meta:
+        fields = ('title','lang')
+    
+class TitleSerializer(BaseTitleSerializer):    
+    class Meta(BaseTitleSerializer.Meta):
+        model = Title
+
+class AddedTitleSerializer(BaseTitleSerializer):    
+    class Meta(BaseTitleSerializer.Meta):
+        model = AddedTitle
+
+class TitleMainDocumentSerializer(BaseTitleSerializer):    
+    class Meta(BaseTitleSerializer.Meta):
+        model = TitleMainDocument
+
+class IssnSerializer(serializers.ModelSerializer):
+    class Meta:
+        model = Issn
+        fields = ('issn','lang')
+
+class IsbnSerializer(serializers.ModelSerializer):
+    class Meta:
+        model = Isbn
+        fields = ('isbn','lang')
+
+class DocumentCodeSerializer(serializers.ModelSerializer):
+    class Meta:
+        model = DocumentCode
+        fields = ('documentCode','lang')
+        
+class AbstractSerializer(serializers.ModelSerializer):
+    class Meta:
+        model = Abstract
+        fields = ('abstract', 'lang')
+
+class ImprintSerializer(serializers.ModelSerializer):
+    class Meta:
+        model = Imprint
+        fields = ('imprintCity','publisher', 'imprintDate', 'lang')
+
+class CollationSerializer(serializers.ModelSerializer):
+    class Meta:
+        model = Collation
+        fields = ('collation', 'lang')
+
+class VolumeIssueSerializer(serializers.ModelSerializer):
+    class Meta:
+        model = VolumeIssue
+        fields = ('volume', 'number', 'lang')
+
+class PeriodicalSerializer(serializers.ModelSerializer):
+    class Meta:
+        model = Periodical
+        fields = ('label', 'lang')
+
+class MeetingSerializer(serializers.ModelSerializer):
+    class Meta:
+        model = Meeting
+        fields = ('label','meetingNumber', 'meetingPlace','meetingDate', 'meetingYear', 'lang')
+
+class SubjectMeetingSerializer(serializers.ModelSerializer):
+    class Meta:
+        model = SubjectMeeting
+        fields = ('label','meetingNumber', 'meetingPlace','meetingDate', 'meetingYear')
+
+class SerieSerializer(serializers.ModelSerializer):
+    class Meta:
+        model = Serie
+        fields = ('title', 'volume', 'lang')
+
+class UrlSerializer(serializers.ModelSerializer):
+    class Meta:
+        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)
+
+    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")        
+
+
+    
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/p4l/api/urls.py	Mon Sep 02 16:27:06 2013 +0200
@@ -0,0 +1,18 @@
+# -*- coding: utf-8 -*-
+'''
+Created on Sep 2, 2013
+
+@author: ymh
+'''
+
+from django.conf.urls import patterns, include, url
+from rest_framework import routers
+from p4l.api import views
+
+router = routers.DefaultRouter()
+router.register(r'records', views.RecordViewSet)
+
+urlpatterns = patterns('',
+    url(r'^', include(router.urls)),
+    url(r'^auth/', include('rest_framework.urls', namespace='rest_framework'))
+)
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/p4l/api/views.py	Mon Sep 02 16:27:06 2013 +0200
@@ -0,0 +1,18 @@
+# -*- coding: utf-8 -*-
+'''
+Created on Sep 2, 2013
+
+@author: ymh
+'''
+from p4l.api.serializers import RecordSerializer
+from p4l.models import Record
+from rest_framework import viewsets
+
+class RecordViewSet(viewsets.ModelViewSet):
+    '''
+    API endpoint that allow Record to be viewed or edited
+    '''
+
+    queryset = Record.objects.all()
+    serializer_class = RecordSerializer
+    lookup_field = 'identifier'
--- a/src/p4l/modwsgi.wsgi	Mon Sep 02 16:26:21 2013 +0200
+++ b/src/p4l/modwsgi.wsgi	Mon Sep 02 16:27:06 2013 +0200
@@ -12,7 +12,7 @@
         sys.path.append(environ['PROJECT_PATH'])
         for path in environ.get('PYTHON_PATH',"").split(os.pathsep):
             if path:
-                site.addsitedir(path)
+                site.addsitedir(path)  # @UndefinedVariable
     
         new_sys_path = [] 
         for item in list(sys.path): 
--- a/src/p4l/settings.py	Mon Sep 02 16:26:21 2013 +0200
+++ b/src/p4l/settings.py	Mon Sep 02 16:27:06 2013 +0200
@@ -131,6 +131,7 @@
     'django.contrib.staticfiles',
     'django.contrib.admin',
     'south',
+    'rest_framework',
     'p4l'
 )
 
@@ -166,6 +167,22 @@
 NB_RECORDS_BY_PAGE = 20
 SPARQL_QUERY_ENDPOINT = "http://localhost:8080/openrdf-sesame/repositories/plan4learning"
 
+REST_FRAMEWORK = {
+    # Use hyperlinked styles by default.
+    # Only used if the `serializer_class` attribute is not set on a view.
+    'DEFAULT_MODEL_SERIALIZER_CLASS':
+        'rest_framework.serializers.HyperlinkedModelSerializer',
+
+    # Use Django's standard `django.contrib.auth` permissions,
+    # or allow read-only access for unauthenticated users.
+    'DEFAULT_PERMISSION_CLASSES': [
+        'rest_framework.permissions.DjangoModelPermissionsOrAnonReadOnly'
+    ],
+                  
+    'PAGINATE_BY': 20,
+    'PAGINATE_BY_PARAM': 'page_size' 
+}
+
 from config import *  # @UnusedWildImport
 
 if not "SRC_BASE_URL" in locals():
--- a/src/p4l/urls.py	Mon Sep 02 16:26:21 2013 +0200
+++ b/src/p4l/urls.py	Mon Sep 02 16:27:06 2013 +0200
@@ -1,18 +1,18 @@
-from django.conf import settings
 from django.conf.urls import patterns, include, url
-from .views import RecordListView, RecordDetailView
+from django.contrib import admin
+from p4l.views import RecordListView, RecordDetailView
 
-from django.contrib import admin
 admin.autodiscover()
 
 urlpatterns = patterns('',
     # Examples:
     url(r'^$', RecordListView.as_view(), name='p4l_home'),
     url(r'^record/view$', RecordDetailView.as_view(), name='p4l_record_view'),
-    # url(r'^p4l/', include('p4l.foo.urls')),
+    url(r'^api/', include('p4l.api.urls')),
 
     # Uncomment the admin/doc line below to enable admin documentation:
     # url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
 
     url(r'^admin/', include(admin.site.urls)),
+    
 )
\ No newline at end of file