From c3eaacb6c6badfe77414dcf4d96f658aacbd4124 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Sun, 4 Dec 2011 01:10:10 -0400 Subject: [PATCH 1/8] Make document date_added not editable, fix document version delete method, add revert method to document version --- apps/documents/models.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/apps/documents/models.py b/apps/documents/models.py index 581e1eea4f..ef9220b277 100644 --- a/apps/documents/models.py +++ b/apps/documents/models.py @@ -78,7 +78,7 @@ class Document(models.Model): uuid = models.CharField(max_length=48, blank=True, editable=False) document_type = models.ForeignKey(DocumentType, verbose_name=_(u'document type'), null=True, blank=True) description = models.TextField(blank=True, null=True, verbose_name=_(u'description'), db_index=True) - date_added = models.DateTimeField(verbose_name=_(u'added'), db_index=True) + date_added = models.DateTimeField(verbose_name=_(u'added'), db_index=True, editable=False) tags = TaggableManager() @@ -438,6 +438,13 @@ class DocumentVersion(models.Model): page_transformation.save() + def revert(self): + ''' + Delete the subsequent versions after this one + ''' + for version in self.document.versions.filter(timestamp__gt=self.timestamp): + version.delete() + def update_mimetype(self, save=True): ''' Read a document verions's file and determine the mimetype by calling the @@ -454,7 +461,7 @@ class DocumentVersion(models.Model): self.save() def delete(self, *args, **kwargs): - super(Document, self).delete(*args, **kwargs) + super(DocumentVesion, self).delete(*args, **kwargs) return self.file.storage.delete(self.file.path) def exists(self): From 2ec134e1728cfd12af0b1d94e4f4fb3298cf1928 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Sun, 4 Dec 2011 01:11:12 -0400 Subject: [PATCH 2/8] Add document version revert support --- apps/documents/__init__.py | 26 ++++++------ apps/documents/literals.py | 1 + .../static/images/icons/page_white_copy.png | Bin 0 -> 862 bytes apps/documents/urls.py | 1 + apps/documents/views.py | 40 ++++++++++++++---- 5 files changed, 48 insertions(+), 20 deletions(-) create mode 100644 apps/documents/static/images/icons/page_white_copy.png diff --git a/apps/documents/__init__.py b/apps/documents/__init__.py index 1a39e01ac8..e6e67f90c8 100644 --- a/apps/documents/__init__.py +++ b/apps/documents/__init__.py @@ -16,15 +16,15 @@ from project_setup.api import register_setup from documents.models import (Document, DocumentPage, DocumentPageTransformation, DocumentType, DocumentTypeFilename, DocumentVersion) -from documents.literals import PERMISSION_DOCUMENT_CREATE, \ - PERMISSION_DOCUMENT_PROPERTIES_EDIT, PERMISSION_DOCUMENT_VIEW, \ - PERMISSION_DOCUMENT_DELETE, PERMISSION_DOCUMENT_DOWNLOAD, \ - PERMISSION_DOCUMENT_TRANSFORM, PERMISSION_DOCUMENT_TOOLS, \ - PERMISSION_DOCUMENT_EDIT -from documents.literals import PERMISSION_DOCUMENT_TYPE_EDIT, \ - PERMISSION_DOCUMENT_TYPE_DELETE, PERMISSION_DOCUMENT_TYPE_CREATE -from documents.literals import HISTORY_DOCUMENT_CREATED, \ - HISTORY_DOCUMENT_EDITED, HISTORY_DOCUMENT_DELETED +from documents.literals import (PERMISSION_DOCUMENT_CREATE, + PERMISSION_DOCUMENT_PROPERTIES_EDIT, PERMISSION_DOCUMENT_VIEW, + PERMISSION_DOCUMENT_DELETE, PERMISSION_DOCUMENT_DOWNLOAD, + PERMISSION_DOCUMENT_TRANSFORM, PERMISSION_DOCUMENT_TOOLS, + PERMISSION_DOCUMENT_EDIT, PERMISSION_DOCUMENT_VERSION_REVERT) +from documents.literals import (PERMISSION_DOCUMENT_TYPE_EDIT, + PERMISSION_DOCUMENT_TYPE_DELETE, PERMISSION_DOCUMENT_TYPE_CREATE) +from documents.literals import (HISTORY_DOCUMENT_CREATED, + HISTORY_DOCUMENT_EDITED, HISTORY_DOCUMENT_DELETED) from documents.conf.settings import ZOOM_MAX_LEVEL from documents.conf.settings import ZOOM_MIN_LEVEL from documents.conf import settings as document_settings @@ -56,6 +56,7 @@ register_permission(PERMISSION_DOCUMENT_DELETE) register_permission(PERMISSION_DOCUMENT_DOWNLOAD) register_permission(PERMISSION_DOCUMENT_TRANSFORM) register_permission(PERMISSION_DOCUMENT_TOOLS) +register_permission(PERMISSION_DOCUMENT_VERSION_REVERT) # Document type permissions set_namespace_title('documents_setup', _(u'Documents setup')) @@ -80,8 +81,8 @@ document_edit = {'text': _(u'edit'), 'view': 'document_edit', 'args': 'object.id document_preview = {'text': _(u'preview'), 'class': 'fancybox', 'view': 'document_preview', 'args': 'object.id', 'famfam': 'magnifier', 'permissions': [PERMISSION_DOCUMENT_VIEW]} document_download = {'text': _(u'download'), 'view': 'document_download', 'args': 'object.id', 'famfam': 'page_save', 'permissions': [PERMISSION_DOCUMENT_DOWNLOAD]} document_version_download = {'text': _(u'download'), 'view': 'document_version_download', 'args': 'object.pk', 'famfam': 'page_save', 'permissions': [PERMISSION_DOCUMENT_DOWNLOAD]} -document_find_duplicates = {'text': _(u'find duplicates'), 'view': 'document_find_duplicates', 'args': 'object.id', 'famfam': 'page_refresh', 'permissions': [PERMISSION_DOCUMENT_VIEW]} -document_find_all_duplicates = {'text': _(u'find all duplicates'), 'view': 'document_find_all_duplicates', 'famfam': 'page_refresh', 'permissions': [PERMISSION_DOCUMENT_VIEW], 'description': _(u'Search all the documents\' checksums and return a list of the exact matches.')} +document_find_duplicates = {'text': _(u'find duplicates'), 'view': 'document_find_duplicates', 'args': 'object.id', 'famfam': 'page_white_copy', 'permissions': [PERMISSION_DOCUMENT_VIEW]} +document_find_all_duplicates = {'text': _(u'find all duplicates'), 'view': 'document_find_all_duplicates', 'famfam': 'page_white_copy', 'permissions': [PERMISSION_DOCUMENT_VIEW], 'description': _(u'Search all the documents\' checksums and return a list of the exact matches.')} document_update_page_count = {'text': _(u'update office documents\' page count'), 'view': 'document_update_page_count', 'famfam': 'page_white_csharp', 'permissions': [PERMISSION_DOCUMENT_TOOLS], 'description': _(u'Update the page count of the office type documents. This is useful when enabling office document support after there were already office type documents in the database.')} document_clear_transformations = {'text': _(u'clear transformations'), 'view': 'document_clear_transformations', 'args': 'object.id', 'famfam': 'page_paintbrush', 'permissions': [PERMISSION_DOCUMENT_TRANSFORM]} document_multiple_clear_transformations = {'text': _(u'clear transformations'), 'view': 'document_multiple_clear_transformations', 'famfam': 'page_paintbrush', 'permissions': [PERMISSION_DOCUMENT_TRANSFORM]} @@ -113,6 +114,7 @@ document_page_view_reset = {'text': _(u'reset view'), 'class': 'no-parent-histor # Document versions document_version_list = {'text': _(u'versions'), 'view': 'document_version_list', 'args': 'object.pk', 'famfam': 'page_world', 'permissions': [PERMISSION_DOCUMENT_VIEW]} +document_version_revert = {'text': _(u'revert'), 'view': 'document_version_revert', 'args': 'object.pk', 'famfam': 'page_refresh', 'permissions': [PERMISSION_DOCUMENT_VERSION_REVERT]} # Document type related links document_type_list = {'text': _(u'document type list'), 'view': 'document_type_list', 'famfam': 'layout', 'permissions': [PERMISSION_DOCUMENT_VIEW]} @@ -141,7 +143,7 @@ register_links(Document, [document_edit, document_print, document_delete, docume register_multi_item_links(['document_find_duplicates', 'folder_view', 'index_instance_list', 'document_type_document_list', 'search', 'results', 'document_group_view', 'document_list', 'document_list_recent'], [document_multiple_clear_transformations, document_multiple_delete]) # Document Version links -register_links(DocumentVersion, [document_version_download]) +register_links(DocumentVersion, [document_version_revert, document_version_download]) secondary_menu_links = [document_list_recent, document_list, document_create_multiple] diff --git a/apps/documents/literals.py b/apps/documents/literals.py index 30b0284f5f..54df1d03d2 100644 --- a/apps/documents/literals.py +++ b/apps/documents/literals.py @@ -13,6 +13,7 @@ PERMISSION_DOCUMENT_DELETE = {'namespace': 'documents', 'name': 'document_delete PERMISSION_DOCUMENT_DOWNLOAD = {'namespace': 'documents', 'name': 'document_download', 'label': _(u'Download documents')} PERMISSION_DOCUMENT_TRANSFORM = {'namespace': 'documents', 'name': 'document_transform', 'label': _(u'Transform documents')} PERMISSION_DOCUMENT_TOOLS = {'namespace': 'documents', 'name': 'document_tools', 'label': _(u'Execute document modifying tools')} +PERMISSION_DOCUMENT_VERSION_REVERT = {'namespace': 'documents', 'name': 'document_version_revert', 'label': _(u'Revert documents to a previous version')} PERMISSION_DOCUMENT_TYPE_EDIT = {'namespace': 'documents_setup', 'name': 'document_type_edit', 'label': _(u'Edit document types')} PERMISSION_DOCUMENT_TYPE_DELETE = {'namespace': 'documents_setup', 'name': 'document_type_delete', 'label': _(u'Delete document types')} diff --git a/apps/documents/static/images/icons/page_white_copy.png b/apps/documents/static/images/icons/page_white_copy.png new file mode 100644 index 0000000000000000000000000000000000000000..4c21085e2bef9d3c05ad32fa6b21f575ad759894 GIT binary patch literal 862 zcmV-k1EKthP)~inKO?)P`bhjd*Nlm%HQcxWl_WhfEgs zZuh>K`R3aL0l;XTowWh6BF1A75N7fU0z(ATG(YauYBid;g9or>0wCg8uh$cYM@Of$ zmM492J7-L} z;d6UlEue8Q_zk&S4$7s{PNUiE()2p$>vb5ptBBoMNcUIy$EAPWT`L%#WYqukXR zDht`{Dvaqnm7yoBIk#?*^>?e)XEcuH0zk$g?D;kU{jF)wndTkr?d}Gy>-YQFlV-C+ z;0l;1CYK&Sf+I_F)bDbl2FWV2Z)6^jLG*_m$fwjpP#-C{Xs zE)LDtjndZE3E8*|6!=tjY<8_Z8a9S;m3qHg#|h=~psR9z$#A)@NWOdIN& z+?-R?LZH&Mdv#+XeyJHD5^xH@gOmlZQ3 ztd_N;7gG?fdo!5~)t3O!M_{}R+`g+;cW7J*;7yP%kcfPGTdCMbuw&-fRMLiku>f4l z_fhhTh-+44\d+)/version/all/$', 'document_version_list', (), 'document_version_list'), url(r'^document/version/(?P\d+)/download/$', 'document_download', (), 'document_version_download'), + url(r'^document/version/(?P\d+)/revert/$', 'document_version_revert', (), 'document_version_revert'), url(r'^multiple/clear_transformations/$', 'document_multiple_clear_transformations', (), 'document_multiple_clear_transformations'), url(r'^duplicates/list/$', 'document_find_all_duplicates', (), 'document_find_all_duplicates'), diff --git a/apps/documents/views.py b/apps/documents/views.py index 4b08e9f5ee..2bff281ef9 100644 --- a/apps/documents/views.py +++ b/apps/documents/views.py @@ -36,14 +36,15 @@ from documents.conf.settings import ROTATION_STEP from documents.conf.settings import PRINT_SIZE from documents.conf.settings import RECENT_COUNT -from documents.literals import PERMISSION_DOCUMENT_CREATE, \ - PERMISSION_DOCUMENT_PROPERTIES_EDIT, \ - PERMISSION_DOCUMENT_VIEW, \ - PERMISSION_DOCUMENT_DELETE, PERMISSION_DOCUMENT_DOWNLOAD, \ - PERMISSION_DOCUMENT_TRANSFORM, \ - PERMISSION_DOCUMENT_EDIT, PERMISSION_DOCUMENT_TOOLS -from documents.literals import HISTORY_DOCUMENT_CREATED, \ - HISTORY_DOCUMENT_EDITED, HISTORY_DOCUMENT_DELETED +from documents.literals import (PERMISSION_DOCUMENT_CREATE, + PERMISSION_DOCUMENT_PROPERTIES_EDIT, + PERMISSION_DOCUMENT_VIEW, + PERMISSION_DOCUMENT_DELETE, PERMISSION_DOCUMENT_DOWNLOAD, + PERMISSION_DOCUMENT_TRANSFORM, + PERMISSION_DOCUMENT_EDIT, PERMISSION_DOCUMENT_TOOLS, + PERMISSION_DOCUMENT_VERSION_REVERT) +from documents.literals import (HISTORY_DOCUMENT_CREATED, + HISTORY_DOCUMENT_EDITED, HISTORY_DOCUMENT_DELETED) from documents.forms import (DocumentTypeSelectForm, DocumentForm_edit, DocumentPropertiesForm, @@ -1188,3 +1189,26 @@ def document_version_list(request, document_pk): return render_to_response('generic_list.html', context, context_instance=RequestContext(request)) + + +def document_version_revert(request, document_version_pk): + check_permissions(request.user, [PERMISSION_DOCUMENT_VERSION_REVERT]) + + previous = request.POST.get('previous', request.GET.get('previous', request.META.get('HTTP_REFERER', '/'))) + + if request.method == 'POST': + #try: + document_version = get_object_or_404(DocumentVersion, pk=document_version_pk) + document_version.revert() + messages.success(request, _(u'Document version reverted successfully')) + #except Exception, msg: + # messages.error(request, _(u'Error reverting document version; %s') % msg) + + return HttpResponseRedirect(previous) + + return render_to_response('generic_confirm.html', { + 'previous': previous, + 'title': _(u'Are you sure you wish to revert to this version?'), + 'message': _(u'All later version after this one will be deleted too.'), + 'form_icon': u'page_refresh.png', + }, context_instance=RequestContext(request)) From 7de09aae0fb465e1338adfad30507baffe6a2f04 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Sun, 4 Dec 2011 02:00:04 -0400 Subject: [PATCH 3/8] Add version support to the document image generation code --- apps/documents/models.py | 32 +++++++++++++++++--------------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/apps/documents/models.py b/apps/documents/models.py index ef9220b277..a658826191 100644 --- a/apps/documents/models.py +++ b/apps/documents/models.py @@ -113,35 +113,39 @@ class Document(models.Model): self.date_added = datetime.datetime.now() super(Document, self).save(*args, **kwargs) - def get_cached_image_name(self, page): - document_page = self.pages.get(page_number=page) + def get_cached_image_name(self, page, version): + document_version = DocumentVersion.objects.get(pk=version) + document_page = document_version.documentpage_set.get(page_number=page) transformations, warnings = document_page.get_transformation_list() - hash_value = HASH_FUNCTION(u''.join([self.checksum, unicode(page), unicode(transformations)])) + hash_value = HASH_FUNCTION(u''.join([document_version.checksum, unicode(page), unicode(transformations)])) return os.path.join(CACHE_PATH, hash_value), transformations - def get_image_cache_name(self, page): - cache_file_path, transformations = self.get_cached_image_name(page) + def get_image_cache_name(self, page, version): + cache_file_path, transformations = self.get_cached_image_name(page, version) if os.path.exists(cache_file_path): return cache_file_path else: - document_file = document_save_to_temp_dir(self, self.checksum) + document_version = DocumentVersion.objects.get(pk=version) + document_file = document_save_to_temp_dir(document_version, document_version.checksum) return convert(document_file, output_filepath=cache_file_path, page=page, transformations=transformations, mimetype=self.file_mimetype) - def get_valid_image(self, size=DISPLAY_SIZE, page=DEFAULT_PAGE_NUMBER, zoom=DEFAULT_ZOOM_LEVEL, rotation=DEFAULT_ROTATION): - image_cache_name = self.get_image_cache_name(page=page) + def get_valid_image(self, size=DISPLAY_SIZE, page=DEFAULT_PAGE_NUMBER, zoom=DEFAULT_ZOOM_LEVEL, rotation=DEFAULT_ROTATION, version=None): + if not version: + version = self.latest_version.pk + image_cache_name = self.get_image_cache_name(page=page, version=version) return convert(image_cache_name, cleanup_files=False, size=size, zoom=zoom, rotation=rotation) - def get_image(self, size=DISPLAY_SIZE, page=DEFAULT_PAGE_NUMBER, zoom=DEFAULT_ZOOM_LEVEL, rotation=DEFAULT_ROTATION, as_base64=False): + def get_image(self, size=DISPLAY_SIZE, page=DEFAULT_PAGE_NUMBER, zoom=DEFAULT_ZOOM_LEVEL, rotation=DEFAULT_ROTATION, as_base64=False, version=None): if zoom < ZOOM_MIN_LEVEL: zoom = ZOOM_MIN_LEVEL if zoom > ZOOM_MAX_LEVEL: zoom = ZOOM_MAX_LEVEL - rotation = rotation % 360 + rotation = rotation % 360 try: - file_path = self.get_valid_image(size=size, page=page, zoom=zoom, rotation=rotation) + file_path = self.get_valid_image(size=size, page=page, zoom=zoom, rotation=rotation, version=version) except UnknownFileFormat: file_path = get_icon_file_path(self.file_mimetype) except UnkownConvertError: @@ -184,6 +188,7 @@ class Document(models.Model): logger.debug('creating new document version') if version_update: new_version_dict = self.latest_version.get_new_version_dict(version_update) + logger.debug('new_version_dict: %s' % new_version_dict) new_version = DocumentVersion( document=self, file=file, @@ -203,9 +208,6 @@ class Document(models.Model): ) new_version.save() - - logger.debug('new_version_dict: %s' % new_version_dict) - logger.debug('new_version saved') return new_version @@ -461,7 +463,7 @@ class DocumentVersion(models.Model): self.save() def delete(self, *args, **kwargs): - super(DocumentVesion, self).delete(*args, **kwargs) + super(DocumentVersion, self).delete(*args, **kwargs) return self.file.storage.delete(self.file.path) def exists(self): From 255cb8eaf21e9cec6f8c2de6cafe98211771adb4 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Sun, 4 Dec 2011 02:00:28 -0400 Subject: [PATCH 4/8] Updated the smart document widget to be version aware --- apps/documents/widgets.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/apps/documents/widgets.py b/apps/documents/widgets.py index e449ffc335..031461047f 100644 --- a/apps/documents/widgets.py +++ b/apps/documents/widgets.py @@ -20,14 +20,19 @@ def document_link(document): return mark_safe(u'%s' % (reverse('document_view_simple', args=[document.pk]), document)) -def document_html_widget(document, view='document_thumbnail', click_view=None, page=DEFAULT_PAGE_NUMBER, zoom=DEFAULT_ZOOM_LEVEL, rotation=DEFAULT_ROTATION, gallery_name=None, fancybox_class='fancybox'): +def document_html_widget(document, view='document_thumbnail', click_view=None, page=DEFAULT_PAGE_NUMBER, zoom=DEFAULT_ZOOM_LEVEL, rotation=DEFAULT_ROTATION, gallery_name=None, fancybox_class='fancybox', version=None): result = [] alt_text = _(u'document page image') + + if not version: + version = document.latest_version.pk + query_dict = { 'page': page, 'zoom': zoom, 'rotation': rotation, + 'version': version, } if gallery_name: @@ -67,7 +72,7 @@ def document_html_widget(document, view='document_thumbnail', click_view=None, p }); ''' % { - 'url': reverse('documents-expensive-is_zoomable', args=[document.pk, page]), + 'url': reverse('documents-expensive-is_zoomable', args=[document.pk, version, page]), 'pk': document.pk, 'page': page if page else 1, 'plain_template': mark_safe(u''.join(plain_template)), From 2d119b853f0bc98f1677447a231d7b99c0466773 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Sun, 4 Dec 2011 02:01:24 -0400 Subject: [PATCH 5/8] Update the 'get_document_image' view to be version aware --- apps/documents/views.py | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/apps/documents/views.py b/apps/documents/views.py index 2bff281ef9..cbf3853565 100644 --- a/apps/documents/views.py +++ b/apps/documents/views.py @@ -280,6 +280,8 @@ def get_document_image(request, document_id, size=PREVIEW_SIZE, base64_version=F page = int(request.GET.get('page', DEFAULT_PAGE_NUMBER)) zoom = int(request.GET.get('zoom', DEFAULT_ZOOM_LEVEL)) + + version = int(request.GET.get('version', document.latest_version.pk)) if zoom < ZOOM_MIN_LEVEL: zoom = ZOOM_MIN_LEVEL @@ -290,10 +292,10 @@ def get_document_image(request, document_id, size=PREVIEW_SIZE, base64_version=F rotation = int(request.GET.get('rotation', DEFAULT_ROTATION)) % 360 if base64_version: - return HttpResponse(u'' % document.get_image(size=size, page=page, zoom=zoom, rotation=rotation, as_base64=True)) + return HttpResponse(u'' % document.get_image(size=size, page=page, zoom=zoom, rotation=rotation, as_base64=True, version=version)) else: # TODO: fix hardcoded MIMETYPE - return sendfile.sendfile(request, document.get_image(size=size, page=page, zoom=zoom, rotation=rotation), mimetype=DEFAULT_FILE_FORMAT_MIMETYPE) + return sendfile.sendfile(request, document.get_image(size=size, page=page, zoom=zoom, rotation=rotation, version=version), mimetype=DEFAULT_FILE_FORMAT_MIMETYPE) def document_download(request, document_id=None, document_version_pk=None): @@ -1197,12 +1199,12 @@ def document_version_revert(request, document_version_pk): previous = request.POST.get('previous', request.GET.get('previous', request.META.get('HTTP_REFERER', '/'))) if request.method == 'POST': - #try: - document_version = get_object_or_404(DocumentVersion, pk=document_version_pk) - document_version.revert() - messages.success(request, _(u'Document version reverted successfully')) - #except Exception, msg: - # messages.error(request, _(u'Error reverting document version; %s') % msg) + try: + document_version = get_object_or_404(DocumentVersion, pk=document_version_pk) + document_version.revert() + messages.success(request, _(u'Document version reverted successfully')) + except Exception, msg: + messages.error(request, _(u'Error reverting document version; %s') % msg) return HttpResponseRedirect(previous) From 73950ef750755b68b1f59abe90d8c24f3ab7f7c4 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Sun, 4 Dec 2011 02:01:48 -0400 Subject: [PATCH 6/8] Disable the revert link for the current version of a document --- apps/documents/__init__.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/apps/documents/__init__.py b/apps/documents/__init__.py index e6e67f90c8..750b2953a8 100644 --- a/apps/documents/__init__.py +++ b/apps/documents/__init__.py @@ -46,6 +46,10 @@ def is_min_zoom(context): def is_max_zoom(context): return context['zoom'] >= ZOOM_MAX_LEVEL + +def is_current_version(context): + return context['object'].document.latest_version.timestamp == context['object'].timestamp + # Permission setup set_namespace_title('documents', _(u'Documents')) register_permission(PERMISSION_DOCUMENT_CREATE) @@ -114,7 +118,7 @@ document_page_view_reset = {'text': _(u'reset view'), 'class': 'no-parent-histor # Document versions document_version_list = {'text': _(u'versions'), 'view': 'document_version_list', 'args': 'object.pk', 'famfam': 'page_world', 'permissions': [PERMISSION_DOCUMENT_VIEW]} -document_version_revert = {'text': _(u'revert'), 'view': 'document_version_revert', 'args': 'object.pk', 'famfam': 'page_refresh', 'permissions': [PERMISSION_DOCUMENT_VERSION_REVERT]} +document_version_revert = {'text': _(u'revert'), 'view': 'document_version_revert', 'args': 'object.pk', 'famfam': 'page_refresh', 'permissions': [PERMISSION_DOCUMENT_VERSION_REVERT], 'conditional_disable': is_current_version} # Document type related links document_type_list = {'text': _(u'document type list'), 'view': 'document_type_list', 'famfam': 'layout', 'permissions': [PERMISSION_DOCUMENT_VIEW]} From f0b1f9e6b3bc570e5371379d4b06d237cc33c3a5 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Sun, 4 Dec 2011 02:02:16 -0400 Subject: [PATCH 7/8] Remove removed code --- apps/rest_api/resources.py | 26 +------------------------- 1 file changed, 1 insertion(+), 25 deletions(-) diff --git a/apps/rest_api/resources.py b/apps/rest_api/resources.py index 869c78e407..d127096f3a 100644 --- a/apps/rest_api/resources.py +++ b/apps/rest_api/resources.py @@ -40,30 +40,6 @@ class DocumentResourceSimple(ModelResource): } for version in instance.versions.all() ] - - ''' - return [ - { - 'version': 1, - 'mimetype': instance.file_mimetype, - 'encoding': instance.file_mime_encoding, - 'filename': instance.filename, - 'date_updated': instance.date_updated, - 'checksum': instance.checksum, - 'size': instance.size, - 'exists': instance.exists(), - 'pages': [ - { - 'page_numer': page.page_number, - 'page_label': page.page_label, - 'is_zoomable': reverse('documents-expensive-is_zoomable', args=[instance.pk, page.page_number]), - - #'content': - } - for page in instance.documentpage_set.all() - ] - } - ] - ''' + def expensive_methods(self, instance): return [] From ae0ecb20a60be402ae5acda14fa08607b2f060bd Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Sun, 4 Dec 2011 02:02:34 -0400 Subject: [PATCH 8/8] Update the 'is_zoomable' api call to be version aware --- apps/rest_api/urls.py | 2 +- apps/rest_api/views.py | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/apps/rest_api/urls.py b/apps/rest_api/urls.py index 3265dd7574..34553951a6 100644 --- a/apps/rest_api/urls.py +++ b/apps/rest_api/urls.py @@ -12,5 +12,5 @@ urlpatterns = patterns('', # Version 0 alpha API calls url(r'^v0/document/(?P[0-9]+)/$', ReadOnlyInstanceModelView.as_view(resource=DocumentResourceSimple), name='documents-simple'), - url(r'^v0/document/(?P[0-9]+)/page/(?P[0-9]+)/expensive/is_zoomable/$', IsZoomable.as_view(), name='documents-expensive-is_zoomable'), + url(r'^v0/document/(?P[0-9]+)/version/(?P[0-9]+)/page/(?P[0-9]+)/expensive/is_zoomable/$', IsZoomable.as_view(), name='documents-expensive-is_zoomable'), ) diff --git a/apps/rest_api/views.py b/apps/rest_api/views.py index 6a1b5dfc14..d7623e4ffe 100644 --- a/apps/rest_api/views.py +++ b/apps/rest_api/views.py @@ -6,7 +6,7 @@ from django.utils.translation import ugettext_lazy as _ from django.shortcuts import get_object_or_404 from django.core.urlresolvers import reverse -from documents.models import Document +from documents.models import Document, DocumentVersion from converter.exceptions import UnknownFileFormat, UnkownConvertError from djangorestframework.views import View, ModelView, ListModelView, InstanceModelView @@ -45,11 +45,11 @@ class Version_0(View): class IsZoomable(View): - def get(self, request, pk, page_number): + def get(self, request, pk, page_number, version_pk): logger.info('received is_zoomable call from: %s' % (request.META['REMOTE_ADDR'])) - document = get_object_or_404(Document, pk=pk) + document_version = get_object_or_404(DocumentVersion, pk=version_pk) try: - document.get_image_cache_name(int(page_number)) + document_version.document.get_image_cache_name(int(page_number), version_pk) return {'result': True} except (UnknownFileFormat, UnkownConvertError): return {'result': False}