--- /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