diff --git a/apps/common/__init__.py b/apps/common/__init__.py index a92a834217..61420dff93 100644 --- a/apps/common/__init__.py +++ b/apps/common/__init__.py @@ -31,8 +31,8 @@ bind_links(['current_user_details', 'current_user_edit', 'password_change_view'] register_top_menu('about', link=Link(text=_(u'about'), view='about_view', sprite='information'), position=-1) -@receiver(post_syncdb, dispatch_uid='create_superuser', sender=auth_models) -def create_superuser(sender, **kwargs): +@receiver(post_syncdb, dispatch_uid='create_superuser_processor', sender=auth_models) +def create_superuser_processor(sender, **kwargs): """ From https://github.com/lambdalisue/django-qwert/blob/master/qwert/autoscript/__init__.py From http://stackoverflow.com/questions/1466827/ -- diff --git a/apps/common/classes.py b/apps/common/classes.py index 17d5778c3d..7d30f1699c 100644 --- a/apps/common/classes.py +++ b/apps/common/classes.py @@ -1,8 +1,6 @@ from __future__ import absolute_import import logging -import sys -import types from django.contrib.contenttypes.models import ContentType from django.db.models.base import ModelBase diff --git a/apps/common/conf/settings.py b/apps/common/conf/settings.py index ebe0f44630..add4dd8867 100644 --- a/apps/common/conf/settings.py +++ b/apps/common/conf/settings.py @@ -67,4 +67,3 @@ Setting( default=False, description=_(u'Allow non authenticated users, access to all views'), ) - diff --git a/apps/common/views.py b/apps/common/views.py index 799ccf1a56..1624dc6fe6 100644 --- a/apps/common/views.py +++ b/apps/common/views.py @@ -236,8 +236,8 @@ def password_change_view(request): """ Password change wrapper for better control """ - context={'title': _(u'Current user password change')} - + context = {'title': _(u'Current user password change')} + return password_change( request, extra_context=context, diff --git a/apps/document_acls/views.py b/apps/document_acls/views.py index 16f5cd1ca7..1c8996df8b 100644 --- a/apps/document_acls/views.py +++ b/apps/document_acls/views.py @@ -1,5 +1,4 @@ from django.shortcuts import get_object_or_404 -from django.utils.translation import ugettext_lazy as _ from documents.models import Document from acls.views import acl_list_for diff --git a/apps/document_comments/views.py b/apps/document_comments/views.py index 005ee109cd..3d03925029 100644 --- a/apps/document_comments/views.py +++ b/apps/document_comments/views.py @@ -97,7 +97,7 @@ def comment_add(request, document_id): comment.site = Site.objects.get_current() comment.save() document.mark_indexable() - + messages.success(request, _(u'Comment added successfully.')) return HttpResponseRedirect(next) else: diff --git a/apps/document_indexing/__init__.py b/apps/document_indexing/__init__.py index 579facc80d..b161007ec9 100644 --- a/apps/document_indexing/__init__.py +++ b/apps/document_indexing/__init__.py @@ -25,6 +25,7 @@ from .permissions import (PERMISSION_DOCUMENT_INDEXING_VIEW, ) from .api import update_indexes, delete_indexes + def is_root_node(context): return context['node'].parent is None @@ -34,7 +35,7 @@ def is_not_instance_root_node(context): logger = logging.getLogger(__name__) -index_setup = Link(text=_(u'indexes'), view='index_setup_list', icon='tab.png', permissions=[PERMISSION_DOCUMENT_INDEXING_SETUP])#, children_view_regex=[r'^index_setup', r'^template_node']) +index_setup = Link(text=_(u'indexes'), view='index_setup_list', icon='tab.png', permissions=[PERMISSION_DOCUMENT_INDEXING_SETUP]) # children_view_regex=[r'^index_setup', r'^template_node']) index_setup_list = Link(text=_(u'index list'), view='index_setup_list', sprite='tab', permissions=[PERMISSION_DOCUMENT_INDEXING_SETUP]) index_setup_create = Link(text=_(u'create index'), view='index_setup_create', sprite='tab_add', permissions=[PERMISSION_DOCUMENT_INDEXING_CREATE]) index_setup_edit = Link(text=_(u'edit'), view='index_setup_edit', args='index.pk', sprite='tab_edit', permissions=[PERMISSION_DOCUMENT_INDEXING_EDIT]) @@ -48,7 +49,7 @@ template_node_delete = Link(text=_(u'delete'), view='template_node_delete', args index_list = Link(text=_(u'index list'), view='index_list', sprite='tab', permissions=[PERMISSION_DOCUMENT_INDEXING_VIEW]) index_parent = Link(text=_(u'go up one level'), view='index_instance_node_view', args='object.parent.pk', sprite='arrow_up', permissions=[PERMISSION_DOCUMENT_INDEXING_VIEW], dont_mark_active=True, condition=is_not_instance_root_node) -document_index_list = Link(text= _(u'indexes'), view='document_index_list', args='object.pk', sprite='folder_page', permissions=[PERMISSION_DOCUMENT_INDEXING_VIEW, PERMISSION_DOCUMENT_VIEW]) +document_index_list = Link(text=_(u'indexes'), view='document_index_list', args='object.pk', sprite='folder_page', permissions=[PERMISSION_DOCUMENT_INDEXING_VIEW, PERMISSION_DOCUMENT_VIEW]) rebuild_index_instances = Link(text=_('rebuild indexes'), view='rebuild_index_instances', sprite='folder_page', permissions=[PERMISSION_DOCUMENT_INDEXING_REBUILD_INDEXES], description=_(u'Deletes and creates from scratch all the document indexes.')) @@ -86,6 +87,6 @@ def update_indexes_handler(sender, instance, **kwargs): logger.debug('received post save signal - document metadata') logger.debug('instance: %s' % instance) update_indexes(instance.document) - + pre_save.connect(delete_indexes_handler, dispatch_uid='delete_indexes_handler_on_update') pre_delete.connect(delete_indexes_handler, dispatch_uid='delete_indexes_handler_on_delete') diff --git a/apps/document_indexing/forms.py b/apps/document_indexing/forms.py index ae42376d6f..c621b09ed6 100644 --- a/apps/document_indexing/forms.py +++ b/apps/document_indexing/forms.py @@ -1,7 +1,6 @@ from __future__ import absolute_import from django import forms -from django.utils.translation import ugettext_lazy as _ from .models import Index, IndexTemplateNode diff --git a/apps/document_indexing/migrations/0001_initial.py b/apps/document_indexing/migrations/0001_initial.py index 40847032c5..68c10e8abf 100644 --- a/apps/document_indexing/migrations/0001_initial.py +++ b/apps/document_indexing/migrations/0001_initial.py @@ -1,13 +1,12 @@ # encoding: utf-8 -import datetime from south.db import db from south.v2 import SchemaMigration from django.db import models + class Migration(SchemaMigration): def forwards(self, orm): - # Adding model 'Index' db.create_table('document_indexing_index', ( ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), @@ -52,7 +51,6 @@ class Migration(SchemaMigration): )) db.send_create_signal('document_indexing', ['DocumentRenameCount']) - def backwards(self, orm): # Deleting model 'Index' @@ -67,7 +65,6 @@ class Migration(SchemaMigration): # Deleting model 'DocumentRenameCount' db.delete_table('document_indexing_documentrenamecount') - models = { 'auth.group': { 'Meta': {'object_name': 'Group'}, diff --git a/apps/document_indexing/models.py b/apps/document_indexing/models.py index ce3863ef7e..130a900918 100644 --- a/apps/document_indexing/models.py +++ b/apps/document_indexing/models.py @@ -56,7 +56,7 @@ class IndexTemplateNode(MPTTModel): class Meta: verbose_name = _(u'index template node') verbose_name_plural = _(u'indexes template nodes') - + class IndexInstanceNode(MPTTModel): parent = TreeForeignKey('self', null=True, blank=True, related_name='index_instance_node') diff --git a/apps/documents/__init__.py b/apps/documents/__init__.py index 3638023839..6a990f26ef 100644 --- a/apps/documents/__init__.py +++ b/apps/documents/__init__.py @@ -6,7 +6,7 @@ from django.utils.translation import ugettext_lazy as _ from common.utils import validate_path, encapsulate from navigation.api import (bind_links, register_top_menu, - register_model_list_columns, register_multi_item_links, + register_model_list_columns, register_sidebar_template, Link) from main.api import register_diagnostic, register_maintenance_links from history.api import register_history_type @@ -17,32 +17,26 @@ from acls.api import class_permissions from .models import (Document, DocumentPage, DocumentPageTransformation, DocumentType, DocumentTypeFilename, DocumentVersion) -from .permissions import (PERMISSION_DOCUMENT_CREATE, - PERMISSION_DOCUMENT_PROPERTIES_EDIT, PERMISSION_DOCUMENT_VIEW, - PERMISSION_DOCUMENT_DELETE, PERMISSION_DOCUMENT_DOWNLOAD, - PERMISSION_DOCUMENT_TRANSFORM, PERMISSION_DOCUMENT_TOOLS, +from .permissions import (PERMISSION_DOCUMENT_PROPERTIES_EDIT, + PERMISSION_DOCUMENT_VIEW, PERMISSION_DOCUMENT_DELETE, + PERMISSION_DOCUMENT_DOWNLOAD, PERMISSION_DOCUMENT_TRANSFORM, PERMISSION_DOCUMENT_EDIT, PERMISSION_DOCUMENT_VERSION_REVERT, - PERMISSION_DOCUMENT_TYPE_EDIT, PERMISSION_DOCUMENT_TYPE_DELETE, - PERMISSION_DOCUMENT_TYPE_CREATE, PERMISSION_DOCUMENT_TYPE_VIEW, PERMISSION_DOCUMENT_NEW_VERSION) from .literals import (HISTORY_DOCUMENT_CREATED, HISTORY_DOCUMENT_EDITED, HISTORY_DOCUMENT_DELETED) -from .conf.settings import ZOOM_MAX_LEVEL -from .conf.settings import ZOOM_MIN_LEVEL from .conf import settings as document_settings from .widgets import document_thumbnail from .links import (document_list, document_list_recent, document_create_multiple, document_create_siblings, document_view_simple, document_view_advanced, - document_delete, document_multiple_delete, document_edit, document_preview, - document_download, document_multiple_download, document_version_download, + document_delete, document_edit, document_download, document_version_download, document_find_duplicates, document_find_all_duplicates, document_update_page_count, document_clear_transformations, - document_multiple_clear_transformations, document_print, document_history_view, + document_print, document_history_view, document_missing_list) from .links import (document_type_list, document_type_setup, document_type_document_list, document_type_edit, document_type_delete, document_type_create, document_type_filename_list, document_type_filename_create, document_type_filename_edit, document_type_filename_delete) -from .links import document_version_list, document_version_revert +from .links import document_version_list, document_version_revert from .links import (document_page_transformation_list, document_page_transformation_create, document_page_transformation_edit, document_page_transformation_delete, document_page_view, document_page_text, document_page_edit, document_page_navigation_next, diff --git a/apps/documents/conf/settings.py b/apps/documents/conf/settings.py index 86df5ab6b6..60f8e922cc 100644 --- a/apps/documents/conf/settings.py +++ b/apps/documents/conf/settings.py @@ -10,6 +10,7 @@ from django.conf import settings from storage.backends.filebasedstorage import FileBasedStorage from smart_settings.api import Setting, SettingNamespace + def default_checksum(x): """hashlib.sha256(x).hexdigest()""" return hashlib.sha256(x).hexdigest() diff --git a/apps/documents/forms.py b/apps/documents/forms.py index 0d86a941c3..a5518a4889 100644 --- a/apps/documents/forms.py +++ b/apps/documents/forms.py @@ -166,7 +166,7 @@ class DocumentForm(forms.ModelForm): initial=False, required=False, ) - + # Instance's document_type overrides the passed document_type if hasattr(instance, 'document_type'): document_type = instance.document_type @@ -308,15 +308,13 @@ class DocumentTypeFilenameForm_create(forms.ModelForm): model = DocumentTypeFilename fields = ('filename',) - + class DocumentDownloadForm(forms.Form): compressed = forms.BooleanField(label=_(u'Compress'), required=False, help_text=_(u'Download the document in the original format or in a compressed manner. This option is selectable only when downloading one document, for multiple documents, the bundle will always be downloads as a compressed file.')) - + def __init__(self, *args, **kwargs): self.document_versions = kwargs.pop('document_versions', None) super(DocumentDownloadForm, self).__init__(*args, **kwargs) if len(self.document_versions) > 1: self.fields['compressed'].initial = True - self.fields['compressed'].widget.attrs.update({'disabled': True}) - - + self.fields['compressed'].widget.attrs.update({'disabled': True}) diff --git a/apps/documents/links.py b/apps/documents/links.py index c856063eea..3e7b9529a4 100644 --- a/apps/documents/links.py +++ b/apps/documents/links.py @@ -2,9 +2,7 @@ from __future__ import absolute_import from django.utils.translation import ugettext_lazy as _ -from navigation.api import (bind_links, register_top_menu, - register_model_list_columns, register_multi_item_links, - register_sidebar_template, Link) +from navigation.api import Link from history.permissions import PERMISSION_HISTORY_VIEW from .permissions import (PERMISSION_DOCUMENT_CREATE, @@ -13,12 +11,12 @@ from .permissions import (PERMISSION_DOCUMENT_CREATE, PERMISSION_DOCUMENT_TRANSFORM, PERMISSION_DOCUMENT_TOOLS, PERMISSION_DOCUMENT_EDIT, PERMISSION_DOCUMENT_VERSION_REVERT, PERMISSION_DOCUMENT_TYPE_EDIT, PERMISSION_DOCUMENT_TYPE_DELETE, - PERMISSION_DOCUMENT_TYPE_CREATE, PERMISSION_DOCUMENT_TYPE_VIEW, - PERMISSION_DOCUMENT_NEW_VERSION) + PERMISSION_DOCUMENT_TYPE_CREATE, PERMISSION_DOCUMENT_TYPE_VIEW) + from .conf.settings import ZOOM_MAX_LEVEL, ZOOM_MIN_LEVEL -# Document page links expressions +# Document page links expressions def is_first_page(context): return context['page'].page_number <= 1 @@ -101,4 +99,4 @@ document_type_filename_edit = Link(text=_(u'edit'), view='document_type_filename document_type_filename_delete = Link(text=_(u'delete'), view='document_type_filename_delete', args='filename.id', sprite='database_delete', permissions=[PERMISSION_DOCUMENT_TYPE_EDIT]) # TODO: remove this -document_type_views=['setup_document_type_metadata', 'document_type_list', 'document_type_document_list', 'document_type_edit', 'document_type_delete', 'document_type_create', 'document_type_filename_list', 'document_type_filename_create', 'document_type_filename_edit', 'document_type_filename_delete'] +document_type_views = ['setup_document_type_metadata', 'document_type_list', 'document_type_document_list', 'document_type_edit', 'document_type_delete', 'document_type_create', 'document_type_filename_list', 'document_type_filename_create', 'document_type_filename_edit', 'document_type_filename_delete'] diff --git a/apps/documents/models.py b/apps/documents/models.py index 8dfbe3d5d7..57b86f4cb3 100644 --- a/apps/documents/models.py +++ b/apps/documents/models.py @@ -280,7 +280,7 @@ class Document(models.Model): @property def content(self): return self.latest_version.content - + def get_content(self, *args, **kwargs): return self.latest_version.get_content(*args, **kwargs) @@ -294,7 +294,6 @@ class Document(models.Model): def extension_split(self): filename, extension = os.path.splitext(self.filename) return filename, extension[1:] - class DocumentVersion(models.Model): @@ -537,7 +536,7 @@ class DocumentVersion(models.Model): return self.file.storage.size(self.file.path) else: return None - + def rename(self, new_name): name, extension = os.path.splitext(self.filename) self.filename = u''.join([new_name, extension]) diff --git a/apps/documents/utils.py b/apps/documents/utils.py index cae8b87a5f..ca5cb67db3 100644 --- a/apps/documents/utils.py +++ b/apps/documents/utils.py @@ -2,6 +2,7 @@ import os from common.conf.settings import TEMPORARY_DIRECTORY + def document_save_to_temp_dir(document, filename, buffer_size=1024 * 1024): temporary_path = os.path.join(TEMPORARY_DIRECTORY, filename) return document.save_to_file(temporary_path, buffer_size) diff --git a/apps/documents/views.py b/apps/documents/views.py index db3fe4f4b1..1e09522ec5 100644 --- a/apps/documents/views.py +++ b/apps/documents/views.py @@ -262,7 +262,7 @@ def document_edit(request, document_id): document.filename = new_filename document.description = form.cleaned_data['description'] document.save() - + create_history(HISTORY_DOCUMENT_EDITED, document, {'user': request.user, 'diff': return_diff(old_document, document, ['filename', 'description'])}) RecentDocument.objects.add_document_for_user(request.user, document) @@ -385,8 +385,8 @@ def document_download(request, document_id=None, document_id_list=None, document raise else: messages.error(request, e) - return HttpResponseRedirect(request.META['HTTP_REFERER']) - + return HttpResponseRedirect(request.META['HTTP_REFERER']) + else: form = DocumentDownloadForm(document_versions=document_versions) diff --git a/apps/folders/migrations/0001_initial.py b/apps/folders/migrations/0001_initial.py index 1da53cfe4f..56546f85af 100644 --- a/apps/folders/migrations/0001_initial.py +++ b/apps/folders/migrations/0001_initial.py @@ -1,16 +1,15 @@ # encoding: utf-8 -import datetime from south.db import db from south.v2 import SchemaMigration from django.db import models + class Migration(SchemaMigration): depends_on = ( ('documents', '0001_initial'), ) - + def forwards(self, orm): - # Adding model 'Folder' db.create_table('folders_folder', ( ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), @@ -31,9 +30,7 @@ class Migration(SchemaMigration): )) db.send_create_signal('folders', ['FolderDocument']) - def backwards(self, orm): - # Removing unique constraint on 'Folder', fields ['title', 'user'] db.delete_unique('folders_folder', ['title', 'user_id']) @@ -43,7 +40,6 @@ class Migration(SchemaMigration): # Deleting model 'FolderDocument' db.delete_table('folders_folderdocument') - models = { 'auth.group': { 'Meta': {'object_name': 'Group'}, diff --git a/apps/folders/migrations/0002_increase_title_size.py b/apps/folders/migrations/0002_increase_title_size.py index f992dd36d2..8c9292c4d9 100644 --- a/apps/folders/migrations/0002_increase_title_size.py +++ b/apps/folders/migrations/0002_increase_title_size.py @@ -5,19 +5,14 @@ from south.v2 import SchemaMigration from django.db import models class Migration(SchemaMigration): - def forwards(self, orm): - # Changing field 'Folder.title' db.alter_column('folders_folder', 'title', self.gf('django.db.models.fields.CharField')(max_length=128)) - def backwards(self, orm): - # Changing field 'Folder.title' db.alter_column('folders_folder', 'title', self.gf('django.db.models.fields.CharField')(max_length=32)) - models = { 'auth.group': { 'Meta': {'object_name': 'Group'}, diff --git a/apps/main/__init__.py b/apps/main/__init__.py index 468b3f6e4b..beb8e0425f 100644 --- a/apps/main/__init__.py +++ b/apps/main/__init__.py @@ -3,7 +3,7 @@ from __future__ import absolute_import from django.utils.translation import ugettext_lazy as _ from django.conf import settings -from navigation.api import bind_links, Link, register_top_menu +from navigation.api import Link, register_top_menu from project_setup.api import register_setup from project_tools.api import register_tool @@ -12,7 +12,7 @@ from .utils import register_multi_items_links __author__ = 'Roberto Rosario' __copyright__ = 'Copyright 2011 Roberto Rosario' -__credits__ = ['Roberto Rosario',] +__credits__ = ['Roberto Rosario', ] __license__ = 'GPL' __maintainer__ = 'Roberto Rosario' __email__ = 'roberto.rosario.gonzalez@gmail.com' @@ -65,5 +65,5 @@ register_tool(diagnostics) if 'sentry' in settings.INSTALLED_APPS: register_tool(sentry) - + register_multi_items_links() diff --git a/apps/main/utils.py b/apps/main/utils.py index f1b743959a..3da538a774 100644 --- a/apps/main/utils.py +++ b/apps/main/utils.py @@ -1,23 +1,21 @@ -from navigation.api import (register_top_menu, register_sidebar_template, - bind_links, Link, register_multi_item_links) - +from navigation.api import register_multi_item_links + from documents.links import document_multiple_clear_transformations, document_multiple_delete, document_multiple_download from metadata import metadata_multiple_add, metadata_multiple_edit, metadata_multiple_remove from ocr import submit_document_multiple def register_multi_items_links(): - view = [ # folders 'folder_view', - + # search 'search', 'results', - + # document_indexing 'index_instance_node_view', - + # documents 'document_find_duplicates', 'document_type_document_list', 'document_group_view', 'document_list', 'document_list_recent', ] diff --git a/apps/mimetype/api.py b/apps/mimetype/api.py index 1580493a7e..bd4e896755 100644 --- a/apps/mimetype/api.py +++ b/apps/mimetype/api.py @@ -40,32 +40,32 @@ mimetype_icons = { 'application/x-wav': 'file_extension_wav.png', 'application/vnd.oasis.opendocument.text': 'ODF_textdocument_32x32.png', - 'image/jpeg' : 'file_extension_jpeg.png', - 'image/png' : 'file_extension_png.png', - 'image/x-png' : 'file_extension_png.png', - 'image/tiff' : 'file_extension_tif.png', - 'image/x-tiff' : 'file_extension_tif.png', - 'image/bmp' : 'file_extension_bmp.png', - 'image/gif' : 'file_extension_gif.png', - 'image/vnd.dwg' : 'file_extension_dwg.png', - 'image/x-dwg' : 'file_extension_dwg.png', + 'image/jpeg': 'file_extension_jpeg.png', + 'image/png': 'file_extension_png.png', + 'image/x-png': 'file_extension_png.png', + 'image/tiff': 'file_extension_tif.png', + 'image/x-tiff': 'file_extension_tif.png', + 'image/bmp': 'file_extension_bmp.png', + 'image/gif': 'file_extension_gif.png', + 'image/vnd.dwg': 'file_extension_dwg.png', + 'image/x-dwg': 'file_extension_dwg.png', - 'audio/mpeg' : 'file_extension_mp3.png', - 'audio/mid' : 'file_extension_mid.png', - 'audio/x-wav' : 'file_extension_wav.png', - 'audio/vnd.wav' : 'file_extension_wav.png', - 'audio/x-pn-realaudio' : 'file_extension_ram.png', - 'audio/mp4' : 'file_extension_mp4.png', - 'audio/x-ms-wma' : 'file_extension_wma.png', + 'audio/mpeg': 'file_extension_mp3.png', + 'audio/mid': 'file_extension_mid.png', + 'audio/x-wav': 'file_extension_wav.png', + 'audio/vnd.wav': 'file_extension_wav.png', + 'audio/x-pn-realaudio': 'file_extension_ram.png', + 'audio/mp4': 'file_extension_mp4.png', + 'audio/x-ms-wma': 'file_extension_wma.png', - 'video/avi' : 'file_extension_avi.png', - 'video/mpeg' : 'file_extension_mpeg.png', - 'video/quicktime' : 'file_extension_mov.png', - 'video/x-ms-asf' : 'file_extension_asf.png', - 'video/x-ms-wmv' : 'file_extension_wmv.png', + 'video/avi': 'file_extension_avi.png', + 'video/mpeg': 'file_extension_mpeg.png', + 'video/quicktime': 'file_extension_mov.png', + 'video/x-ms-asf': 'file_extension_asf.png', + 'video/x-ms-wmv': 'file_extension_wmv.png', - 'text/html' : 'file_extension_html.png', - 'text/plain' : 'file_extension_txt.png', + 'text/html': 'file_extension_html.png', + 'text/plain': 'file_extension_txt.png', } diff --git a/apps/navigation/templatetags/navigation_tags.py b/apps/navigation/templatetags/navigation_tags.py index e71ce6409c..dc9ecb6e4e 100644 --- a/apps/navigation/templatetags/navigation_tags.py +++ b/apps/navigation/templatetags/navigation_tags.py @@ -10,7 +10,6 @@ from django.core.urlresolvers import reverse from django.template import (TemplateSyntaxError, Library, Node, Variable, VariableDoesNotExist) from django.utils.translation import ugettext as _ -from django.utils.encoding import smart_str, force_unicode, smart_unicode from ..api import (link_binding, multi_object_navigation, sidebar_templates, get_context_navigation_links) @@ -211,6 +210,7 @@ def resolve_template_variable(context, name): ''' + class GetNavigationLinks(Node): def __init__(self, menu_name=None, links_dict=link_binding, var_name='object_navigation_links'): self.menu_name = menu_name @@ -247,7 +247,7 @@ def object_navigation_template(context): object_variable_name = 'object' finally: logger.debug('object_variable_name: %s' % object_variable_name) - + try: object_reference = Variable(object_variable_name).resolve(context) except VariableDoesNotExist: diff --git a/apps/ocr/__init__.py b/apps/ocr/__init__.py index a667448a1a..401688f856 100644 --- a/apps/ocr/__init__.py +++ b/apps/ocr/__init__.py @@ -29,25 +29,25 @@ from . import models as ocr_models logger = logging.getLogger(__name__) #Links -submit_document = Link(text=_('submit to OCR queue'),view='submit_document',args='object.id',sprite='hourglass_add',permissions=[PERMISSION_OCR_DOCUMENT]) -submit_document_multiple = Link(text=_('submit to OCR queue'),view='submit_document_multiple',sprite='hourglass_add',permissions=[PERMISSION_OCR_DOCUMENT]) -re_queue_document = Link(text=_('re-queue'),view='re_queue_document',args='object.id',sprite='hourglass_add',permissions=[PERMISSION_OCR_DOCUMENT]) -re_queue_multiple_document = Link(text=_('re-queue'),view='re_queue_multiple_document',sprite='hourglass_add',permissions=[PERMISSION_OCR_DOCUMENT]) -queue_document_delete = Link(text=_(u'delete'),view='queue_document_delete',args='object.id',sprite='hourglass_delete',permissions=[PERMISSION_OCR_DOCUMENT_DELETE]) -queue_document_multiple_delete = Link(text=_(u'delete'),view='queue_document_multiple_delete',sprite='hourglass_delete',permissions=[PERMISSION_OCR_DOCUMENT_DELETE]) +submit_document = Link(text=_('submit to OCR queue'), view='submit_document', args='object.id', sprite='hourglass_add', permissions=[PERMISSION_OCR_DOCUMENT]) +submit_document_multiple = Link(text=_('submit to OCR queue'), view='submit_document_multiple', sprite='hourglass_add', permissions=[PERMISSION_OCR_DOCUMENT]) +re_queue_document = Link(text=_('re-queue'), view='re_queue_document', args='object.id', sprite='hourglass_add', permissions=[PERMISSION_OCR_DOCUMENT]) +re_queue_multiple_document = Link(text=_('re-queue'), view='re_queue_multiple_document', sprite='hourglass_add', permissions=[PERMISSION_OCR_DOCUMENT]) +queue_document_delete = Link(text=_(u'delete'), view='queue_document_delete', args='object.id', sprite='hourglass_delete', permissions=[PERMISSION_OCR_DOCUMENT_DELETE]) +queue_document_multiple_delete = Link(text=_(u'delete'), view='queue_document_multiple_delete', sprite='hourglass_delete', permissions=[PERMISSION_OCR_DOCUMENT_DELETE]) -document_queue_disable = Link(text=_(u'stop queue'),view='document_queue_disable',args='queue.id',sprite='control_stop_blue',permissions=[PERMISSION_OCR_QUEUE_ENABLE_DISABLE]) -document_queue_enable = Link(text=_(u'activate queue'),view='document_queue_enable',args='queue.id',sprite='control_play_blue',permissions=[PERMISSION_OCR_QUEUE_ENABLE_DISABLE]) +document_queue_disable = Link(text=_(u'stop queue'), view='document_queue_disable', args='queue.id', sprite='control_stop_blue', permissions=[PERMISSION_OCR_QUEUE_ENABLE_DISABLE]) +document_queue_enable = Link(text=_(u'activate queue'), view='document_queue_enable', args='queue.id', sprite='control_play_blue', permissions=[PERMISSION_OCR_QUEUE_ENABLE_DISABLE]) -all_document_ocr_cleanup = Link(text=_(u'clean up pages content'),view='all_document_ocr_cleanup',sprite='text_strikethrough',permissions=[PERMISSION_OCR_CLEAN_ALL_PAGES],description=_(u'Runs a language filter to remove common OCR mistakes from document pages content.')) +all_document_ocr_cleanup = Link(text=_(u'clean up pages content'), view='all_document_ocr_cleanup', sprite='text_strikethrough', permissions=[PERMISSION_OCR_CLEAN_ALL_PAGES], description=_(u'Runs a language filter to remove common OCR mistakes from document pages content.')) -queue_document_list = Link(text=_(u'queue document list'),view='queue_document_list',sprite='hourglass',permissions=[PERMISSION_OCR_DOCUMENT]) -ocr_tool_link = Link(text=_(u'OCR'),view='queue_document_list',sprite='hourglass',icon='text.png',permissions=[PERMISSION_OCR_DOCUMENT],children_view_regex=[r'queue_', r'document_queue']) +queue_document_list = Link(text=_(u'queue document list'), view='queue_document_list', sprite='hourglass', permissions=[PERMISSION_OCR_DOCUMENT]) +ocr_tool_link = Link(text=_(u'OCR'), view='queue_document_list', sprite='hourglass', icon='text.png', permissions=[PERMISSION_OCR_DOCUMENT], children_view_regex=[r'queue_', r'document_queue']) -setup_queue_transformation_list = Link(text=_(u'transformations'),view='setup_queue_transformation_list',args='queue.pk',sprite='shape_move_front') -setup_queue_transformation_create = Link(text=_(u'add transformation'),view='setup_queue_transformation_create',args='queue.pk',sprite='shape_square_add') -setup_queue_transformation_edit = Link(text=_(u'edit'),view='setup_queue_transformation_edit',args='transformation.pk',sprite='shape_square_edit') -setup_queue_transformation_delete = Link(text=_(u'delete'),view='setup_queue_transformation_delete',args='transformation.pk',sprite='shape_square_delete') +setup_queue_transformation_list = Link(text=_(u'transformations'), view='setup_queue_transformation_list', args='queue.pk', sprite='shape_move_front') +setup_queue_transformation_create = Link(text=_(u'add transformation'), view='setup_queue_transformation_create', args='queue.pk', sprite='shape_square_add') +setup_queue_transformation_edit = Link(text=_(u'edit'), view='setup_queue_transformation_edit', args='transformation.pk', sprite='shape_square_edit') +setup_queue_transformation_delete = Link(text=_(u'delete'), view='setup_queue_transformation_delete', args='transformation.pk', sprite='shape_square_delete') bind_links([Document], [submit_document]) bind_links([DocumentQueue], [document_queue_disable, document_queue_enable, setup_queue_transformation_list]) @@ -93,6 +93,7 @@ def document_post_save(sender, instance, **kwargs): # logger.debug('got call_queue signal: %s' % kwargs) # task_process_document_queues() + @receiver(post_syncdb, dispatch_uid='create_default_queue', sender=ocr_models) def create_default_queue_signal_handler(sender, **kwargs): create_default_queue() diff --git a/apps/ocr/conf/settings.py b/apps/ocr/conf/settings.py index 1055e7c068..6eec524e6c 100644 --- a/apps/ocr/conf/settings.py +++ b/apps/ocr/conf/settings.py @@ -2,7 +2,6 @@ from django.utils.translation import ugettext_lazy as _ -<<<<<<< HEAD from smart_settings.api import Setting, SettingNamespace namespace = SettingNamespace('ocr', _(u'OCR'), module='ocr.conf.settings') diff --git a/apps/ocr/parsers/__init__.py b/apps/ocr/parsers/__init__.py index c9be3f7eed..62f2c8ca13 100644 --- a/apps/ocr/parsers/__init__.py +++ b/apps/ocr/parsers/__init__.py @@ -52,7 +52,7 @@ def parse_document_page(document_page, descriptor=None, mimetype=None): # If parser was successfull there is no need to try # others in the list for this mimetype return - + raise ParserError('Parser list exhausted') except KeyError: raise ParserUnknownFile @@ -113,7 +113,7 @@ class OfficeParser(Parser): except OfficeConversionError, msg: logger.error(msg) raise ParserError - + class PopplerParser(Parser): """ @@ -123,11 +123,11 @@ class PopplerParser(Parser): self.pdftotext_path = PDFTOTEXT_PATH if PDFTOTEXT_PATH else u'/usr/bin/pdftotext' if not os.path.exists(self.pdftotext_path): raise ParserError('cannot find pdftotext executable') - logger.debug('self.pdftotext_path: %s' % self.pdftotext_path) - - def parse(self, document_page, descriptor=None): - logger.debug('parsing PDF with PopplerParser') - pagenum = str(document_page.page_number) + logger.debug('self.pdftotext_path: %s' % self.pdftotext_path) + + def parse(self, document_page, descriptor=None): + logger.debug('parsing PDF with PopplerParser') + pagenum = str(document_page.page_number) if descriptor: destination_descriptor, temp_filepath = tempfile.mkstemp(dir=TEMPORARY_DIRECTORY) @@ -135,23 +135,23 @@ class PopplerParser(Parser): document_file = temp_filepath else: document_file = document_save_to_temp_dir(document_page.document, document_page.document.checksum) - + logger.debug('document_file: %s', document_file) - logger.debug('parsing PDF page %s' % pagenum) + logger.debug('parsing PDF page %s' % pagenum) - command = [] - command.append(self.pdftotext_path) - command.append('-f') - command.append(pagenum) - command.append('-l') - command.append(pagenum) - command.append(document_file) - command.append('-') + command = [] + command.append(self.pdftotext_path) + command.append('-f') + command.append(pagenum) + command.append('-l') + command.append(pagenum) + command.append(document_file) + command.append('-') - proc = subprocess.Popen(command, close_fds=True, stderr=subprocess.PIPE, stdout=subprocess.PIPE) - return_code = proc.wait() - if return_code != 0: + proc = subprocess.Popen(command, close_fds=True, stderr=subprocess.PIPE, stdout=subprocess.PIPE) + return_code = proc.wait() + if return_code != 0: logger.error(proc.stderr.readline()) raise ParserError @@ -160,9 +160,9 @@ class PopplerParser(Parser): logger.debug('Parser didn\'t any output') raise ParserError('No output') - document_page.content = output - document_page.page_label = _(u'Text extracted from PDF') - document_page.save() + document_page.content = output + document_page.page_label = _(u'Text extracted from PDF') + document_page.save() register_parser(mimetypes=[u'application/pdf'], parsers=[PopplerParser, SlateParser]) diff --git a/apps/ocr/tasks.py b/apps/ocr/tasks.py index c1b9c937d4..0a0d8ab1e6 100644 --- a/apps/ocr/tasks.py +++ b/apps/ocr/tasks.py @@ -14,8 +14,7 @@ from .literals import (QUEUEDOCUMENT_STATE_PENDING, QUEUEDOCUMENT_STATE_PROCESSING, DOCUMENTQUEUE_STATE_ACTIVE, QUEUEDOCUMENT_STATE_ERROR) from .models import QueueDocument, DocumentQueue -from .conf.settings import (NODE_CONCURRENT_EXECUTION, REPLICATION_DELAY, - QUEUE_PROCESSING_INTERVAL) +from .conf.settings import NODE_CONCURRENT_EXECUTION, REPLICATION_DELAY LOCK_EXPIRE = 60 * 10 # Lock expires in 10 minutes # TODO: Tie LOCK_EXPIRATION with hard task timeout diff --git a/apps/ocr/views.py b/apps/ocr/views.py index 92772ad03e..3af18eb59c 100644 --- a/apps/ocr/views.py +++ b/apps/ocr/views.py @@ -19,9 +19,8 @@ from .permissions import (PERMISSION_OCR_DOCUMENT, PERMISSION_OCR_DOCUMENT_DELETE, PERMISSION_OCR_QUEUE_ENABLE_DISABLE, PERMISSION_OCR_CLEAN_ALL_PAGES, PERMISSION_OCR_QUEUE_EDIT) from .models import DocumentQueue, QueueDocument, QueueTransformation -from .literals import (QUEUEDOCUMENT_STATE_PENDING, - QUEUEDOCUMENT_STATE_PROCESSING, DOCUMENTQUEUE_STATE_STOPPED, - DOCUMENTQUEUE_STATE_ACTIVE) +from .literals import (QUEUEDOCUMENT_STATE_PROCESSING, + DOCUMENTQUEUE_STATE_ACTIVE, DOCUMENTQUEUE_STATE_STOPPED) from .exceptions import AlreadyQueued, ReQueueError from .api import clean_pages from .forms import QueueTransformationForm, QueueTransformationForm_create diff --git a/apps/project_setup/views.py b/apps/project_setup/views.py index cdb8d780ad..8b8e2665cd 100644 --- a/apps/project_setup/views.py +++ b/apps/project_setup/views.py @@ -1,6 +1,6 @@ from __future__ import absolute_import -from django.shortcuts import render_to_response, get_object_or_404 +from django.shortcuts import render_to_response from django.template import RequestContext from django.utils.translation import ugettext_lazy as _ diff --git a/apps/project_tools/views.py b/apps/project_tools/views.py index 033049b50d..7d7e0ec69a 100644 --- a/apps/project_tools/views.py +++ b/apps/project_tools/views.py @@ -1,6 +1,6 @@ from __future__ import absolute_import -from django.shortcuts import render_to_response, get_object_or_404 +from django.shortcuts import render_to_response from django.template import RequestContext from django.utils.translation import ugettext_lazy as _ diff --git a/apps/scheduler/api.py b/apps/scheduler/api.py index 148320c3ab..af2e57daa5 100644 --- a/apps/scheduler/api.py +++ b/apps/scheduler/api.py @@ -18,10 +18,9 @@ def register_interval_job(name, title, func, weeks=0, days=0, hours=0, minutes=0 start_date=start_date, args=args, kwargs=kwargs, **options) registered_jobs[name] = {'title': title, 'job': job} - + def remove_job(name): if name in registered_jobs: scheduler.unschedule_job(registered_jobs[name]['job']) registered_jobs.pop(name) - diff --git a/apps/smart_settings/api.py b/apps/smart_settings/api.py index c16954c8f7..40267cb800 100644 --- a/apps/smart_settings/api.py +++ b/apps/smart_settings/api.py @@ -3,8 +3,6 @@ from __future__ import absolute_import from django.conf import settings as django_settings from django.utils.importlib import import_module -from django.utils.translation import ugettext_lazy as _ - settings = {} settings_list = [] namespace_list = [] @@ -23,10 +21,10 @@ class SettingNamespace(object): def __unicode__(self): return unicode(self.label) - + def settings(self): return [setting for setting in settings_list if setting.namespace == self] - + class Setting(object): def __init__(self, namespace, name, global_name, default, description=u'', hidden=False, exists=False): @@ -37,7 +35,7 @@ class Setting(object): self.description = description self.hidden = hidden self.exists = exists - + # Get the global value value = getattr(django_settings, global_name, default) diff --git a/apps/smart_settings/views.py b/apps/smart_settings/views.py index cb4d7f4912..e21a78f9d8 100644 --- a/apps/smart_settings/views.py +++ b/apps/smart_settings/views.py @@ -8,13 +8,13 @@ from django.utils.safestring import mark_safe from common.utils import return_type, encapsulate from common.widgets import exists_with_famfam -from .api import settings, settings_list, namespace_list +from .api import settings_list def setting_list(request): context = { 'title': _(u'settings'), - 'object_list': [setting for setting in settings_list if setting.hidden==False], + 'object_list': [setting for setting in settings_list if setting.hidden == False], 'hide_link': True, 'hide_object': True, 'extra_columns': [ @@ -26,14 +26,6 @@ def setting_list(request): ))) }, ], - #'temporary_navigation_links': { - # 'sidebar': { - # 'links': links, - # 'upload_interactive': { - # 'links': links - # } - # } - #}, } return render_to_response('generic_list.html', context, diff --git a/apps/tags/views.py b/apps/tags/views.py index 1cf79abdf8..126abf3349 100644 --- a/apps/tags/views.py +++ b/apps/tags/views.py @@ -142,7 +142,7 @@ def tag_delete(request, tag_id=None, tag_id_list=None): for tag in tags: try: for document in Document.objects.filter(tags__in=[tag]): - document.mark_indexable() + document.mark_indexable() tag.delete() messages.success(request, _(u'Tag "%s" deleted successfully.') % tag) except Exception, e: @@ -191,7 +191,7 @@ def tag_edit(request, tag_id): tag.name = form.cleaned_data['name'] tag.save() for document in Document.objects.filter(tags__in=[tag]): - document.mark_indexable() + document.mark_indexable() tag_properties = tag.tagproperties_set.get() tag_properties.color = form.cleaned_data['color'] tag_properties.save()