Make API writable
This commit is contained in:
@@ -20,8 +20,9 @@ from .models import Document, DocumentPage, DocumentVersion
|
||||
from .serializers import (DocumentImageSerializer, DocumentPageSerializer,
|
||||
DocumentSerializer, DocumentVersionSerializer)
|
||||
|
||||
#TODO: PUT, POST, permissions
|
||||
|
||||
class APIDocumentListView(generics.ListAPIView):
|
||||
class APIDocumentListView(generics.ListCreateAPIView):
|
||||
"""
|
||||
Returns a list of all the documents.
|
||||
"""
|
||||
@@ -33,12 +34,11 @@ class APIDocumentListView(generics.ListAPIView):
|
||||
mayan_object_permissions = [PERMISSION_DOCUMENT_VIEW]
|
||||
|
||||
|
||||
class APIDocumentPageView(generics.RetrieveAPIView):
|
||||
class APIDocumentPageView(generics.RetrieveUpdateAPIView):
|
||||
"""
|
||||
Returns the selected document page details.
|
||||
"""
|
||||
|
||||
allowed_methods = ['GET']
|
||||
serializer_class = DocumentPageSerializer
|
||||
queryset = DocumentPage.objects.all()
|
||||
|
||||
@@ -47,12 +47,11 @@ class APIDocumentPageView(generics.RetrieveAPIView):
|
||||
mayan_permission_attribute_check = 'document'
|
||||
|
||||
|
||||
class APIDocumentView(generics.RetrieveAPIView):
|
||||
class APIDocumentView(generics.RetrieveUpdateDestroyAPIView):
|
||||
"""
|
||||
Returns the selected document details.
|
||||
"""
|
||||
|
||||
allowed_methods = ['GET']
|
||||
serializer_class = DocumentSerializer
|
||||
queryset = Document.objects.all()
|
||||
|
||||
@@ -60,6 +59,18 @@ class APIDocumentView(generics.RetrieveAPIView):
|
||||
mayan_object_permissions = [PERMISSION_DOCUMENT_VIEW]
|
||||
|
||||
|
||||
class APIDocumentVersionCreateView(generics.CreateAPIView):
|
||||
"""
|
||||
Create a new document version.
|
||||
"""
|
||||
|
||||
serializer_class = DocumentVersionSerializer
|
||||
queryset = DocumentVersion.objects.all()
|
||||
|
||||
#filter_backends = (MayanObjectPermissionsFilter,)
|
||||
#mayan_object_permissions = [PERMISSION_DOCUMENT_VIEW]
|
||||
|
||||
|
||||
class APIDocumentVersionView(generics.RetrieveAPIView):
|
||||
"""
|
||||
Returns the selected document version details.
|
||||
|
||||
@@ -95,7 +95,11 @@ class Document(models.Model):
|
||||
ordering = ['-date_added']
|
||||
|
||||
def __unicode__(self):
|
||||
return self.latest_version.filename
|
||||
try:
|
||||
return self.latest_version.filename
|
||||
except AttributeError:
|
||||
# Document has no version yet, let's return a place holder text
|
||||
return ugettext(u'Uninitialized document')
|
||||
|
||||
@models.permalink
|
||||
def get_absolute_url(self):
|
||||
@@ -250,7 +254,11 @@ class Document(models.Model):
|
||||
|
||||
@property
|
||||
def pages(self):
|
||||
return self.latest_version.pages
|
||||
try:
|
||||
return self.latest_version.pages
|
||||
except AttributeError:
|
||||
# Document has no version yet
|
||||
return 0
|
||||
|
||||
@property
|
||||
def page_count(self):
|
||||
@@ -258,11 +266,11 @@ class Document(models.Model):
|
||||
|
||||
@property
|
||||
def latest_version(self):
|
||||
return self.versions.order_by('-timestamp')[0]
|
||||
return self.versions.order_by('timestamp').last()
|
||||
|
||||
@property
|
||||
def first_version(self):
|
||||
return self.versions.order_by('timestamp')[0]
|
||||
return self.versions.order_by('timestamp').first()
|
||||
|
||||
def rename(self, new_name):
|
||||
version = self.latest_version
|
||||
@@ -302,12 +310,12 @@ class DocumentVersion(models.Model):
|
||||
def register_post_save_hook(cls, order, func):
|
||||
cls._post_save_hooks[order] = func
|
||||
|
||||
document = models.ForeignKey(Document, verbose_name=_(u'document'), editable=False, related_name='versions')
|
||||
major = models.PositiveIntegerField(verbose_name=_(u'mayor'), default=1, editable=False)
|
||||
minor = models.PositiveIntegerField(verbose_name=_(u'minor'), default=0, editable=False)
|
||||
micro = models.PositiveIntegerField(verbose_name=_(u'micro'), default=0, editable=False)
|
||||
release_level = models.PositiveIntegerField(choices=RELEASE_LEVEL_CHOICES, default=RELEASE_LEVEL_FINAL, verbose_name=_(u'release level'), editable=False)
|
||||
serial = models.PositiveIntegerField(verbose_name=_(u'serial'), default=0, editable=False)
|
||||
document = models.ForeignKey(Document, verbose_name=_(u'document'), related_name='versions')
|
||||
major = models.PositiveIntegerField(verbose_name=_(u'mayor'), default=1)
|
||||
minor = models.PositiveIntegerField(verbose_name=_(u'minor'), default=0)
|
||||
micro = models.PositiveIntegerField(verbose_name=_(u'micro'), default=0)
|
||||
release_level = models.PositiveIntegerField(choices=RELEASE_LEVEL_CHOICES, default=RELEASE_LEVEL_FINAL, verbose_name=_(u'release level'))
|
||||
serial = models.PositiveIntegerField(verbose_name=_(u'serial'), default=0)
|
||||
timestamp = models.DateTimeField(verbose_name=_(u'timestamp'), editable=False)
|
||||
comment = models.TextField(blank=True, verbose_name=_(u'comment'))
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ class DocumentPageSerializer(serializers.HyperlinkedModelSerializer):
|
||||
|
||||
|
||||
class DocumentVersionSerializer(serializers.HyperlinkedModelSerializer):
|
||||
pages = DocumentPageSerializer(many=True, read_only=True)
|
||||
pages = DocumentPageSerializer(many=True, required=False, read_only=True)
|
||||
|
||||
class Meta:
|
||||
model = DocumentVersion
|
||||
@@ -25,6 +25,7 @@ class DocumentImageSerializer(serializers.Serializer):
|
||||
class DocumentSerializer(serializers.HyperlinkedModelSerializer):
|
||||
versions = DocumentVersionSerializer(many=True, read_only=True)
|
||||
image = serializers.HyperlinkedIdentityField(view_name='document-image')
|
||||
new_version = serializers.HyperlinkedIdentityField(view_name='document-new-version')
|
||||
|
||||
class Meta:
|
||||
model = Document
|
||||
|
||||
@@ -3,7 +3,8 @@ from __future__ import absolute_import
|
||||
from django.conf.urls import patterns, url
|
||||
|
||||
from .api_views import (APIDocumentView, APIDocumentImageView, APIDocumentListView,
|
||||
APIDocumentPageView, APIDocumentVersionView)
|
||||
APIDocumentPageView, APIDocumentVersionCreateView,
|
||||
APIDocumentVersionView)
|
||||
from .conf.settings import PRINT_SIZE, DISPLAY_SIZE
|
||||
|
||||
urlpatterns = patterns('documents.views',
|
||||
@@ -74,4 +75,5 @@ api_urls = patterns('',
|
||||
url(r'^document_version/(?P<pk>[0-9]+)/$', APIDocumentVersionView.as_view(), name='documentversion-detail'),
|
||||
url(r'^document_page/(?P<pk>[0-9]+)/$', APIDocumentPageView.as_view(), name='documentpage-detail'),
|
||||
url(r'^documents/(?P<pk>[0-9]+)/image/$', APIDocumentImageView.as_view(), name='document-image'),
|
||||
url(r'^documents/(?P<pk>[0-9]+)/new_version/$', APIDocumentVersionCreateView.as_view(), name='document-new-version'),
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user