diff --git a/apps/acls/admin.py b/apps/acls/admin.py index 630f1d4afe..6608e6799b 100644 --- a/apps/acls/admin.py +++ b/apps/acls/admin.py @@ -1,10 +1,12 @@ +from __future__ import absolute_import + from django.contrib import admin - -from acls.models import AccessEntry - from django.contrib.contenttypes import generic from django.contrib.contenttypes.models import ContentType +from .models import AccessEntry + + #class PermissionHolderInline(admin.StackedInline): # model = PermissionHolder # extra = 1 diff --git a/apps/acls/forms.py b/apps/acls/forms.py index 0e4b68098c..a4fbebf4c5 100644 --- a/apps/acls/forms.py +++ b/apps/acls/forms.py @@ -1,3 +1,5 @@ +from __future__ import absolute_import + from django import forms from django.utils.translation import ugettext_lazy as _ from django.contrib.auth.models import User, Group @@ -5,7 +7,7 @@ from django.contrib.auth.models import User, Group from permissions.models import Permission, Role from common.utils import generate_choices_w_labels, encapsulate, get_object_name -from acls.models import AccessHolder +from .models import AccessHolder def _as_choice_list(holders): diff --git a/apps/acls/models.py b/apps/acls/models.py index 554403e0bf..866c9e11ff 100644 --- a/apps/acls/models.py +++ b/apps/acls/models.py @@ -1,3 +1,5 @@ +from __future__ import absolute_import + import sys import types import logging diff --git a/apps/acls/permissions.py b/apps/acls/permissions.py new file mode 100644 index 0000000000..2ab114070a --- /dev/null +++ b/apps/acls/permissions.py @@ -0,0 +1,14 @@ +from __future__ import absolute_import + +from django.utils.translation import ugettext_lazy as _ + +from permissions.models import PermissionNamespace, Permission + +acls_namespace = PermissionNamespace('acls', _(u'Access control lists')) +acls_setup_namespace = PermissionNamespace('acls_setup', _(u'Access control lists')) + +ACLS_EDIT_ACL = Permission.objects.register(acls_namespace, 'acl_edit', _(u'Edit ACLs')) +ACLS_VIEW_ACL = Permission.objects.register(acls_namespace, 'acl_view', _(u'View ACLs')) + +ACLS_CLASS_EDIT_ACL = Permission.objects.register(acls_setup_namespace, 'acl_class_edit', _(u'Edit class default ACLs')) +ACLS_CLASS_VIEW_ACL = Permission.objects.register(acls_setup_namespace, 'acl_class_view', _(u'View class default ACLs')) diff --git a/apps/acls/widgets.py b/apps/acls/widgets.py index e2a57823e2..8a410fd171 100644 --- a/apps/acls/widgets.py +++ b/apps/acls/widgets.py @@ -1,3 +1,5 @@ +from __future__ import absolute_import + from django.utils.translation import ugettext_lazy as _ from django.utils.safestring import mark_safe from django import forms @@ -8,7 +10,7 @@ from django.contrib.contenttypes.models import ContentType from django.db.models.base import ModelBase from django.template.defaultfilters import capfirst -from acls.literals import CONTENT_TYPE_ICON_MAP +from .literals import CONTENT_TYPE_ICON_MAP def content_type_icon(content_type): diff --git a/apps/common/__init__.py b/apps/common/__init__.py index 6c9e4b6287..4212752ca8 100644 --- a/apps/common/__init__.py +++ b/apps/common/__init__.py @@ -1,3 +1,5 @@ +from __future__ import absolute_import + import tempfile from django.utils.translation import ugettext_lazy as _ @@ -7,8 +9,8 @@ from django.db.models import signals from navigation.api import register_links, register_top_menu -from common.conf import settings as common_settings -from common.utils import validate_path +from .conf import settings as common_settings +from .utils import validate_path def has_usable_password(context): diff --git a/apps/common/forms.py b/apps/common/forms.py index 195bac61da..91aff0b67e 100644 --- a/apps/common/forms.py +++ b/apps/common/forms.py @@ -1,3 +1,5 @@ +from __future__ import absolute_import + import os from django import forms @@ -8,9 +10,9 @@ from django.contrib.auth.forms import AuthenticationForm from django.contrib.auth import authenticate from django.conf import settings -from common.utils import return_attrib -from common.widgets import DetailSelectMultiple, PlainWidget, \ - TextAreaDiv, EmailInput +from .utils import return_attrib +from .widgets import (DetailSelectMultiple, PlainWidget, TextAreaDiv, + EmailInput) class DetailForm(forms.ModelForm): @@ -90,10 +92,10 @@ class FilterForm(forms.Form): class ChoiceForm(forms.Form): - """ + ''' Form to be used in side by side templates used to add or remove items from a many to many field - """ + ''' def __init__(self, *args, **kwargs): choices = kwargs.pop('choices', []) label = kwargs.pop('label', _(u'Selection')) @@ -106,28 +108,28 @@ class ChoiceForm(forms.Form): class UserForm_view(DetailForm): - """ + ''' Form used to display an user's public details - """ + ''' class Meta: model = User fields = ('username', 'first_name', 'last_name', 'email', 'is_staff', 'is_superuser', 'last_login', 'date_joined', 'groups') class UserForm(forms.ModelForm): - """ + ''' Form used to edit an user's mininal fields by the user himself - """ + ''' class Meta: model = User fields = ('first_name', 'last_name') class EmailAuthenticationForm(AuthenticationForm): - """ + ''' Override the default authentication form to use email address authentication - """ + ''' email = forms.CharField(label=_(u'Email'), max_length=75, widget=EmailInput() ) diff --git a/apps/common/utils.py b/apps/common/utils.py index 3ff3bf9677..da13756918 100644 --- a/apps/common/utils.py +++ b/apps/common/utils.py @@ -110,7 +110,9 @@ def pretty_size_10(size): # http://www.johncardinal.com/tmgutil/capitalizenames.htm def proper_name(name): - """Does the work of capitalizing a name (can be a full name).""" + ''' + Does the work of capitalizing a name (can be a full name). + ''' mc = re.compile(r'^Mc(\w)(?=\w)', re.I) mac = re.compile(r'^Mac(\w)(?=\w)', re.I) suffixes = [ diff --git a/apps/common/views.py b/apps/common/views.py index 8575e3b788..c88a204362 100644 --- a/apps/common/views.py +++ b/apps/common/views.py @@ -1,3 +1,5 @@ +from __future__ import absolute_import + from django.shortcuts import redirect from django.utils.translation import ugettext_lazy as _ from django.http import HttpResponseRedirect @@ -10,26 +12,25 @@ from django.utils.http import urlencode from django.contrib.auth.views import login from django.utils.simplejson import dumps, loads -from common.forms import ChoiceForm, UserForm, UserForm_view, \ - ChangelogForm, LicenseForm -from common.forms import EmailAuthenticationForm -from common.conf.settings import LOGIN_METHOD +from .forms import (ChoiceForm, UserForm, UserForm_view, ChangelogForm, + LicenseForm, EmailAuthenticationForm) +from .conf.settings import LOGIN_METHOD def password_change_done(request): - """ + ''' View called when the new user password has been accepted - """ + ''' messages.success(request, _(u'Your password has been successfully changed.')) return redirect('home') def multi_object_action_view(request): - """ + ''' Proxy view called first when using a multi object action, which then redirects to the appropiate specialized view - """ + ''' next = request.POST.get('next', request.GET.get('next', request.META.get('HTTP_REFERER', '/'))) @@ -144,9 +145,9 @@ def assign_remove(request, left_list, right_list, add_method, remove_method, lef def current_user_details(request): - """ + ''' Display the current user's details - """ + ''' form = UserForm_view(instance=request.user) return render_to_response( @@ -159,9 +160,9 @@ def current_user_details(request): def current_user_edit(request): - """ + ''' Allow an user to edit his own details - """ + ''' next = request.POST.get('next', request.GET.get('next', request.META.get('HTTP_REFERER', reverse('current_user_details')))) @@ -184,10 +185,10 @@ def current_user_edit(request): def login_view(request): - """ + ''' Control how the use is to be authenticated, options are 'email' and 'username' - """ + ''' kwargs = {'template_name': 'login.html'} if LOGIN_METHOD == 'email': @@ -197,9 +198,9 @@ def login_view(request): def changelog_view(request): - """ + ''' Display the included Changelog.txt file from the about menu - """ + ''' form = ChangelogForm() return render_to_response( 'generic_detail.html', { @@ -210,9 +211,9 @@ def changelog_view(request): def license_view(request): - """ + ''' Display the included LICENSE file from the about menu - """ + ''' form = LicenseForm() return render_to_response( 'generic_detail.html', { diff --git a/apps/common/widgets.py b/apps/common/widgets.py index 5e39ba4742..bfedfaa776 100644 --- a/apps/common/widgets.py +++ b/apps/common/widgets.py @@ -10,10 +10,10 @@ from django.utils.encoding import force_unicode class PlainWidget(forms.widgets.Widget): - """ + ''' Class to define a form widget that effectively nulls the htmls of a widget and reduces the output to only it's value - """ + ''' def render(self, name, value, attrs=None): return mark_safe(u'%s' % value) @@ -74,10 +74,10 @@ def two_state_template(state, famfam_ok_icon=u'tick', famfam_fail_icon=u'cross') class TextAreaDiv(forms.widgets.Widget): - """ + ''' Class to define a form widget that simulates the behavior of a Textarea widget but using a div tag instead - """ + ''' def __init__(self, attrs=None): # The 'rows' and 'cols' attributes are required for HTML correctness. @@ -98,10 +98,10 @@ class TextAreaDiv(forms.widgets.Widget): # From: http://www.peterbe.com/plog/emailinput-html5-django class EmailInput(forms.widgets.Input): - """ + ''' Class for a login form widget that accepts only well formated email address - """ + ''' input_type = 'email' def render(self, name, value, attrs=None): @@ -114,11 +114,11 @@ class EmailInput(forms.widgets.Input): class ScrollableCheckboxSelectMultiple(forms.widgets.CheckboxSelectMultiple): - """ + ''' Class for a form widget composed of a selection of checkboxes wrapped in a div tag with automatic overflow to add scrollbars when the list exceds the height of the div - """ + ''' def render(self, name, value, attrs=None, choices=()): if value is None: value = [] has_id = attrs and 'id' in attrs diff --git a/apps/common/wizard.py b/apps/common/wizard.py index 4a8cc70e61..914dcd062a 100644 --- a/apps/common/wizard.py +++ b/apps/common/wizard.py @@ -1,4 +1,4 @@ -"""Common abstract classes for forms.""" +'''Common abstract classes for forms.''' try: import cPickle as pickle except ImportError: @@ -15,12 +15,13 @@ __all__ = ('security_hash', 'BoundFormWizard') def security_hash_new(form, exclude=None, *args): - """Calculates a security hash for the given Form/FormSet instance. + ''' + Calculates a security hash for the given Form/FormSet instance. This creates a list of the form field names/values in a deterministic order, pickles the result with the SECRET_KEY setting, then takes an md5 hash of that. - """ + ''' data = [] if exclude is None: @@ -51,19 +52,24 @@ def security_hash_new(form, exclude=None, *args): class BoundFormWizard(FormWizard): - """Render prev_fields as a list of bound form fields in the template - context rather than raw html.""" + ''' + Render prev_fields as a list of bound form fields in the template + context rather than raw html. + ''' + def security_hash(self, request, form): - """Calculates the security hash for the given HttpRequest and + ''' + Calculates the security hash for the given HttpRequest and Form/FormSet instances. Subclasses may want to take into account request-specific information, such as the IP address. - """ + ''' + return security_hash_new(form) def render(self, form, request, step, context=None): - "Renders the given Form object, returning an HttpResponse." + 'Renders the given Form object, returning an HttpResponse.' old_data = request.POST prev_fields = [] if old_data: diff --git a/apps/converter/__init__.py b/apps/converter/__init__.py index de30bc2350..a0417de178 100644 --- a/apps/converter/__init__.py +++ b/apps/converter/__init__.py @@ -1,11 +1,13 @@ +from __future__ import absolute_import + from django.utils.translation import ugettext_lazy as _ from django.core.exceptions import ImproperlyConfigured from navigation.api import register_sidebar_template from project_tools.api import register_tool -from converter.utils import load_backend -from converter.conf.settings import GRAPHICS_BACKEND +from .utils import load_backend +from .conf.settings import GRAPHICS_BACKEND formats_list = {'text': _('file formats'), 'view': 'formats_list', 'famfam': 'pictures', 'icon': 'pictures.png'} diff --git a/apps/converter/api.py b/apps/converter/api.py index ff4e9d645b..8d1239afd2 100644 --- a/apps/converter/api.py +++ b/apps/converter/api.py @@ -1,3 +1,5 @@ +from __future__ import absolute_import + import os import subprocess import hashlib @@ -7,15 +9,13 @@ from common.conf.settings import TEMPORARY_DIRECTORY from converter.literals import DEFAULT_PAGE_NUMBER, \ DEFAULT_ZOOM_LEVEL, DEFAULT_ROTATION, DEFAULT_FILE_FORMAT -from converter import backend -from converter.literals import TRANSFORMATION_CHOICES -from converter.literals import TRANSFORMATION_RESIZE, \ - TRANSFORMATION_ROTATE, TRANSFORMATION_ZOOM -from converter.literals import DIMENSION_SEPARATOR -from converter.literals import FILE_FORMATS -from converter.utils import cleanup -from converter.runtime import office_converter -from converter.exceptions import OfficeConversionError +from . import backend +from .literals import (TRANSFORMATION_CHOICES, TRANSFORMATION_RESIZE, + TRANSFORMATION_ROTATE, TRANSFORMATION_ZOOM, DIMENSION_SEPARATOR, + FILE_FORMATS) +from .utils import cleanup +from .runtime import office_converter +from .exceptions import OfficeConversionError HASH_FUNCTION = lambda x: hashlib.sha256(x).hexdigest() diff --git a/apps/converter/exceptions.py b/apps/converter/exceptions.py index 1423d38002..74b13a7c56 100644 --- a/apps/converter/exceptions.py +++ b/apps/converter/exceptions.py @@ -1,29 +1,29 @@ class ConvertError(Exception): - """ + ''' Base exception for all coverter app exceptions - """ + ''' pass class UnknownFileFormat(ConvertError): - """ + ''' Raised when the converter backend can't understand a file - """ + ''' pass class IdentifyError(ConvertError): - """ + ''' Raised by the graphcismagick and imagemagics identify program - """ + ''' pass class UnkownConvertError(ConvertError): - """ + ''' Raised when an error is found but there is no disernible way to identify the kind of error - """ + ''' pass diff --git a/apps/converter/office_converter.py b/apps/converter/office_converter.py index a0c93aa6d9..8df298ceed 100644 --- a/apps/converter/office_converter.py +++ b/apps/converter/office_converter.py @@ -1,3 +1,5 @@ +from __future__ import absolute_import + import os import subprocess import logging @@ -6,8 +8,8 @@ from mimetype.api import get_mimetype from common.conf.settings import TEMPORARY_DIRECTORY from common.utils import id_generator -from converter.conf.settings import UNOCONV_PATH, UNOCONV_USE_PIPE -from converter.exceptions import (OfficeConversionError, +from .conf.settings import UNOCONV_PATH, UNOCONV_USE_PIPE +from .exceptions import (OfficeConversionError, OfficeBackendError, UnknownFileFormat) CACHED_FILE_SUFFIX = u'_office_converter' diff --git a/apps/converter/runtime.py b/apps/converter/runtime.py index 4d2a67cacc..9aad502667 100644 --- a/apps/converter/runtime.py +++ b/apps/converter/runtime.py @@ -1,5 +1,7 @@ -from converter.office_converter import OfficeConverter -from converter.exceptions import OfficeBackendError +from __future__ import absolute_import + +from .office_converter import OfficeConverter +from .exceptions import OfficeBackendError try: diff --git a/apps/django_gpg/__init__.py b/apps/django_gpg/__init__.py index 11f64783d0..a52df7339a 100644 --- a/apps/django_gpg/__init__.py +++ b/apps/django_gpg/__init__.py @@ -1,21 +1,17 @@ +from __future__ import absolute_import + from django.utils.translation import ugettext_lazy as _ from navigation.api import register_links, register_top_menu, \ register_model_list_columns, register_multi_item_links, \ register_sidebar_template from main.api import register_diagnostic, register_maintenance_links -from permissions.models import PermissionNamespace, Permission from project_setup.api import register_setup from hkp import Key as KeyServerKey -from django_gpg.api import Key - -django_gpg_namespace = PermissionNamespace('django_gpg', _(u'Key management')) - -PERMISSION_KEY_VIEW = Permission.objects.register(django_gpg_namespace, 'key_view', _(u'View keys')) -PERMISSION_KEY_DELETE = Permission.objects.register(django_gpg_namespace, 'key_delete', _(u'Delete keys')) -PERMISSION_KEYSERVER_QUERY = Permission.objects.register(django_gpg_namespace, 'keyserver_query', _(u'Query keyservers')) -PERMISSION_KEY_RECEIVE = Permission.objects.register(django_gpg_namespace, 'key_receive', _(u'Import keys from keyservers')) +from .api import Key +from .permissions import (PERMISSION_KEY_VIEW, PERMISSION_KEY_DELETE, + PERMISSION_KEYSERVER_QUERY, PERMISSION_KEY_RECEIVE) # Setup views private_keys = {'text': _(u'private keys'), 'view': 'key_private_list', 'args': 'object.pk', 'famfam': 'key', 'icon': 'key.png', 'permissions': [PERMISSION_KEY_VIEW]} diff --git a/apps/django_gpg/api.py b/apps/django_gpg/api.py index af95cc924f..ecda9a97a5 100644 --- a/apps/django_gpg/api.py +++ b/apps/django_gpg/api.py @@ -1,3 +1,5 @@ +from __future__ import absolute_import + import types from pickle import dumps @@ -12,7 +14,7 @@ from django.utils.http import urlquote_plus from hkp import KeyServer import gnupg -from django_gpg.exceptions import (GPGVerificationError, GPGSigningError, +from .exceptions import (GPGVerificationError, GPGSigningError, GPGDecryptionError, KeyDeleteError, KeyGenerationError, KeyFetchingError, KeyDoesNotExist, KeyImportError) diff --git a/apps/django_gpg/views.py b/apps/django_gpg/views.py index 83fa80cfd7..60d400b018 100644 --- a/apps/django_gpg/views.py +++ b/apps/django_gpg/views.py @@ -1,3 +1,5 @@ +from __future__ import absolute_import + from datetime import datetime import logging @@ -15,13 +17,13 @@ from permissions.models import Permission from common.utils import pretty_size, parse_range, urlquote, \ return_diff, encapsulate -from django_gpg.api import Key, SIGNATURE_STATES -from django_gpg.runtime import gpg -from django_gpg.exceptions import (GPGVerificationError, KeyFetchingError, +from .api import Key, SIGNATURE_STATES +from .runtime import gpg +from .exceptions import (GPGVerificationError, KeyFetchingError, KeyImportError) -from django_gpg import (PERMISSION_KEY_VIEW, PERMISSION_KEY_DELETE, +from .forms import KeySearchForm +from .permissions import (PERMISSION_KEY_VIEW, PERMISSION_KEY_DELETE, PERMISSION_KEYSERVER_QUERY, PERMISSION_KEY_RECEIVE) -from django_gpg.forms import KeySearchForm logger = logging.getLogger(__name__) diff --git a/apps/document_comments/__init__.py b/apps/document_comments/__init__.py index a0de601ea1..5d4cdec3bb 100644 --- a/apps/document_comments/__init__.py +++ b/apps/document_comments/__init__.py @@ -1,3 +1,5 @@ +from __future__ import absolute_import + from django.utils.translation import ugettext_lazy as _ from django.conf import settings from django.contrib.comments.models import Comment @@ -12,13 +14,10 @@ from documents.models import Document if 'django.contrib.comments' not in settings.INSTALLED_APPS: raise Exception('This app depends on the django.contrib.comments app.') -comments_namespace = PermissionNamespace('comments', _(u'Comments')) - -PERMISSION_COMMENT_CREATE = Permission.objects.register(comments_namespace, 'comment_create', _(u'Create new comments')) -PERMISSION_COMMENT_DELETE = Permission.objects.register(comments_namespace, 'comment_delete', _(u'Delete comments')) -PERMISSION_COMMENT_EDIT = Permission.objects.register(comments_namespace, 'comment_edit', _(u'Edit comments')) -PERMISSION_COMMENT_VIEW = Permission.objects.register(comments_namespace, 'comment_view', _(u'View comments')) - +from .permissions import (PERMISSION_COMMENT_CREATE, + PERMISSION_COMMENT_DELETE, PERMISSION_COMMENT_EDIT, + PERMISSION_COMMENT_VIEW) + comment_delete = {'text': _('delete'), 'view': 'comment_delete', 'args': 'object.pk', 'famfam': 'comment_delete', 'permissions': [PERMISSION_COMMENT_DELETE]} comment_multiple_delete = {'text': _('delete'), 'view': 'comment_multiple_delete', 'args': 'object.pk', 'famfam': 'comments_delete', 'permissions': [PERMISSION_COMMENT_DELETE]} comment_add = {'text': _('add comment'), 'view': 'comment_add', 'args': 'object.pk', 'famfam': 'comment_add', 'permissions': [PERMISSION_COMMENT_CREATE]} diff --git a/apps/document_comments/permissions.py b/apps/document_comments/permissions.py new file mode 100644 index 0000000000..820a16ede5 --- /dev/null +++ b/apps/document_comments/permissions.py @@ -0,0 +1,12 @@ +from __future__ import absolute_import + +from django.utils.translation import ugettext_lazy as _ + +from permissions.models import PermissionNamespace, Permission + +comments_namespace = PermissionNamespace('comments', _(u'Comments')) + +PERMISSION_COMMENT_CREATE = Permission.objects.register(comments_namespace, 'comment_create', _(u'Create new comments')) +PERMISSION_COMMENT_DELETE = Permission.objects.register(comments_namespace, 'comment_delete', _(u'Delete comments')) +PERMISSION_COMMENT_EDIT = Permission.objects.register(comments_namespace, 'comment_edit', _(u'Edit comments')) +PERMISSION_COMMENT_VIEW = Permission.objects.register(comments_namespace, 'comment_view', _(u'View comments')) diff --git a/apps/document_comments/utils.py b/apps/document_comments/utils.py index 7f59249a09..cca6e07098 100644 --- a/apps/document_comments/utils.py +++ b/apps/document_comments/utils.py @@ -1,6 +1,8 @@ +from __future__ import absolute_import + from django.utils.translation import ugettext_lazy as _ from django.contrib.comments.models import Comment -from document_comments import comment_delete +from . import comment_delete def get_comments_subtemplate(obj): diff --git a/apps/document_comments/views.py b/apps/document_comments/views.py index e2a57f17b8..9e474a2cb6 100644 --- a/apps/document_comments/views.py +++ b/apps/document_comments/views.py @@ -1,3 +1,5 @@ +from __future__ import absolute_import + from django.shortcuts import render_to_response, get_object_or_404 from django.utils.translation import ugettext_lazy as _ from django.contrib.comments.models import Comment @@ -10,9 +12,10 @@ from django.contrib.sites.models import Site from permissions.models import Permission from documents.models import Document -from document_comments import PERMISSION_COMMENT_DELETE, \ - PERMISSION_COMMENT_CREATE, PERMISSION_COMMENT_VIEW -from document_comments.forms import CommentForm +from .permissions import (PERMISSION_COMMENT_CREATE, + PERMISSION_COMMENT_DELETE, PERMISSION_COMMENT_EDIT, + PERMISSION_COMMENT_VIEW) +from .forms import CommentForm def comment_delete(request, comment_id=None, comment_id_list=None): @@ -97,9 +100,9 @@ def comment_add(request, document_id): def comments_for_object(request, document_id): - """ + ''' Show a list of all the comments related to the passed object - """ + ''' Permission.objects.check_permissions(request.user, [PERMISSION_COMMENT_VIEW]) document = get_object_or_404(Document, pk=document_id) diff --git a/apps/document_indexing/__init__.py b/apps/document_indexing/__init__.py index 8199bc862a..c71a55f544 100644 --- a/apps/document_indexing/__init__.py +++ b/apps/document_indexing/__init__.py @@ -1,19 +1,18 @@ +from __future__ import absolute_import + from django.utils.translation import ugettext_lazy as _ from navigation.api import register_top_menu, register_sidebar_template, \ register_links -from permissions.models import PermissionNamespace, Permission from main.api import register_maintenance_links -from documents.literals import PERMISSION_DOCUMENT_VIEW +from documents.permissions import PERMISSION_DOCUMENT_VIEW from documents.models import Document -from document_indexing.models import IndexInstance +from .models import IndexInstance +from .permissions import (PERMISSION_DOCUMENT_INDEXING_VIEW, + PERMISSION_DOCUMENT_INDEXING_REBUILD_INDEXES) -document_indexing_namespace = PermissionNamespace('document_indexing', _(u'Indexing')) - -PERMISSION_DOCUMENT_INDEXING_VIEW = Permission.objects.register(document_indexing_namespace, 'document_index_view', _(u'View document indexes')) -PERMISSION_DOCUMENT_INDEXING_REBUILD_INDEXES = Permission.objects.register(document_indexing_namespace, 'document_rebuild_indexes', _(u'Rebuild document indexes')) index_list = {'text': _(u'index list'), 'view': 'index_instance_list', 'famfam': 'folder_page', 'permissions': [PERMISSION_DOCUMENT_INDEXING_VIEW]} index_parent = {'text': _(u'go up one level'), 'view': 'index_instance_list', 'args': 'object.parent.pk', 'famfam': 'arrow_up', 'permissions': [PERMISSION_DOCUMENT_INDEXING_VIEW], 'dont_mark_active': True} diff --git a/apps/document_indexing/api.py b/apps/document_indexing/api.py index 269d5ceddd..6b996fce17 100644 --- a/apps/document_indexing/api.py +++ b/apps/document_indexing/api.py @@ -1,3 +1,5 @@ +from __future__ import absolute_import + from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext from django.core.urlresolvers import reverse @@ -7,15 +9,13 @@ from django.template.defaultfilters import slugify from documents.models import Document from metadata.classes import MetadataObject -from document_indexing.models import Index, IndexInstance, \ - DocumentRenameCount -from document_indexing.conf.settings import AVAILABLE_INDEXING_FUNCTIONS -from document_indexing.conf.settings import MAX_SUFFIX_COUNT -from document_indexing.filesystem import fs_create_index_directory, \ - fs_create_document_link, fs_delete_document_link, \ - fs_delete_index_directory, fs_delete_directory_recusive -from document_indexing.conf.settings import SLUGIFY_PATHS -from document_indexing.os_specifics import assemble_suffixed_filename +from .models import (Index, IndexInstance, DocumentRenameCount) +from .conf.settings import (AVAILABLE_INDEXING_FUNCTIONS, + MAX_SUFFIX_COUNT, SLUGIFY_PATHS) +from .filesystem import (fs_create_index_directory, + fs_create_document_link, fs_delete_document_link, + fs_delete_index_directory, fs_delete_directory_recusive) +from .os_specifics import assemble_suffixed_filename if SLUGIFY_PATHS == False: # Do not slugify path or filenames and extensions diff --git a/apps/document_indexing/filesystem.py b/apps/document_indexing/filesystem.py index c89dad4cf6..4b24a9d4d6 100644 --- a/apps/document_indexing/filesystem.py +++ b/apps/document_indexing/filesystem.py @@ -1,12 +1,13 @@ +from __future__ import absolute_import + import errno import os from django.utils.translation import ugettext_lazy as _ -from document_indexing.os_specifics import (assemble_suffixed_filename, +from .os_specifics import (assemble_suffixed_filename, assemble_path_from_list) -from document_indexing.conf.settings import FILESERVING_ENABLE -from document_indexing.conf.settings import FILESERVING_PATH +from .conf.settings import (FILESERVING_ENABLE, FILESERVING_PATH) def get_instance_path(index_instance): diff --git a/apps/document_indexing/models.py b/apps/document_indexing/models.py index a8a1003131..a9df3f4dc2 100644 --- a/apps/document_indexing/models.py +++ b/apps/document_indexing/models.py @@ -1,3 +1,5 @@ +from __future__ import absolute_import + from django.db import models from django.utils.translation import ugettext_lazy as _ @@ -6,7 +8,7 @@ from mptt.fields import TreeForeignKey from documents.models import Document -from document_indexing.conf.settings import AVAILABLE_INDEXING_FUNCTIONS +from .conf.settings import AVAILABLE_INDEXING_FUNCTIONS available_indexing_functions_string = (_(u'Available functions: %s') % u','.join([u'%s()' % name for name, function in AVAILABLE_INDEXING_FUNCTIONS.items()])) if AVAILABLE_INDEXING_FUNCTIONS else u'' diff --git a/apps/document_indexing/os_specifics.py b/apps/document_indexing/os_specifics.py index 90a9ba8a75..97bdc426e4 100644 --- a/apps/document_indexing/os_specifics.py +++ b/apps/document_indexing/os_specifics.py @@ -1,6 +1,8 @@ +from __future__ import absolute_import + import os -from document_indexing.conf.settings import SUFFIX_SEPARATOR +from .conf.settings import SUFFIX_SEPARATOR def assemble_suffixed_filename(filename, suffix=0): diff --git a/apps/document_indexing/permissions.py b/apps/document_indexing/permissions.py new file mode 100644 index 0000000000..01f1afa652 --- /dev/null +++ b/apps/document_indexing/permissions.py @@ -0,0 +1,10 @@ +from __future__ import absolute_import + +from django.utils.translation import ugettext_lazy as _ + +from permissions.models import PermissionNamespace, Permission + +document_indexing_namespace = PermissionNamespace('document_indexing', _(u'Indexing')) + +PERMISSION_DOCUMENT_INDEXING_VIEW = Permission.objects.register(document_indexing_namespace, 'document_index_view', _(u'View document indexes')) +PERMISSION_DOCUMENT_INDEXING_REBUILD_INDEXES = Permission.objects.register(document_indexing_namespace, 'document_rebuild_indexes', _(u'Rebuild document indexes')) diff --git a/apps/document_indexing/views.py b/apps/document_indexing/views.py index b79f1ad8ee..0505ad5cac 100644 --- a/apps/document_indexing/views.py +++ b/apps/document_indexing/views.py @@ -1,3 +1,5 @@ +from __future__ import absolute_import + from django.utils.translation import ugettext_lazy as _ from django.http import HttpResponseRedirect from django.shortcuts import render_to_response, get_object_or_404 @@ -6,18 +8,17 @@ from django.contrib import messages from django.utils.safestring import mark_safe from permissions.models import Permission -from documents.literals import PERMISSION_DOCUMENT_VIEW +from documents.permissions import PERMISSION_DOCUMENT_VIEW from documents.models import Document from documents.views import document_list from common.utils import encapsulate -from document_indexing import (PERMISSION_DOCUMENT_INDEXING_VIEW, +from .permissions import (PERMISSION_DOCUMENT_INDEXING_VIEW, PERMISSION_DOCUMENT_INDEXING_REBUILD_INDEXES) - -from document_indexing.models import IndexInstance -from document_indexing.api import (get_breadcrumbs, get_instance_link, +from .models import IndexInstance +from .api import (get_breadcrumbs, get_instance_link, do_rebuild_all_indexes) -from document_indexing.widgets import index_instance_item_link +from .widgets import index_instance_item_link def index_instance_list(request, index_id=None): diff --git a/apps/document_signatures/permissions.py b/apps/document_signatures/permissions.py index 8575d4c80c..477f649357 100644 --- a/apps/document_signatures/permissions.py +++ b/apps/document_signatures/permissions.py @@ -2,7 +2,6 @@ from __future__ import absolute_import from django.utils.translation import ugettext_lazy as _ -from permissions.api import register_permission, set_namespace_title from permissions.models import PermissionNamespace, Permission document_signatures_namespace = PermissionNamespace('document_signatures', _(u'Document signatures')) diff --git a/apps/documents/__init__.py b/apps/documents/__init__.py index 9f8fc1a59a..1629fe63af 100644 --- a/apps/documents/__init__.py +++ b/apps/documents/__init__.py @@ -1,3 +1,5 @@ +from __future__ import absolute_import + import tempfile from django.utils.translation import ugettext_lazy as _ @@ -13,22 +15,22 @@ from metadata.api import get_metadata_string from project_setup.api import register_setup from acls.models import class_permissions -from documents.models import (Document, DocumentPage, +from .models import (Document, DocumentPage, DocumentPageTransformation, DocumentType, DocumentTypeFilename, DocumentVersion) -from documents.literals import (PERMISSION_DOCUMENT_CREATE, +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, PERMISSION_DOCUMENT_EDIT, PERMISSION_DOCUMENT_VERSION_REVERT, PERMISSION_DOCUMENT_TYPE_EDIT, PERMISSION_DOCUMENT_TYPE_DELETE, PERMISSION_DOCUMENT_TYPE_CREATE, PERMISSION_DOCUMENT_TYPE_VIEW) -from documents.literals import (HISTORY_DOCUMENT_CREATED, +from .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 -from documents.widgets import document_thumbnail +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 # Document page links expressions def is_first_page(context): diff --git a/apps/documents/admin.py b/apps/documents/admin.py index 8fc0e838bb..40ac5d0a2b 100644 --- a/apps/documents/admin.py +++ b/apps/documents/admin.py @@ -1,8 +1,10 @@ +from __future__ import absolute_import + from django.contrib import admin from metadata.admin import DocumentMetadataInline -from documents.models import (DocumentType, Document, +from .models import (DocumentType, Document, DocumentTypeFilename, DocumentPage, DocumentPageTransformation, RecentDocument, DocumentVersion) diff --git a/apps/documents/forms.py b/apps/documents/forms.py index 63e4470a55..88cfa46395 100644 --- a/apps/documents/forms.py +++ b/apps/documents/forms.py @@ -1,3 +1,5 @@ +from __future__ import absolute_import + from django import forms from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext @@ -11,11 +13,11 @@ from common.conf.settings import DEFAULT_PAPER_SIZE from common.conf.settings import DEFAULT_PAGE_ORIENTATION from common.widgets import TextAreaDiv -from documents.models import (Document, DocumentType, +from .models import (Document, DocumentType, DocumentPage, DocumentPageTransformation, DocumentTypeFilename, DocumentVersion) -from documents.widgets import document_html_widget -from documents.literals import (RELEASE_LEVEL_FINAL, RELEASE_LEVEL_CHOICES) +from .widgets import document_html_widget +from .literals import (RELEASE_LEVEL_FINAL, RELEASE_LEVEL_CHOICES) # Document page forms class DocumentPageTransformationForm(forms.ModelForm): diff --git a/apps/documents/literals.py b/apps/documents/literals.py index a85ce6119d..0f2aea6d98 100644 --- a/apps/documents/literals.py +++ b/apps/documents/literals.py @@ -1,33 +1,10 @@ from django.utils.translation import ugettext_lazy as _ -from permissions.models import PermissionNamespace, Permission - - PICTURE_ERROR_SMALL = u'picture_error.png' PICTURE_ERROR_MEDIUM = u'1297211435_error.png' PICTURE_UNKNOWN_SMALL = u'1299549572_unknown2.png' PICTURE_UNKNOWN_MEDIUM = u'1299549805_unknown.png' -document_namespace = PermissionNamespace('documents', _(u'Documents')) - -PERMISSION_DOCUMENT_CREATE = Permission.objects.register(document_namespace, 'document_create', _(u'Create documents')) -PERMISSION_DOCUMENT_PROPERTIES_EDIT = Permission.objects.register(document_namespace, 'document_properties_edit', _(u'Edit document properties')) -PERMISSION_DOCUMENT_EDIT = Permission.objects.register(document_namespace, 'document_edit', _(u'Edit documents')) -PERMISSION_DOCUMENT_VIEW = Permission.objects.register(document_namespace, 'document_view', _(u'View documents')) -PERMISSION_DOCUMENT_DELETE = Permission.objects.register(document_namespace, 'document_delete', _(u'Delete documents')) -PERMISSION_DOCUMENT_DOWNLOAD = Permission.objects.register(document_namespace, 'document_download', _(u'Download documents')) -PERMISSION_DOCUMENT_TRANSFORM = Permission.objects.register(document_namespace, 'document_transform', _(u'Transform documents')) -PERMISSION_DOCUMENT_TOOLS = Permission.objects.register(document_namespace, 'document_tools', _(u'Execute document modifying tools')) -PERMISSION_DOCUMENT_VERSION_REVERT = Permission.objects.register(document_namespace, 'document_version_revert', _(u'Revert documents to a previous version')) - -documents_setup_namespace = PermissionNamespace('documents_setup', _(u'Documents setup')) - -PERMISSION_DOCUMENT_TYPE_VIEW = Permission.objects.register(documents_setup_namespace, 'document_type_view', _(u'View document types')) -PERMISSION_DOCUMENT_TYPE_EDIT = Permission.objects.register(documents_setup_namespace, 'document_type_edit', _(u'Edit document types')) -PERMISSION_DOCUMENT_TYPE_DELETE = Permission.objects.register(documents_setup_namespace, 'document_type_delete', _(u'Delete document types')) -PERMISSION_DOCUMENT_TYPE_CREATE = Permission.objects.register(documents_setup_namespace, 'document_type_create', _(u'Create document types')) - - HISTORY_DOCUMENT_CREATED = { 'namespace': 'documents', 'name': 'document_created', 'label': _(u'Document creation'), diff --git a/apps/documents/managers.py b/apps/documents/managers.py index bdc62ddd72..8c07b5ec54 100644 --- a/apps/documents/managers.py +++ b/apps/documents/managers.py @@ -1,9 +1,11 @@ +from __future__ import absolute_import + from ast import literal_eval from datetime import datetime from django.db import models -from documents.conf.settings import RECENT_COUNT +from .conf.settings import RECENT_COUNT class RecentDocumentManager(models.Manager): diff --git a/apps/documents/models.py b/apps/documents/models.py index 2255d487fe..713132db62 100644 --- a/apps/documents/models.py +++ b/apps/documents/models.py @@ -1,3 +1,5 @@ +from __future__ import absolute_import + import os import tempfile import hashlib @@ -27,18 +29,13 @@ from mimetype.api import (get_mimetype, get_icon_file_path, from converter.literals import (DEFAULT_ZOOM_LEVEL, DEFAULT_ROTATION, DEFAULT_PAGE_NUMBER) -from documents.conf.settings import CHECKSUM_FUNCTION -from documents.conf.settings import UUID_FUNCTION -from documents.conf.settings import STORAGE_BACKEND -from documents.conf.settings import PREVIEW_SIZE -from documents.conf.settings import DISPLAY_SIZE -from documents.conf.settings import CACHE_PATH -from documents.conf.settings import ZOOM_MAX_LEVEL -from documents.conf.settings import ZOOM_MIN_LEVEL -from documents.managers import RecentDocumentManager, \ - DocumentPageTransformationManager -from documents.utils import document_save_to_temp_dir -from documents.literals import (RELEASE_LEVEL_FINAL, RELEASE_LEVEL_CHOICES, +from .conf.settings import (CHECKSUM_FUNCTION, UUID_FUNCTION, + STORAGE_BACKEND, PREVIEW_SIZE, DISPLAY_SIZE, CACHE_PATH, + ZOOM_MAX_LEVEL, ZOOM_MIN_LEVEL) +from .managers import (RecentDocumentManager, + DocumentPageTransformationManager) +from .utils import document_save_to_temp_dir +from .literals import (RELEASE_LEVEL_FINAL, RELEASE_LEVEL_CHOICES, VERSION_UPDATE_MAJOR, VERSION_UPDATE_MINOR, VERSION_UPDATE_MICRO) # document image cache name hash function diff --git a/apps/documents/permissions.py b/apps/documents/permissions.py new file mode 100644 index 0000000000..4dc1657570 --- /dev/null +++ b/apps/documents/permissions.py @@ -0,0 +1,24 @@ +from __future__ import absolute_import + +from django.utils.translation import ugettext_lazy as _ + +from permissions.models import PermissionNamespace, Permission + +document_namespace = PermissionNamespace('documents', _(u'Documents')) + +PERMISSION_DOCUMENT_CREATE = Permission.objects.register(document_namespace, 'document_create', _(u'Create documents')) +PERMISSION_DOCUMENT_PROPERTIES_EDIT = Permission.objects.register(document_namespace, 'document_properties_edit', _(u'Edit document properties')) +PERMISSION_DOCUMENT_EDIT = Permission.objects.register(document_namespace, 'document_edit', _(u'Edit documents')) +PERMISSION_DOCUMENT_VIEW = Permission.objects.register(document_namespace, 'document_view', _(u'View documents')) +PERMISSION_DOCUMENT_DELETE = Permission.objects.register(document_namespace, 'document_delete', _(u'Delete documents')) +PERMISSION_DOCUMENT_DOWNLOAD = Permission.objects.register(document_namespace, 'document_download', _(u'Download documents')) +PERMISSION_DOCUMENT_TRANSFORM = Permission.objects.register(document_namespace, 'document_transform', _(u'Transform documents')) +PERMISSION_DOCUMENT_TOOLS = Permission.objects.register(document_namespace, 'document_tools', _(u'Execute document modifying tools')) +PERMISSION_DOCUMENT_VERSION_REVERT = Permission.objects.register(document_namespace, 'document_version_revert', _(u'Revert documents to a previous version')) + +documents_setup_namespace = PermissionNamespace('documents_setup', _(u'Documents setup')) + +PERMISSION_DOCUMENT_TYPE_VIEW = Permission.objects.register(documents_setup_namespace, 'document_type_view', _(u'View document types')) +PERMISSION_DOCUMENT_TYPE_EDIT = Permission.objects.register(documents_setup_namespace, 'document_type_edit', _(u'Edit document types')) +PERMISSION_DOCUMENT_TYPE_DELETE = Permission.objects.register(documents_setup_namespace, 'document_type_delete', _(u'Delete document types')) +PERMISSION_DOCUMENT_TYPE_CREATE = Permission.objects.register(documents_setup_namespace, 'document_type_create', _(u'Create document types')) diff --git a/apps/documents/statistics.py b/apps/documents/statistics.py index 8787c7eb22..508d699a49 100644 --- a/apps/documents/statistics.py +++ b/apps/documents/statistics.py @@ -1,10 +1,12 @@ +from __future__ import absolute_import + from django.utils.translation import ugettext_lazy as _ +from django.db.models import Avg, Count, Min, Max from common.utils import pretty_size, pretty_size_10 -from documents.conf.settings import STORAGE_BACKEND -from documents.models import Document, DocumentType, DocumentPage, DocumentVersion -from django.db.models import Avg, Count, Min, Max +from .conf.settings import STORAGE_BACKEND +from .models import Document, DocumentType, DocumentPage, DocumentVersion def get_used_size(path, file_list): diff --git a/apps/documents/tests.py b/apps/documents/tests.py index 72da245be4..8f03074fa6 100644 --- a/apps/documents/tests.py +++ b/apps/documents/tests.py @@ -1,3 +1,5 @@ +from __future__ import absolute_import + import os from django.utils import unittest diff --git a/apps/documents/urls.py b/apps/documents/urls.py index 14193c1d8a..8818543380 100644 --- a/apps/documents/urls.py +++ b/apps/documents/urls.py @@ -1,10 +1,9 @@ +from __future__ import absolute_import + from django.conf.urls.defaults import patterns, url -from documents.conf.settings import PREVIEW_SIZE -from documents.conf.settings import PRINT_SIZE -from documents.conf.settings import THUMBNAIL_SIZE -from documents.conf.settings import DISPLAY_SIZE -from documents.conf.settings import MULTIPAGE_PREVIEW_SIZE +from .conf.settings import (PREVIEW_SIZE, PRINT_SIZE, THUMBNAIL_SIZE, + DISPLAY_SIZE, MULTIPAGE_PREVIEW_SIZE) urlpatterns = patterns('documents.views', url(r'^list/$', 'document_list', (), 'document_list'), diff --git a/apps/documents/views.py b/apps/documents/views.py index 1c2acaef97..5bb4266a35 100644 --- a/apps/documents/views.py +++ b/apps/documents/views.py @@ -1,3 +1,5 @@ +from __future__ import absolute_import + import urlparse import copy import logging @@ -29,41 +31,30 @@ from document_indexing.api import update_indexes, delete_indexes from history.api import create_history from acls.models import AccessEntry, PermissionDenied -from documents.conf.settings import PREVIEW_SIZE -from documents.conf.settings import STORAGE_BACKEND -from documents.conf.settings import ZOOM_PERCENT_STEP -from documents.conf.settings import ZOOM_MAX_LEVEL -from documents.conf.settings import ZOOM_MIN_LEVEL -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, +from .conf.settings import (PREVIEW_SIZE, STORAGE_BACKEND, ZOOM_PERCENT_STEP, + ZOOM_MAX_LEVEL, ZOOM_MIN_LEVEL, ROTATION_STEP, PRINT_SIZE, + RECENT_COUNT) +from .permissions 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, PERMISSION_DOCUMENT_TYPE_VIEW) -from documents.literals import (HISTORY_DOCUMENT_CREATED, + 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) +from .literals import (HISTORY_DOCUMENT_CREATED, HISTORY_DOCUMENT_EDITED, HISTORY_DOCUMENT_DELETED) - -from documents.forms import (DocumentTypeSelectForm, +from .forms import (DocumentTypeSelectForm, DocumentForm_edit, DocumentPropertiesForm, DocumentPreviewForm, DocumentPageForm, DocumentPageTransformationForm, DocumentContentForm, DocumentPageForm_edit, DocumentPageForm_text, PrintForm, DocumentTypeForm, DocumentTypeFilenameForm, DocumentTypeFilenameForm_create) -from documents.wizards import DocumentCreateWizard -from documents.models import (Document, DocumentType, DocumentPage, +from .wizards import DocumentCreateWizard +from .models import (Document, DocumentType, DocumentPage, DocumentPageTransformation, RecentDocument, DocumentTypeFilename, DocumentVersion) -# Document type permissions -from documents.literals import PERMISSION_DOCUMENT_TYPE_EDIT, \ - PERMISSION_DOCUMENT_TYPE_DELETE, PERMISSION_DOCUMENT_TYPE_CREATE - logger = logging.getLogger(__name__) diff --git a/apps/documents/widgets.py b/apps/documents/widgets.py index 031461047f..0bd9ce473e 100644 --- a/apps/documents/widgets.py +++ b/apps/documents/widgets.py @@ -1,3 +1,5 @@ +from __future__ import absolute_import + from django.utils.safestring import mark_safe from django.conf import settings from django.utils.translation import ugettext_lazy as _ @@ -9,7 +11,7 @@ from converter.literals import DEFAULT_ZOOM_LEVEL, DEFAULT_ROTATION, \ from converter.exceptions import UnknownFileFormat, UnkownConvertError from mimetype.api import get_error_icon_url -from documents.conf.settings import DISPLAY_SIZE +from .conf.settings import DISPLAY_SIZE def document_thumbnail(document): diff --git a/apps/documents/wizards.py b/apps/documents/wizards.py index a61ba4960a..d78252dfd7 100644 --- a/apps/documents/wizards.py +++ b/apps/documents/wizards.py @@ -1,3 +1,5 @@ +from __future__ import absolute_import + from django.utils.translation import ugettext_lazy as _ from django.core.urlresolvers import reverse from django.http import HttpResponseRedirect @@ -7,7 +9,7 @@ from common.utils import urlquote from metadata.forms import MetadataSelectionForm, MetadataFormSet -from documents.forms import DocumentTypeSelectForm +from .forms import DocumentTypeSelectForm class DocumentCreateWizard(BoundFormWizard): diff --git a/apps/folders/__init__.py b/apps/folders/__init__.py index 0f8cb64a3c..5c894224be 100644 --- a/apps/folders/__init__.py +++ b/apps/folders/__init__.py @@ -1,9 +1,11 @@ +from __future__ import absolute_import + from django.utils.translation import ugettext_lazy as _ from navigation.api import (register_links, register_top_menu, register_multi_item_links, register_sidebar_template) from documents.models import Document -from documents.literals import PERMISSION_DOCUMENT_VIEW +from documents.permissions import PERMISSION_DOCUMENT_VIEW from acls.models import class_permissions from acls import ACLS_EDIT_ACL, ACLS_VIEW_ACL diff --git a/apps/folders/admin.py b/apps/folders/admin.py index 8304db276d..f558ec7922 100644 --- a/apps/folders/admin.py +++ b/apps/folders/admin.py @@ -1,6 +1,8 @@ +from __future__ import absolute_import + from django.contrib import admin -from folders.models import Folder, FolderDocument +from .models import Folder, FolderDocument class FolderDocumentInline(admin.StackedInline): diff --git a/apps/folders/forms.py b/apps/folders/forms.py index a199b14d9e..0c3ef6a13e 100644 --- a/apps/folders/forms.py +++ b/apps/folders/forms.py @@ -1,7 +1,9 @@ +from __future__ import absolute_import + from django import forms from django.utils.translation import ugettext_lazy as _ -from folders.models import Folder +from .models import Folder class FolderForm(forms.ModelForm): diff --git a/apps/folders/views.py b/apps/folders/views.py index 6b3cdde802..be7373b5cb 100644 --- a/apps/folders/views.py +++ b/apps/folders/views.py @@ -1,4 +1,5 @@ from __future__ import absolute_import + import logging from django.utils.translation import ugettext_lazy as _ @@ -10,7 +11,7 @@ from django.views.generic.list_detail import object_list from django.core.urlresolvers import reverse from django.core.exceptions import PermissionDenied -from documents.literals import PERMISSION_DOCUMENT_VIEW +from documents.permissions import PERMISSION_DOCUMENT_VIEW from documents.models import Document from documents.views import document_list from permissions import Permission diff --git a/apps/history/__init__.py b/apps/history/__init__.py index 5ae801fa03..7e5999508a 100644 --- a/apps/history/__init__.py +++ b/apps/history/__init__.py @@ -1,11 +1,10 @@ +from __future__ import absolute_import + from django.utils.translation import ugettext_lazy as _ from project_tools.api import register_tool -from permissions.models import PermissionNamespace, Permission -history_namespace = PermissionNamespace('history', _(u'History')) - -PERMISSION_HISTORY_VIEW = Permission.objects.register(history_namespace, 'history_view', _(u'Access the history app')) +from .permissions import PERMISSION_HISTORY_VIEW # TODO: support permissions AND operand # encapsulate into document_history_list and require DOCUMENT_VIEW and HISTORY_VIEW diff --git a/apps/history/api.py b/apps/history/api.py index 467f4c8035..03db0f15d4 100644 --- a/apps/history/api.py +++ b/apps/history/api.py @@ -1,3 +1,5 @@ +from __future__ import absolute_import + import pickle import json @@ -14,8 +16,8 @@ from django.core import serializers from django.shortcuts import get_object_or_404 from django.db import models -from history.models import HistoryType, History -from history.runtime_data import history_types_dict +from .models import HistoryType, History +from .runtime_data import history_types_dict @transaction.commit_manually diff --git a/apps/history/forms.py b/apps/history/forms.py index 3cad7395d3..bac7cb503c 100644 --- a/apps/history/forms.py +++ b/apps/history/forms.py @@ -1,6 +1,8 @@ +from __future__ import absolute_import + from common.forms import DetailForm -from history.models import History +from .models import History class HistoryDetailForm(DetailForm): diff --git a/apps/history/models.py b/apps/history/models.py index b45a77091b..82d289594f 100644 --- a/apps/history/models.py +++ b/apps/history/models.py @@ -1,3 +1,5 @@ +from __future__ import absolute_import + import json import pickle from datetime import datetime @@ -9,7 +11,7 @@ from django.utils.translation import ugettext_lazy as _ from django.core import serializers #from history.managers import HistoryManager -from history.runtime_data import history_types_dict +from .runtime_data import history_types_dict class HistoryType(models.Model): diff --git a/apps/history/permissions.py b/apps/history/permissions.py new file mode 100644 index 0000000000..4d7b37a1eb --- /dev/null +++ b/apps/history/permissions.py @@ -0,0 +1,9 @@ +from __future__ import absolute_import + +from django.utils.translation import ugettext_lazy as _ + +from permissions.models import PermissionNamespace, Permission + +history_namespace = PermissionNamespace('history', _(u'History')) + +PERMISSION_HISTORY_VIEW = Permission.objects.register(history_namespace, 'history_view', _(u'Access the history app')) diff --git a/apps/history/views.py b/apps/history/views.py index dd78079e69..ffd85e7e68 100644 --- a/apps/history/views.py +++ b/apps/history/views.py @@ -1,3 +1,5 @@ +from __future__ import absolute_import + from django.shortcuts import render_to_response from django.template import RequestContext from django.utils.translation import ugettext_lazy as _ @@ -9,10 +11,10 @@ from django.http import Http404 from permissions.models import Permission from common.utils import encapsulate -from history.models import History -from history.forms import HistoryDetailForm -from history import PERMISSION_HISTORY_VIEW -from history.widgets import history_entry_object_link, history_entry_summary +from .models import History +from .forms import HistoryDetailForm +from .permissions import PERMISSION_HISTORY_VIEW +from .widgets import history_entry_object_link, history_entry_summary def history_list(request): diff --git a/apps/linking/__init__.py b/apps/linking/__init__.py index 63895ab171..73e4b1cecb 100644 --- a/apps/linking/__init__.py +++ b/apps/linking/__init__.py @@ -3,21 +3,16 @@ from __future__ import absolute_import from django.utils.translation import ugettext_lazy as _ from navigation.api import register_links, register_sidebar_template -from permissions.models import PermissionNamespace, Permission from project_setup.api import register_setup -from documents.literals import PERMISSION_DOCUMENT_VIEW +from documents.permissions import PERMISSION_DOCUMENT_VIEW from documents.models import Document from acls.models import class_permissions from acls import ACLS_EDIT_ACL, ACLS_VIEW_ACL from .models import SmartLink, SmartLinkCondition - -linking_namespace = PermissionNamespace('linking', _(u'Smart links')) - -PERMISSION_SMART_LINK_VIEW = Permission.objects.register(linking_namespace, 'smart_link_view', _(u'View existing smart links')) -PERMISSION_SMART_LINK_CREATE = Permission.objects.register(linking_namespace, 'smart_link_create', _(u'Create new smart links')) -PERMISSION_SMART_LINK_DELETE = Permission.objects.register(linking_namespace, 'smart_link_delete', _(u'Delete smart links')) -PERMISSION_SMART_LINK_EDIT = Permission.objects.register(linking_namespace, 'smart_link_edit', _(u'Edit smart links')) +from .permissions import (PERMISSION_SMART_LINK_VIEW, + PERMISSION_SMART_LINK_CREATE, PERMISSION_SMART_LINK_DELETE, + PERMISSION_SMART_LINK_EDIT) smart_link_instance_view_link = {'text': _(u'smart links actions'), 'view': 'smart_link_instance_view', 'famfam': 'page_link', 'permissions': [PERMISSION_DOCUMENT_VIEW]} smart_link_instances_for_document = {'text': _(u'smart links'), 'view': 'smart_link_instances_for_document', 'args': 'object.pk', 'famfam': 'page_link', 'permissions': [PERMISSION_DOCUMENT_VIEW]} diff --git a/apps/linking/models.py b/apps/linking/models.py index 18b145b936..2c75642c9e 100644 --- a/apps/linking/models.py +++ b/apps/linking/models.py @@ -4,8 +4,8 @@ from django.db import models from django.utils.translation import ugettext_lazy as _ from .managers import SmartLinkManager -from .literals import OPERATOR_CHOICES, INCLUSION_AND, \ - INCLUSION_CHOICES +from .literals import (OPERATOR_CHOICES, INCLUSION_AND, + INCLUSION_CHOICES) class SmartLink(models.Model): diff --git a/apps/linking/permissions.py b/apps/linking/permissions.py new file mode 100644 index 0000000000..c9b889b084 --- /dev/null +++ b/apps/linking/permissions.py @@ -0,0 +1,12 @@ +from __future__ import absolute_import + +from django.utils.translation import ugettext_lazy as _ + +from permissions.models import PermissionNamespace, Permission + +linking_namespace = PermissionNamespace('linking', _(u'Smart links')) + +PERMISSION_SMART_LINK_VIEW = Permission.objects.register(linking_namespace, 'smart_link_view', _(u'View existing smart links')) +PERMISSION_SMART_LINK_CREATE = Permission.objects.register(linking_namespace, 'smart_link_create', _(u'Create new smart links')) +PERMISSION_SMART_LINK_DELETE = Permission.objects.register(linking_namespace, 'smart_link_delete', _(u'Delete smart links')) +PERMISSION_SMART_LINK_EDIT = Permission.objects.register(linking_namespace, 'smart_link_edit', _(u'Edit smart links')) diff --git a/apps/linking/views.py b/apps/linking/views.py index 2e5d72a626..7aacd67a66 100644 --- a/apps/linking/views.py +++ b/apps/linking/views.py @@ -1,4 +1,5 @@ -from __future__ import absolute_import +from __future__ import absolute_import + import logging from django.utils.translation import ugettext_lazy as _ @@ -12,7 +13,7 @@ from common.utils import generate_choices_w_labels, encapsulate from common.widgets import two_state_template from documents.models import Document from documents.views import document_list -from documents.literals import PERMISSION_DOCUMENT_VIEW +from documents.permissions import PERMISSION_DOCUMENT_VIEW from permissions.models import Permission from acls.views import acl_new_holder_for, acl_list_for, acl_detail_for from acls.models import AccessEntry, PermissionDenied @@ -22,7 +23,7 @@ from .conf.settings import SHOW_EMPTY_SMART_LINKS from .forms import (SmartLinkInstanceForm, SmartLinkForm, SmartLinkConditionForm) from . import smart_link_instance_view_link -from . import (PERMISSION_SMART_LINK_VIEW, +from .permissions import (PERMISSION_SMART_LINK_VIEW, PERMISSION_SMART_LINK_CREATE, PERMISSION_SMART_LINK_DELETE, PERMISSION_SMART_LINK_EDIT) diff --git a/apps/lock_manager/__init__.py b/apps/lock_manager/__init__.py index 34913f856f..61fe7fbf78 100644 --- a/apps/lock_manager/__init__.py +++ b/apps/lock_manager/__init__.py @@ -1,4 +1,6 @@ -from lock_manager.exceptions import LockError -from lock_manager.models import Lock as LockModel +from __future__ import absolute_import + +from .exceptions import LockError +from .models import Lock as LockModel Lock = LockModel.objects diff --git a/apps/lock_manager/admin.py b/apps/lock_manager/admin.py index 12dbee8fe1..d8c353e7e3 100644 --- a/apps/lock_manager/admin.py +++ b/apps/lock_manager/admin.py @@ -1,6 +1,8 @@ +from __future__ import absolute_import + from django.contrib import admin -from lock_manager.models import Lock +from .models import Lock class LockAdmin(admin.ModelAdmin): diff --git a/apps/lock_manager/managers.py b/apps/lock_manager/managers.py index f356be42dd..f5613110f4 100644 --- a/apps/lock_manager/managers.py +++ b/apps/lock_manager/managers.py @@ -1,3 +1,5 @@ +from __future__ import absolute_import + import logging import datetime @@ -6,7 +8,7 @@ from django.db.utils import IntegrityError from django.db import transaction from django.db import models -from lock_manager.exceptions import LockError +from .exceptions import LockError logger = logging.getLogger(__name__) diff --git a/apps/lock_manager/models.py b/apps/lock_manager/models.py index 535d3366a6..25188380c7 100644 --- a/apps/lock_manager/models.py +++ b/apps/lock_manager/models.py @@ -1,10 +1,12 @@ +from __future__ import absolute_import + import datetime from django.db import models from django.utils.translation import ugettext_lazy as _ -from lock_manager.managers import LockManager -from lock_manager.conf.settings import DEFAULT_LOCK_TIMEOUT +from .managers import LockManager +from .conf.settings import DEFAULT_LOCK_TIMEOUT class Lock(models.Model): diff --git a/apps/main/__init__.py b/apps/main/__init__.py index 822a2c8cfa..6da73f8a40 100644 --- a/apps/main/__init__.py +++ b/apps/main/__init__.py @@ -1,3 +1,5 @@ +from __future__ import absolute_import + from django.utils.translation import ugettext_lazy as _ from navigation.api import register_top_menu @@ -5,8 +7,7 @@ from navigation.api import register_links from project_setup.api import register_setup from project_tools.api import register_tool -from main.conf.settings import SIDE_BAR_SEARCH -from main.conf.settings import DISABLE_HOME_VIEW +from .conf.settings import SIDE_BAR_SEARCH, DISABLE_HOME_VIEW __author__ = 'Roberto Rosario' __copyright__ = 'Copyright 2011 Roberto Rosario' @@ -24,10 +25,10 @@ __version_info__ = { 'serial': 0 } + def is_superuser(context): return context['request'].user.is_staff or context['request'].user.is_superuser - maintenance_menu = {'text': _(u'maintenance'), 'view': 'maintenance_menu', 'famfam': 'wrench', 'icon': 'wrench.png'} statistics = {'text': _(u'statistics'), 'view': 'statistics', 'famfam': 'table', 'icon': 'blackboard_sum.png'} diagnostics = {'text': _(u'diagnostics'), 'view': 'diagnostics', 'famfam': 'pill', 'icon': 'pill.png'} @@ -52,7 +53,6 @@ def get_version(): vers.append('%(releaselevel)s%(serial)i' % __version_info__) return ''.join(vers) - __version__ = get_version() register_setup(admin_site) diff --git a/apps/main/views.py b/apps/main/views.py index e4205b5f38..316b4b6e6d 100644 --- a/apps/main/views.py +++ b/apps/main/views.py @@ -1,3 +1,5 @@ +from __future__ import absolute_import + from django.shortcuts import render_to_response from django.template import RequestContext from django.utils.translation import ugettext_lazy as _ @@ -9,8 +11,8 @@ from documents.statistics import get_statistics as documents_statistics from ocr.statistics import get_statistics as ocr_statistics from permissions.models import Permission -from main.api import diagnostics, tools -from main.conf.settings import DISABLE_HOME_VIEW +from .api import diagnostics, tools +from .conf.settings import DISABLE_HOME_VIEW def home(request): diff --git a/apps/metadata/__init__.py b/apps/metadata/__init__.py index af514ca648..60439c2924 100644 --- a/apps/metadata/__init__.py +++ b/apps/metadata/__init__.py @@ -1,31 +1,22 @@ +from __future__ import absolute_import + from django.utils.translation import ugettext_lazy as _ from navigation.api import register_links, register_multi_item_links, \ register_sidebar_template -from permissions.models import Permission, PermissionNamespace from documents.models import Document, DocumentType -from documents.literals import PERMISSION_DOCUMENT_TYPE_EDIT +from documents.permissions import PERMISSION_DOCUMENT_TYPE_EDIT from project_setup.api import register_setup from acls.models import class_permissions -from metadata.models import MetadataType, MetadataSet - -metadata_namespace = PermissionNamespace('metadata', _(u'Metadata')) -PERMISSION_METADATA_DOCUMENT_EDIT = Permission.objects.register(metadata_namespace, 'metadata_document_edit', _(u'Edit a document\'s metadata')) -PERMISSION_METADATA_DOCUMENT_ADD = Permission.objects.register(metadata_namespace, 'metadata_document_add', _(u'Add metadata to a document')) -PERMISSION_METADATA_DOCUMENT_REMOVE = Permission.objects.register(metadata_namespace, 'metadata_document_remove', _(u'Remove metadata from a document')) -PERMISSION_METADATA_DOCUMENT_VIEW = Permission.objects.register(metadata_namespace, 'metadata_document_view', _(u'View metadata from a document')) - -metadata_setup_namespace = PermissionNamespace('metadata_setup', _(u'Metadata setup')) -PERMISSION_METADATA_TYPE_EDIT = Permission.objects.register(metadata_setup_namespace, 'metadata_type_edit', _(u'Edit metadata types')) -PERMISSION_METADATA_TYPE_CREATE = Permission.objects.register(metadata_setup_namespace, 'metadata_type_create', _(u'Create new metadata types')) -PERMISSION_METADATA_TYPE_DELETE = Permission.objects.register(metadata_setup_namespace, 'metadata_type_delete', _(u'Delete metadata types')) -PERMISSION_METADATA_TYPE_VIEW = Permission.objects.register(metadata_setup_namespace, 'metadata_type_view', _(u'View metadata types')) - -PERMISSION_METADATA_SET_EDIT = Permission.objects.register(metadata_setup_namespace, 'metadata_set_edit', _(u'Edit metadata sets')) -PERMISSION_METADATA_SET_CREATE = Permission.objects.register(metadata_setup_namespace, 'metadata_set_create', _(u'Create new metadata sets')) -PERMISSION_METADATA_SET_DELETE = Permission.objects.register(metadata_setup_namespace, 'metadata_set_delete', _(u'Delete metadata sets')) -PERMISSION_METADATA_SET_VIEW = Permission.objects.register(metadata_setup_namespace, 'metadata_set_view', _(u'View metadata sets')) +from .models import MetadataType, MetadataSet +from .permissions import (PERMISSION_METADATA_DOCUMENT_EDIT, + PERMISSION_METADATA_DOCUMENT_ADD, PERMISSION_METADATA_DOCUMENT_REMOVE, + PERMISSION_METADATA_DOCUMENT_VIEW, PERMISSION_METADATA_TYPE_EDIT, + PERMISSION_METADATA_TYPE_CREATE, PERMISSION_METADATA_TYPE_DELETE, + PERMISSION_METADATA_TYPE_VIEW, PERMISSION_METADATA_SET_EDIT, + PERMISSION_METADATA_SET_CREATE, PERMISSION_METADATA_SET_DELETE, + PERMISSION_METADATA_SET_VIEW) metadata_edit = {'text': _(u'edit metadata'), 'view': 'metadata_edit', 'args': 'object.pk', 'famfam': 'xhtml_go', 'permissions': [PERMISSION_METADATA_DOCUMENT_EDIT]} metadata_view = {'text': _(u'metadata'), 'view': 'metadata_view', 'args': 'object.pk', 'famfam': 'xhtml_go', 'permissions': [PERMISSION_METADATA_DOCUMENT_EDIT], 'children_view_regex': ['metadata']} @@ -47,9 +38,8 @@ setup_metadata_set_create = {'text': _(u'create new'), 'view': 'setup_metadata_s setup_document_type_metadata = {'text': _(u'default metadata'), 'view': 'setup_document_type_metadata', 'args': 'document_type.pk', 'famfam': 'xhtml', 'permissions': [PERMISSION_DOCUMENT_TYPE_EDIT]} -#register_links(Document, [metadata_add, metadata_edit, metadata_remove]) register_links(['metadata_add', 'metadata_edit', 'metadata_remove', 'metadata_view'], [metadata_add, metadata_edit, metadata_remove], menu_name='sidebar') -register_links(Document, [metadata_view], menu_name='form_header') #, metadata_edit, metadata_remove]) +register_links(Document, [metadata_view], menu_name='form_header') 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'], [metadata_multiple_add, metadata_multiple_edit, metadata_multiple_remove]) register_links(MetadataType, [setup_metadata_type_edit, setup_metadata_type_delete]) @@ -69,7 +59,6 @@ register_sidebar_template(['setup_metadata_set_list'], 'metadata_set_help.html') register_setup(setup_metadata_type_list) register_setup(setup_metadata_set_list) - class_permissions(Document, [ PERMISSION_METADATA_DOCUMENT_EDIT, PERMISSION_METADATA_DOCUMENT_ADD, diff --git a/apps/metadata/admin.py b/apps/metadata/admin.py index ac32bdc131..53ca6f69cd 100644 --- a/apps/metadata/admin.py +++ b/apps/metadata/admin.py @@ -1,7 +1,9 @@ +from __future__ import absolute_import + from django.contrib import admin -from metadata.models import MetadataType, MetadataSet, MetadataSetItem, \ - DocumentMetadata, DocumentTypeDefaults +from .models import (MetadataType, MetadataSet, MetadataSetItem, + DocumentMetadata, DocumentTypeDefaults) class MetadataTypeAdmin(admin.ModelAdmin): diff --git a/apps/metadata/api.py b/apps/metadata/api.py index 3208ef7e23..3473cf5bd0 100644 --- a/apps/metadata/api.py +++ b/apps/metadata/api.py @@ -1,14 +1,17 @@ -"""Metadata handling commonalities""" +'''Metadata handling commonalities''' +from __future__ import absolute_import from urllib import unquote_plus from django.shortcuts import get_object_or_404 -from metadata.models import DocumentMetadata, MetadataType +from .models import DocumentMetadata, MetadataType def decode_metadata_from_url(url_dict): - """Parse a URL query string to a list of metadata""" + ''' + Parse a URL query string to a list of metadata + ''' metadata_dict = { 'id': {}, 'value': {} @@ -32,19 +35,19 @@ def decode_metadata_from_url(url_dict): def save_metadata_list(metadata_list, document, create=False): - """ + ''' Take a list of metadata dictionaries and associate them to a document - """ + ''' for item in metadata_list: save_metadata(item, document, create) def save_metadata(metadata_dict, document, create=False): - """ + ''' Take a dictionary of metadata type & value and associate it to a document - """ + ''' if create: # Use matched metadata now to create document metadata document_metadata, created = DocumentMetadata.objects.get_or_create( @@ -78,14 +81,16 @@ def save_metadata(metadata_dict, document, create=False): def metadata_repr(metadata_list): - """Return a printable representation of a metadata list""" + ''' + Return a printable representation of a metadata list + ''' return u', '.join(metadata_repr_as_list(metadata_list)) def metadata_repr_as_list(metadata_list): - """ + ''' Turn a list of metadata into a list of printable representations - """ + ''' output = [] for metadata_dict in metadata_list: try: @@ -98,7 +103,7 @@ def metadata_repr_as_list(metadata_list): def get_metadata_string(document): - """ + ''' Return a formated representation of a document's metadata values - """ + ''' return u', '.join([u'%s - %s' % (metadata.metadata_type, metadata.value) for metadata in DocumentMetadata.objects.filter(document=document).select_related('metadata_type')]) diff --git a/apps/metadata/forms.py b/apps/metadata/forms.py index ce921ee47c..0653880301 100644 --- a/apps/metadata/forms.py +++ b/apps/metadata/forms.py @@ -1,13 +1,13 @@ +from __future__ import absolute_import + from django import forms from django.utils.translation import ugettext_lazy as _ from django.forms.formsets import formset_factory from common.widgets import ScrollableCheckboxSelectMultiple -from metadata.conf.settings import AVAILABLE_MODELS -from metadata.conf.settings import AVAILABLE_FUNCTIONS -from metadata.models import MetadataSet, MetadataType, \ - DocumentTypeDefaults +from .conf.settings import (AVAILABLE_MODELS, AVAILABLE_FUNCTIONS) +from .models import (MetadataSet, MetadataType, DocumentTypeDefaults) class MetadataForm(forms.Form): diff --git a/apps/metadata/models.py b/apps/metadata/models.py index 8b3d6463ea..d827b615e5 100644 --- a/apps/metadata/models.py +++ b/apps/metadata/models.py @@ -1,10 +1,11 @@ +from __future__ import absolute_import + from django.db import models from django.utils.translation import ugettext_lazy as _ from documents.models import Document, DocumentType -from metadata.conf.settings import AVAILABLE_MODELS -from metadata.conf.settings import AVAILABLE_FUNCTIONS +from .conf.settings import (AVAILABLE_MODELS, AVAILABLE_FUNCTIONS) available_models_string = (_(u' Available models: %s') % u','.join([name for name, model in AVAILABLE_MODELS.items()])) if AVAILABLE_MODELS else u'' available_functions_string = (_(u' Available functions: %s') % u','.join([u'%s()' % name for name, function in AVAILABLE_FUNCTIONS.items()])) if AVAILABLE_FUNCTIONS else u'' diff --git a/apps/metadata/permissions.py b/apps/metadata/permissions.py new file mode 100644 index 0000000000..5ed8f9cb43 --- /dev/null +++ b/apps/metadata/permissions.py @@ -0,0 +1,22 @@ +from __future__ import absolute_import + +from django.utils.translation import ugettext_lazy as _ + +from permissions.models import Permission, PermissionNamespace + +metadata_namespace = PermissionNamespace('metadata', _(u'Metadata')) +PERMISSION_METADATA_DOCUMENT_EDIT = Permission.objects.register(metadata_namespace, 'metadata_document_edit', _(u'Edit a document\'s metadata')) +PERMISSION_METADATA_DOCUMENT_ADD = Permission.objects.register(metadata_namespace, 'metadata_document_add', _(u'Add metadata to a document')) +PERMISSION_METADATA_DOCUMENT_REMOVE = Permission.objects.register(metadata_namespace, 'metadata_document_remove', _(u'Remove metadata from a document')) +PERMISSION_METADATA_DOCUMENT_VIEW = Permission.objects.register(metadata_namespace, 'metadata_document_view', _(u'View metadata from a document')) + +metadata_setup_namespace = PermissionNamespace('metadata_setup', _(u'Metadata setup')) +PERMISSION_METADATA_TYPE_EDIT = Permission.objects.register(metadata_setup_namespace, 'metadata_type_edit', _(u'Edit metadata types')) +PERMISSION_METADATA_TYPE_CREATE = Permission.objects.register(metadata_setup_namespace, 'metadata_type_create', _(u'Create new metadata types')) +PERMISSION_METADATA_TYPE_DELETE = Permission.objects.register(metadata_setup_namespace, 'metadata_type_delete', _(u'Delete metadata types')) +PERMISSION_METADATA_TYPE_VIEW = Permission.objects.register(metadata_setup_namespace, 'metadata_type_view', _(u'View metadata types')) + +PERMISSION_METADATA_SET_EDIT = Permission.objects.register(metadata_setup_namespace, 'metadata_set_edit', _(u'Edit metadata sets')) +PERMISSION_METADATA_SET_CREATE = Permission.objects.register(metadata_setup_namespace, 'metadata_set_create', _(u'Create new metadata sets')) +PERMISSION_METADATA_SET_DELETE = Permission.objects.register(metadata_setup_namespace, 'metadata_set_delete', _(u'Delete metadata sets')) +PERMISSION_METADATA_SET_VIEW = Permission.objects.register(metadata_setup_namespace, 'metadata_set_view', _(u'View metadata sets')) diff --git a/apps/metadata/views.py b/apps/metadata/views.py index 11aa0a6b87..101192e1e9 100644 --- a/apps/metadata/views.py +++ b/apps/metadata/views.py @@ -1,3 +1,5 @@ +from __future__ import absolute_import + from django.shortcuts import render_to_response from django.template import RequestContext from django.utils.translation import ugettext_lazy as _ @@ -7,7 +9,7 @@ from django.http import HttpResponseRedirect from django.core.urlresolvers import reverse from django.utils.http import urlencode -from documents.literals import PERMISSION_DOCUMENT_TYPE_EDIT +from documents.permissions import PERMISSION_DOCUMENT_TYPE_EDIT from documents.models import Document, RecentDocument, DocumentType from permissions.models import Permission from document_indexing.api import update_indexes, delete_indexes @@ -15,18 +17,18 @@ from document_indexing.api import update_indexes, delete_indexes from common.utils import generate_choices_w_labels, encapsulate from common.views import assign_remove -from metadata import PERMISSION_METADATA_DOCUMENT_VIEW, \ - PERMISSION_METADATA_DOCUMENT_EDIT, \ - PERMISSION_METADATA_DOCUMENT_ADD, PERMISSION_METADATA_DOCUMENT_REMOVE, \ - PERMISSION_METADATA_TYPE_EDIT, PERMISSION_METADATA_TYPE_CREATE, \ - PERMISSION_METADATA_TYPE_DELETE, PERMISSION_METADATA_TYPE_VIEW, \ - PERMISSION_METADATA_SET_EDIT, PERMISSION_METADATA_SET_CREATE, \ - PERMISSION_METADATA_SET_DELETE, PERMISSION_METADATA_SET_VIEW -from metadata.forms import MetadataFormSet, AddMetadataForm, \ - MetadataRemoveFormSet, MetadataTypeForm, MetadataSetForm -from metadata.api import save_metadata_list -from metadata.models import DocumentMetadata, MetadataType, MetadataSet, \ - MetadataSetItem, DocumentTypeDefaults +from .permissions import (PERMISSION_METADATA_DOCUMENT_EDIT, + PERMISSION_METADATA_DOCUMENT_ADD, PERMISSION_METADATA_DOCUMENT_REMOVE, + PERMISSION_METADATA_DOCUMENT_VIEW, PERMISSION_METADATA_TYPE_EDIT, + PERMISSION_METADATA_TYPE_CREATE, PERMISSION_METADATA_TYPE_DELETE, + PERMISSION_METADATA_TYPE_VIEW, PERMISSION_METADATA_SET_EDIT, + PERMISSION_METADATA_SET_CREATE, PERMISSION_METADATA_SET_DELETE, + PERMISSION_METADATA_SET_VIEW) +from .forms import (MetadataFormSet, AddMetadataForm, + MetadataRemoveFormSet, MetadataTypeForm, MetadataSetForm) +from .api import save_metadata_list +from .models import (DocumentMetadata, MetadataType, MetadataSet, + MetadataSetItem, DocumentTypeDefaults) def metadata_edit(request, document_id=None, document_id_list=None): diff --git a/apps/navigation/templatetags/navigation_tags.py b/apps/navigation/templatetags/navigation_tags.py index 81dd819c13..d29600c978 100644 --- a/apps/navigation/templatetags/navigation_tags.py +++ b/apps/navigation/templatetags/navigation_tags.py @@ -3,15 +3,15 @@ import re import urlparse from django.core.urlresolvers import reverse, NoReverseMatch -from django.template import TemplateSyntaxError, Library, \ - VariableDoesNotExist, Node, Variable +from django.template import (TemplateSyntaxError, Library, + VariableDoesNotExist, Node, Variable) from django.utils.text import unescape_string_literal from django.utils.translation import ugettext as _ from common.utils import urlquote -from navigation.api import object_navigation, multi_object_navigation, \ - top_menu_entries, sidebar_templates +from navigation.api import (object_navigation, multi_object_navigation, + top_menu_entries, sidebar_templates) from navigation.forms import MultiItemForm from navigation.utils import resolve_to_name diff --git a/apps/ocr/__init__.py b/apps/ocr/__init__.py index 052b228821..403202b49f 100644 --- a/apps/ocr/__init__.py +++ b/apps/ocr/__init__.py @@ -1,3 +1,5 @@ +from __future__ import absolute_import + import logging from django.db import transaction @@ -14,21 +16,15 @@ from project_tools.api import register_tool from scheduler.api import register_interval_job -from ocr.conf.settings import AUTOMATIC_OCR -from ocr.conf.settings import QUEUE_PROCESSING_INTERVAL -from ocr.models import DocumentQueue, QueueTransformation, QueueDocument -from ocr.tasks import task_process_document_queues +from .conf.settings import (AUTOMATIC_OCR, QUEUE_PROCESSING_INTERVAL) +from .models import DocumentQueue, QueueTransformation, QueueDocument +from .tasks import task_process_document_queues +from .permissions import (PERMISSION_OCR_DOCUMENT, + PERMISSION_OCR_DOCUMENT_DELETE, PERMISSION_OCR_QUEUE_ENABLE_DISABLE, + PERMISSION_OCR_CLEAN_ALL_PAGES, PERMISSION_OCR_QUEUE_EDIT) logger = logging.getLogger(__name__) -ocr_namespace = PermissionNamespace('ocr', _(u'OCR')) - -PERMISSION_OCR_DOCUMENT = Permission.objects.register(ocr_namespace, 'ocr_document', _(u'Submit documents for OCR')) -PERMISSION_OCR_DOCUMENT_DELETE = Permission.objects.register(ocr_namespace, 'ocr_document_delete', _(u'Delete documents from OCR queue')) -PERMISSION_OCR_QUEUE_ENABLE_DISABLE = Permission.objects.register(ocr_namespace, 'ocr_queue_enable_disable', _(u'Can enable/disable the OCR queue')) -PERMISSION_OCR_CLEAN_ALL_PAGES = Permission.objects.register(ocr_namespace, 'ocr_clean_all_pages', _(u'Can execute the OCR clean up on all document pages')) -PERMISSION_OCR_QUEUE_EDIT = Permission.objects.register(ocr_namespace, 'ocr_queue_edit', _(u'Can edit an OCR queue properties')) - #Links submit_document = {'text': _('submit to OCR queue'), 'view': 'submit_document', 'args': 'object.id', 'famfam': 'hourglass_add', 'permissions': [PERMISSION_OCR_DOCUMENT]} submit_document_multiple = {'text': _('submit to OCR queue'), 'view': 'submit_document_multiple', 'famfam': 'hourglass_add', 'permissions': [PERMISSION_OCR_DOCUMENT]} diff --git a/apps/ocr/api.py b/apps/ocr/api.py index 958ff864eb..33450b0862 100644 --- a/apps/ocr/api.py +++ b/apps/ocr/api.py @@ -1,4 +1,5 @@ #Some code from http://wiki.github.com/hoffstaetter/python-tesseract +from __future__ import absolute_import import codecs import os @@ -13,14 +14,12 @@ from common.conf.settings import TEMPORARY_DIRECTORY from converter.api import convert from documents.models import DocumentPage -from ocr.conf.settings import TESSERACT_PATH -from ocr.conf.settings import TESSERACT_LANGUAGE -from ocr.exceptions import TesseractError, UnpaperError -from ocr.conf.settings import UNPAPER_PATH -from ocr.parsers import parse_document_page -from ocr.parsers.exceptions import ParserError, ParserUnknownFile -from ocr.literals import DEFAULT_OCR_FILE_FORMAT, UNPAPER_FILE_FORMAT, \ - DEFAULT_OCR_FILE_EXTENSION +from .conf.settings import (TESSERACT_PATH, TESSERACT_LANGUAGE, UNPAPER_PATH) +from .exceptions import TesseractError, UnpaperError +from .parsers import parse_document_page +from .parsers.exceptions import ParserError, ParserUnknownFile +from .literals import (DEFAULT_OCR_FILE_FORMAT, UNPAPER_FILE_FORMAT, + DEFAULT_OCR_FILE_EXTENSION) def get_language_backend(): diff --git a/apps/ocr/managers.py b/apps/ocr/managers.py index a1fdb80b8c..13c98ece27 100644 --- a/apps/ocr/managers.py +++ b/apps/ocr/managers.py @@ -1,6 +1,8 @@ +from __future__ import absolute_import + from django.db import models -from ocr.exceptions import AlreadyQueued +from .exceptions import AlreadyQueued class DocumentQueueManager(models.Manager): diff --git a/apps/ocr/models.py b/apps/ocr/models.py index f33ee3fb35..4457c3683d 100644 --- a/apps/ocr/models.py +++ b/apps/ocr/models.py @@ -1,3 +1,5 @@ +from __future__ import absolute_import + from ast import literal_eval from datetime import datetime @@ -13,11 +15,11 @@ from documents.models import Document from converter.api import get_available_transformations_choices from sources.managers import SourceTransformationManager -from ocr.literals import DOCUMENTQUEUE_STATE_STOPPED, \ - DOCUMENTQUEUE_STATE_CHOICES, QUEUEDOCUMENT_STATE_PENDING, \ - QUEUEDOCUMENT_STATE_CHOICES, QUEUEDOCUMENT_STATE_PROCESSING -from ocr.managers import DocumentQueueManager -from ocr.exceptions import ReQueueError +from .literals import (DOCUMENTQUEUE_STATE_STOPPED, + DOCUMENTQUEUE_STATE_CHOICES, QUEUEDOCUMENT_STATE_PENDING, + QUEUEDOCUMENT_STATE_CHOICES, QUEUEDOCUMENT_STATE_PROCESSING) +from .managers import DocumentQueueManager +from .exceptions import ReQueueError class DocumentQueue(models.Model): diff --git a/apps/ocr/permissions.py b/apps/ocr/permissions.py new file mode 100644 index 0000000000..fefb6843ce --- /dev/null +++ b/apps/ocr/permissions.py @@ -0,0 +1,13 @@ +from __future__ import absolute_import + +from django.utils.translation import ugettext_lazy as _ + +from permissions.models import Permission, PermissionNamespace + +ocr_namespace = PermissionNamespace('ocr', _(u'OCR')) + +PERMISSION_OCR_DOCUMENT = Permission.objects.register(ocr_namespace, 'ocr_document', _(u'Submit documents for OCR')) +PERMISSION_OCR_DOCUMENT_DELETE = Permission.objects.register(ocr_namespace, 'ocr_document_delete', _(u'Delete documents from OCR queue')) +PERMISSION_OCR_QUEUE_ENABLE_DISABLE = Permission.objects.register(ocr_namespace, 'ocr_queue_enable_disable', _(u'Can enable/disable the OCR queue')) +PERMISSION_OCR_CLEAN_ALL_PAGES = Permission.objects.register(ocr_namespace, 'ocr_clean_all_pages', _(u'Can execute the OCR clean up on all document pages')) +PERMISSION_OCR_QUEUE_EDIT = Permission.objects.register(ocr_namespace, 'ocr_queue_edit', _(u'Can edit an OCR queue properties')) diff --git a/apps/ocr/tasks.py b/apps/ocr/tasks.py index 7c01a36e4d..14c0ce5152 100644 --- a/apps/ocr/tasks.py +++ b/apps/ocr/tasks.py @@ -1,3 +1,5 @@ +from __future__ import absolute_import + from datetime import timedelta, datetime import platform from time import sleep @@ -9,15 +11,13 @@ from django.db.models import Q from job_processor.api import process_job from lock_manager import Lock, LockError -from ocr.api import do_document_ocr -from ocr.literals import QUEUEDOCUMENT_STATE_PENDING, \ - QUEUEDOCUMENT_STATE_PROCESSING, DOCUMENTQUEUE_STATE_ACTIVE, \ - QUEUEDOCUMENT_STATE_ERROR -from ocr.models import QueueDocument, DocumentQueue -from ocr.conf.settings import NODE_CONCURRENT_EXECUTION -from ocr.conf.settings import REPLICATION_DELAY -from ocr.conf.settings import CACHE_URI -from ocr.conf.settings import QUEUE_PROCESSING_INTERVAL +from .api import do_document_ocr +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, + CACHE_URI, QUEUE_PROCESSING_INTERVAL) 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 26c030970f..6c37f62ce0 100644 --- a/apps/ocr/views.py +++ b/apps/ocr/views.py @@ -1,3 +1,5 @@ +from __future__ import absolute_import + import socket from django.http import HttpResponseRedirect @@ -14,17 +16,16 @@ from documents.models import Document from documents.widgets import document_link, document_thumbnail from common.utils import encapsulate -from ocr import PERMISSION_OCR_DOCUMENT, PERMISSION_OCR_DOCUMENT_DELETE, \ - PERMISSION_OCR_QUEUE_ENABLE_DISABLE, PERMISSION_OCR_CLEAN_ALL_PAGES, \ - PERMISSION_OCR_QUEUE_EDIT - -from ocr.models import DocumentQueue, QueueDocument, QueueTransformation -from ocr.literals import QUEUEDOCUMENT_STATE_PENDING, \ - QUEUEDOCUMENT_STATE_PROCESSING, DOCUMENTQUEUE_STATE_STOPPED, \ - DOCUMENTQUEUE_STATE_ACTIVE -from ocr.exceptions import AlreadyQueued, ReQueueError -from ocr.api import clean_pages -from ocr.forms import QueueTransformationForm, QueueTransformationForm_create +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 .exceptions import AlreadyQueued, ReQueueError +from .api import clean_pages +from .forms import QueueTransformationForm, QueueTransformationForm_create def queue_document_list(request, queue_name='default'): diff --git a/apps/permissions/__init__.py b/apps/permissions/__init__.py index 8099230638..77f5c6119e 100644 --- a/apps/permissions/__init__.py +++ b/apps/permissions/__init__.py @@ -1,3 +1,5 @@ +from __future__ import absolute_import + from django.contrib.auth.models import User from django.db.models.signals import post_save from django.core.exceptions import ObjectDoesNotExist @@ -6,17 +8,11 @@ from django.utils.translation import ugettext_lazy as _ from navigation.api import register_links, register_multi_item_links from project_setup.api import register_setup -from permissions.conf.settings import DEFAULT_ROLES -from permissions.models import Role, Permission, PermissionNamespace - -permissions_namespace = PermissionNamespace('permissions', _(u'Permissions')) - -PERMISSION_ROLE_VIEW = Permission.objects.register(permissions_namespace, 'role_view', _(u'View roles')) -PERMISSION_ROLE_EDIT = Permission.objects.register(permissions_namespace, 'role_edit', _(u'Edit roles')) -PERMISSION_ROLE_CREATE = Permission.objects.register(permissions_namespace, 'role_create', _(u'Create roles')) -PERMISSION_ROLE_DELETE = Permission.objects.register(permissions_namespace, 'role_delete', _(u'Delete roles')) -PERMISSION_PERMISSION_GRANT = Permission.objects.register(permissions_namespace, 'permission_grant', _(u'Grant permissions')) -PERMISSION_PERMISSION_REVOKE = Permission.objects.register(permissions_namespace, 'permission_revoke', _(u'Revoke permissions')) +from .conf.settings import DEFAULT_ROLES +from .models import Role, Permission, PermissionNamespace +from .permissions import (PERMISSION_ROLE_VIEW, PERMISSION_ROLE_EDIT, + PERMISSION_ROLE_CREATE, PERMISSION_ROLE_DELETE, + PERMISSION_PERMISSION_GRANT, PERMISSION_PERMISSION_REVOKE) role_list = {'text': _(u'roles'), 'view': 'role_list', 'famfam': 'medal_gold_1', 'icon': 'medal_gold_1.png', 'permissions': [PERMISSION_ROLE_VIEW]} role_create = {'text': _(u'create new role'), 'view': 'role_create', 'famfam': 'medal_gold_add', 'permissions': [PERMISSION_ROLE_CREATE]} diff --git a/apps/permissions/admin.py b/apps/permissions/admin.py index b20d75331c..e38f1f81d0 100644 --- a/apps/permissions/admin.py +++ b/apps/permissions/admin.py @@ -1,6 +1,8 @@ +from __future__ import absolute_import + from django.contrib import admin -from permissions.models import StoredPermission, PermissionHolder, Role, RoleMember +from .models import StoredPermission, PermissionHolder, Role, RoleMember class PermissionHolderInline(admin.StackedInline): diff --git a/apps/permissions/forms.py b/apps/permissions/forms.py index 87da905a83..b0a6a89008 100644 --- a/apps/permissions/forms.py +++ b/apps/permissions/forms.py @@ -1,8 +1,10 @@ +from __future__ import absolute_import + from django import forms from common.forms import DetailForm -from permissions.models import Role +from .models import Role class RoleForm(forms.ModelForm): diff --git a/apps/permissions/models.py b/apps/permissions/models.py index 6e1a7cafe5..744703f1c3 100644 --- a/apps/permissions/models.py +++ b/apps/permissions/models.py @@ -1,3 +1,5 @@ +from __future__ import absolute_import + import logging from django.db import models @@ -8,7 +10,7 @@ from django.contrib.contenttypes import generic from django.contrib.auth.models import User from django.core.exceptions import PermissionDenied -from permissions.managers import (RoleMemberManager, StoredPermissionManager) +from .managers import (RoleMemberManager, StoredPermissionManager) logger = logging.getLogger(__name__) diff --git a/apps/permissions/permissions.py b/apps/permissions/permissions.py new file mode 100644 index 0000000000..ce97e1e150 --- /dev/null +++ b/apps/permissions/permissions.py @@ -0,0 +1,14 @@ +from __future__ import absolute_import + +from django.utils.translation import ugettext_lazy as _ + +from .models import Permission, PermissionNamespace + +permissions_namespace = PermissionNamespace('permissions', _(u'Permissions')) + +PERMISSION_ROLE_VIEW = Permission.objects.register(permissions_namespace, 'role_view', _(u'View roles')) +PERMISSION_ROLE_EDIT = Permission.objects.register(permissions_namespace, 'role_edit', _(u'Edit roles')) +PERMISSION_ROLE_CREATE = Permission.objects.register(permissions_namespace, 'role_create', _(u'Create roles')) +PERMISSION_ROLE_DELETE = Permission.objects.register(permissions_namespace, 'role_delete', _(u'Delete roles')) +PERMISSION_PERMISSION_GRANT = Permission.objects.register(permissions_namespace, 'permission_grant', _(u'Grant permissions')) +PERMISSION_PERMISSION_REVOKE = Permission.objects.register(permissions_namespace, 'permission_revoke', _(u'Revoke permissions')) diff --git a/apps/permissions/views.py b/apps/permissions/views.py index 3e4cbd4e74..d1fa7c7d04 100644 --- a/apps/permissions/views.py +++ b/apps/permissions/views.py @@ -1,3 +1,5 @@ +from __future__ import absolute_import + import operator import itertools @@ -17,12 +19,12 @@ from common.views import assign_remove from common.utils import generate_choices_w_labels, encapsulate from common.widgets import two_state_template -from permissions.models import Role, Permission, PermissionHolder, RoleMember -from permissions.forms import RoleForm, RoleForm_view -from permissions import PERMISSION_ROLE_VIEW, PERMISSION_ROLE_EDIT, \ - PERMISSION_ROLE_CREATE, PERMISSION_ROLE_DELETE, PERMISSION_PERMISSION_GRANT, \ - PERMISSION_PERMISSION_REVOKE -from permissions.widgets import role_permission_link +from .models import Role, Permission, PermissionHolder, RoleMember +from .forms import RoleForm, RoleForm_view +from .permissions import (PERMISSION_ROLE_VIEW, PERMISSION_ROLE_EDIT, + PERMISSION_ROLE_CREATE, PERMISSION_ROLE_DELETE, + PERMISSION_PERMISSION_GRANT, PERMISSION_PERMISSION_REVOKE) +from .widgets import role_permission_link def role_list(request): diff --git a/apps/project_setup/views.py b/apps/project_setup/views.py index 82f45ac40a..8ab0426572 100644 --- a/apps/project_setup/views.py +++ b/apps/project_setup/views.py @@ -1,10 +1,12 @@ +from __future__ import absolute_import + from django.shortcuts import render_to_response, get_object_or_404 from django.template import RequestContext from django.utils.translation import ugettext_lazy as _ from navigation.widgets import button_navigation_widget -from project_setup.api import setup_items +from .api import setup_items def setup_list(request): diff --git a/apps/project_tools/views.py b/apps/project_tools/views.py index 8bba4fc024..61693a100c 100644 --- a/apps/project_tools/views.py +++ b/apps/project_tools/views.py @@ -1,10 +1,12 @@ +from __future__ import absolute_import + from django.shortcuts import render_to_response, get_object_or_404 from django.template import RequestContext from django.utils.translation import ugettext_lazy as _ from navigation.widgets import button_navigation_widget -from project_tools.api import tool_items +from .api import tool_items def tools_list(request): diff --git a/apps/rest_api/urls.py b/apps/rest_api/urls.py index 34553951a6..315bd5f1bc 100644 --- a/apps/rest_api/urls.py +++ b/apps/rest_api/urls.py @@ -1,10 +1,12 @@ +from __future__ import absolute_import + from django.conf.urls.defaults import patterns, url from djangorestframework.views import ListModelView from djangorestframework.views import ListOrCreateModelView, InstanceModelView -from rest_api.views import APIBase, Version_0, ReadOnlyInstanceModelView, IsZoomable -from rest_api.resources import DocumentResourceSimple +from .views import APIBase, Version_0, ReadOnlyInstanceModelView, IsZoomable +from .resources import DocumentResourceSimple urlpatterns = patterns('', url(r'^$', APIBase.as_view(), name='api-root'), diff --git a/apps/scheduler/api.py b/apps/scheduler/api.py index 5f79d2433b..148320c3ab 100644 --- a/apps/scheduler/api.py +++ b/apps/scheduler/api.py @@ -1,5 +1,7 @@ -from scheduler.runtime import scheduler -from scheduler.exceptions import AlreadyScheduled +from __future__ import absolute_import + +from .runtime import scheduler +from .exceptions import AlreadyScheduled registered_jobs = {} diff --git a/apps/smart_settings/views.py b/apps/smart_settings/views.py index e4d1b4d75a..2db39a143e 100644 --- a/apps/smart_settings/views.py +++ b/apps/smart_settings/views.py @@ -1,3 +1,5 @@ +from __future__ import absolute_import + from django.shortcuts import render_to_response from django.template import RequestContext from django.utils.translation import ugettext_lazy as _ @@ -6,7 +8,7 @@ from django.utils.safestring import mark_safe from common.utils import return_type, encapsulate from common.widgets import exists_with_famfam -from smart_settings.api import settings +from .api import settings def setting_list(request): diff --git a/apps/sources/__init__.py b/apps/sources/__init__.py index 6fb37090f1..8fc456eef5 100644 --- a/apps/sources/__init__.py +++ b/apps/sources/__init__.py @@ -1,3 +1,5 @@ +from __future__ import absolute_import + from django.utils.translation import ugettext_lazy as _ from navigation.api import register_links, \ @@ -6,22 +8,16 @@ from permissions.models import Permission, PermissionNamespace from common.utils import encapsulate from project_setup.api import register_setup from documents.models import Document -from documents.literals import PERMISSION_DOCUMENT_CREATE +from documents.permissions import PERMISSION_DOCUMENT_CREATE from acls.models import class_permissions -from sources.staging import StagingFile -from sources.models import WebForm, StagingFolder, SourceTransformation, \ - WatchFolder -from sources.widgets import staging_file_thumbnail - -sources_setup_namespace = PermissionNamespace('sources_setup', _(u'Sources setup')) -PERMISSION_SOURCES_SETUP_VIEW = Permission.objects.register(sources_setup_namespace, 'sources_setup_view', _(u'View existing document sources')) -PERMISSION_SOURCES_SETUP_EDIT = Permission.objects.register(sources_setup_namespace, 'sources_setup_edit', _(u'Edit document sources')) -PERMISSION_SOURCES_SETUP_DELETE = Permission.objects.register(sources_setup_namespace, 'sources_setup_delete', _(u'Delete document sources')) -PERMISSION_SOURCES_SETUP_CREATE = Permission.objects.register(sources_setup_namespace, 'sources_setup_create', _(u'Create new document sources')) - -sources_namespace = PermissionNamespace('sources', _(u'Sources')) -PERMISSION_DOCUMENT_NEW_VERSION = Permission.objects.register(sources_namespace, 'sources_document_new_version', _(u'Create new document version')) +from .staging import StagingFile +from .models import (WebForm, StagingFolder, SourceTransformation, + WatchFolder) +from .widgets import staging_file_thumbnail +from .permissions import (PERMISSION_SOURCES_SETUP_VIEW, + PERMISSION_SOURCES_SETUP_EDIT, PERMISSION_SOURCES_SETUP_DELETE, + PERMISSION_SOURCES_SETUP_CREATE, PERMISSION_DOCUMENT_NEW_VERSION) staging_file_preview = {'text': _(u'preview'), 'class': 'fancybox-noscaling', 'view': 'staging_file_preview', 'args': ['source.source_type', 'source.pk', 'object.id'], 'famfam': 'zoom'} staging_file_delete = {'text': _(u'delete'), 'view': 'staging_file_delete', 'args': ['source.source_type', 'source.pk', 'object.id'], 'famfam': 'delete', 'keep_query': True} @@ -77,7 +73,6 @@ register_model_list_columns(StagingFile, [ }, ]) - register_setup(setup_sources) class_permissions(Document, [ diff --git a/apps/sources/admin.py b/apps/sources/admin.py index ac03e7c9f8..987ce6d89b 100644 --- a/apps/sources/admin.py +++ b/apps/sources/admin.py @@ -1,6 +1,8 @@ +from __future__ import absolute_import + from django.contrib import admin -from sources.models import StagingFolder, WebForm, SourceTransformation +from .models import StagingFolder, WebForm, SourceTransformation admin.site.register(StagingFolder) admin.site.register(WebForm) diff --git a/apps/sources/forms.py b/apps/sources/forms.py index 4b046994cf..259f900062 100644 --- a/apps/sources/forms.py +++ b/apps/sources/forms.py @@ -1,13 +1,15 @@ +from __future__ import absolute_import + from django import forms from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext from documents.forms import DocumentForm -from sources.models import WebForm, StagingFolder, SourceTransformation, \ - WatchFolder -from sources.widgets import FamFamRadioSelect -from sources.utils import validate_whitelist_blacklist +from .models import (WebForm, StagingFolder, SourceTransformation, + WatchFolder) +from .widgets import FamFamRadioSelect +from .utils import validate_whitelist_blacklist class StagingDocumentForm(DocumentForm): diff --git a/apps/sources/models.py b/apps/sources/models.py index 3d09915617..6a00a8546f 100644 --- a/apps/sources/models.py +++ b/apps/sources/models.py @@ -1,3 +1,5 @@ +from __future__ import absolute_import + from ast import literal_eval from django.db import models @@ -16,13 +18,13 @@ from metadata.models import MetadataType from metadata.api import save_metadata_list from scheduler.api import register_interval_job, remove_job -from sources.managers import SourceTransformationManager -from sources.literals import SOURCE_CHOICES, SOURCE_CHOICES_PLURAL, \ - SOURCE_INTERACTIVE_UNCOMPRESS_CHOICES, SOURCE_CHOICE_WEB_FORM, \ - SOURCE_CHOICE_STAGING, SOURCE_ICON_DISK, SOURCE_ICON_DRIVE, \ - SOURCE_ICON_CHOICES, SOURCE_CHOICE_WATCH, SOURCE_UNCOMPRESS_CHOICES, \ - SOURCE_UNCOMPRESS_CHOICE_Y -from sources.compressed_file import CompressedFile, NotACompressedFile +from .managers import SourceTransformationManager +from .literals import (SOURCE_CHOICES, SOURCE_CHOICES_PLURAL, + SOURCE_INTERACTIVE_UNCOMPRESS_CHOICES, SOURCE_CHOICE_WEB_FORM, + SOURCE_CHOICE_STAGING, SOURCE_ICON_DISK, SOURCE_ICON_DRIVE, + SOURCE_ICON_CHOICES, SOURCE_CHOICE_WATCH, SOURCE_UNCOMPRESS_CHOICES, + SOURCE_UNCOMPRESS_CHOICE_Y) +from .compressed_file import CompressedFile, NotACompressedFile class BaseModel(models.Model): diff --git a/apps/sources/permissions.py b/apps/sources/permissions.py new file mode 100644 index 0000000000..119a366e11 --- /dev/null +++ b/apps/sources/permissions.py @@ -0,0 +1,14 @@ +from __future__ import absolute_import + +from django.utils.translation import ugettext_lazy as _ + +from permissions.models import Permission, PermissionNamespace + +sources_setup_namespace = PermissionNamespace('sources_setup', _(u'Sources setup')) +PERMISSION_SOURCES_SETUP_VIEW = Permission.objects.register(sources_setup_namespace, 'sources_setup_view', _(u'View existing document sources')) +PERMISSION_SOURCES_SETUP_EDIT = Permission.objects.register(sources_setup_namespace, 'sources_setup_edit', _(u'Edit document sources')) +PERMISSION_SOURCES_SETUP_DELETE = Permission.objects.register(sources_setup_namespace, 'sources_setup_delete', _(u'Delete document sources')) +PERMISSION_SOURCES_SETUP_CREATE = Permission.objects.register(sources_setup_namespace, 'sources_setup_create', _(u'Create new document sources')) + +sources_namespace = PermissionNamespace('sources', _(u'Sources')) +PERMISSION_DOCUMENT_NEW_VERSION = Permission.objects.register(sources_namespace, 'sources_document_new_version', _(u'Create new document version')) diff --git a/apps/sources/staging.py b/apps/sources/staging.py index 774bc01db8..ca8c92be9e 100644 --- a/apps/sources/staging.py +++ b/apps/sources/staging.py @@ -1,3 +1,5 @@ +from __future__ import absolute_import + import errno import os import hashlib diff --git a/apps/sources/urls.py b/apps/sources/urls.py index 7baf07a1a9..9b8f6ad59f 100644 --- a/apps/sources/urls.py +++ b/apps/sources/urls.py @@ -1,7 +1,9 @@ +from __future__ import absolute_import + from django.conf.urls.defaults import patterns, url -from sources.literals import SOURCE_CHOICE_WEB_FORM, SOURCE_CHOICE_STAGING, \ - SOURCE_CHOICE_WATCH +from .literals import (SOURCE_CHOICE_WEB_FORM, SOURCE_CHOICE_STAGING, + SOURCE_CHOICE_WATCH) urlpatterns = patterns('sources.views', url(r'^staging_file/type/(?P\w+)/(?P\d+)/(?P\w+)/preview/$', 'staging_file_preview', (), 'staging_file_preview'), diff --git a/apps/sources/views.py b/apps/sources/views.py index b0701cfece..290c467108 100644 --- a/apps/sources/views.py +++ b/apps/sources/views.py @@ -1,3 +1,5 @@ +from __future__ import absolute_import + from django.http import HttpResponseRedirect from django.shortcuts import render_to_response, get_object_or_404 from django.template import RequestContext @@ -8,7 +10,7 @@ from django.utils.translation import ugettext from django.utils.safestring import mark_safe from django.conf import settings -from documents.literals import PERMISSION_DOCUMENT_CREATE +from documents.permissions import PERMISSION_DOCUMENT_CREATE from documents.models import DocumentType, Document from documents.conf.settings import THUMBNAIL_SIZE from metadata.api import decode_metadata_from_url, metadata_repr_as_list @@ -17,18 +19,18 @@ from common.utils import encapsulate import sendfile from acls.models import AccessEntry, PermissionDenied -from sources.models import WebForm, StagingFolder, SourceTransformation, \ - WatchFolder -from sources.literals import SOURCE_CHOICE_WEB_FORM, SOURCE_CHOICE_STAGING, \ - SOURCE_CHOICE_WATCH -from sources.literals import SOURCE_UNCOMPRESS_CHOICE_Y, \ - SOURCE_UNCOMPRESS_CHOICE_ASK +from sources.models import (WebForm, StagingFolder, SourceTransformation, + WatchFolder) +from sources.literals import (SOURCE_CHOICE_WEB_FORM, SOURCE_CHOICE_STAGING, + SOURCE_CHOICE_WATCH) +from sources.literals import (SOURCE_UNCOMPRESS_CHOICE_Y, + SOURCE_UNCOMPRESS_CHOICE_ASK) from sources.staging import create_staging_file_class, StagingFile -from sources.forms import StagingDocumentForm, WebFormForm, \ - WatchFolderSetupForm +from sources.forms import (StagingDocumentForm, WebFormForm, + WatchFolderSetupForm) from sources.forms import WebFormSetupForm, StagingFolderSetupForm from sources.forms import SourceTransformationForm, SourceTransformationForm_create -from sources import (PERMISSION_SOURCES_SETUP_VIEW, +from .permissions import (PERMISSION_SOURCES_SETUP_VIEW, PERMISSION_SOURCES_SETUP_EDIT, PERMISSION_SOURCES_SETUP_DELETE, PERMISSION_SOURCES_SETUP_CREATE, PERMISSION_DOCUMENT_NEW_VERSION) diff --git a/apps/tags/__init__.py b/apps/tags/__init__.py index f4f0adad7d..c730620b3b 100644 --- a/apps/tags/__init__.py +++ b/apps/tags/__init__.py @@ -1,8 +1,9 @@ +from __future__ import absolute_import + from django.utils.translation import ugettext_lazy as _ -from navigation.api import register_links, register_top_menu, \ - register_model_list_columns, register_multi_item_links -from permissions.models import PermissionNamespace, Permission +from navigation.api import (register_links, register_top_menu, + register_model_list_columns, register_multi_item_links) from common.utils import encapsulate from documents.models import Document from acls.models import class_permissions @@ -10,16 +11,10 @@ from acls.models import class_permissions from taggit.models import Tag from taggit.managers import TaggableManager -from tags.widgets import tag_color_block - -tags_namespace = PermissionNamespace('tags', _(u'Tags')) - -PERMISSION_TAG_CREATE = Permission.objects.register(tags_namespace, 'tag_create', _(u'Create new tags')) -PERMISSION_TAG_ATTACH = Permission.objects.register(tags_namespace, 'tag_attach', _(u'Attach exising tags')) -PERMISSION_TAG_REMOVE = Permission.objects.register(tags_namespace, 'tag_remove', _(u'Remove tags from documents')) -PERMISSION_TAG_DELETE = Permission.objects.register(tags_namespace, 'tag_delete', _(u'Delete global tags')) -PERMISSION_TAG_EDIT = Permission.objects.register(tags_namespace, 'tag_edit', _(u'Edit global tags')) -PERMISSION_TAG_VIEW = Permission.objects.register(tags_namespace, 'tag_view', _(u'View a document\'s tags')) +from .widgets import tag_color_block +from .permissions import (PERMISSION_TAG_CREATE, PERMISSION_TAG_ATTACH, + PERMISSION_TAG_REMOVE, PERMISSION_TAG_DELETE, PERMISSION_TAG_EDIT, + PERMISSION_TAG_VIEW) tag_list = {'text': _(u'tag list'), 'view': 'tag_list', 'famfam': 'tag_blue'} tag_create = {'text': _(u'create new tag'), 'view': 'tag_create', 'famfam': 'tag_blue_add'} diff --git a/apps/tags/admin.py b/apps/tags/admin.py index 495fc03066..0ba921af19 100644 --- a/apps/tags/admin.py +++ b/apps/tags/admin.py @@ -1,6 +1,8 @@ +from __future__ import absolute_import + from django.contrib import admin -from tags.models import TagProperties +from .models import TagProperties admin.site.register(TagProperties) diff --git a/apps/tags/forms.py b/apps/tags/forms.py index 046809c7c8..01a210494a 100644 --- a/apps/tags/forms.py +++ b/apps/tags/forms.py @@ -1,9 +1,11 @@ +from __future__ import absolute_import + from django import forms from django.utils.translation import ugettext_lazy as _ from taggit.models import Tag -from models import COLOR_CHOICES +from .models import COLOR_CHOICES class AddTagForm(forms.Form): diff --git a/apps/tags/permissions.py b/apps/tags/permissions.py new file mode 100644 index 0000000000..4dc7499222 --- /dev/null +++ b/apps/tags/permissions.py @@ -0,0 +1,14 @@ +from __future__ import absolute_import + +from django.utils.translation import ugettext_lazy as _ + +from permissions.models import PermissionNamespace, Permission + +tags_namespace = PermissionNamespace('tags', _(u'Tags')) + +PERMISSION_TAG_CREATE = Permission.objects.register(tags_namespace, 'tag_create', _(u'Create new tags')) +PERMISSION_TAG_ATTACH = Permission.objects.register(tags_namespace, 'tag_attach', _(u'Attach exising tags')) +PERMISSION_TAG_REMOVE = Permission.objects.register(tags_namespace, 'tag_remove', _(u'Remove tags from documents')) +PERMISSION_TAG_DELETE = Permission.objects.register(tags_namespace, 'tag_delete', _(u'Delete global tags')) +PERMISSION_TAG_EDIT = Permission.objects.register(tags_namespace, 'tag_edit', _(u'Edit global tags')) +PERMISSION_TAG_VIEW = Permission.objects.register(tags_namespace, 'tag_view', _(u'View a document\'s tags')) diff --git a/apps/tags/utils.py b/apps/tags/utils.py index 9496d9e88e..476b5bd17a 100644 --- a/apps/tags/utils.py +++ b/apps/tags/utils.py @@ -1,6 +1,8 @@ +from __future__ import absolute_import + from django.utils.translation import ugettext_lazy as _ -from tags import tag_document_remove, tag_tagged_item_list +from . import tag_document_remove, tag_tagged_item_list def get_tags_subtemplate(obj): diff --git a/apps/tags/views.py b/apps/tags/views.py index 94fd2ff170..12dba9dea9 100644 --- a/apps/tags/views.py +++ b/apps/tags/views.py @@ -1,3 +1,5 @@ +from __future__ import absolute_import + from django.http import HttpResponseRedirect from django.shortcuts import render_to_response, get_object_or_404 from django.template import RequestContext @@ -11,12 +13,12 @@ from documents.models import Document from documents.views import document_list from common.utils import encapsulate -from tags.forms import AddTagForm, TagForm -from tags.models import TagProperties -from tags import PERMISSION_TAG_CREATE, PERMISSION_TAG_ATTACH, \ - PERMISSION_TAG_REMOVE, PERMISSION_TAG_DELETE, PERMISSION_TAG_EDIT, \ - PERMISSION_TAG_VIEW -from tags import tag_tagged_item_list as tag_tagged_item_list_link +from .forms import AddTagForm, TagForm +from .models import TagProperties +from .permissions import (PERMISSION_TAG_CREATE, PERMISSION_TAG_ATTACH, + PERMISSION_TAG_REMOVE, PERMISSION_TAG_DELETE, PERMISSION_TAG_EDIT, + PERMISSION_TAG_VIEW) +from . import tag_tagged_item_list as tag_tagged_item_list_link def tag_create(request): diff --git a/apps/user_management/__init__.py b/apps/user_management/__init__.py index e5dbf82d51..133f60df71 100644 --- a/apps/user_management/__init__.py +++ b/apps/user_management/__init__.py @@ -1,22 +1,14 @@ +from __future__ import absolute_import + from django.utils.translation import ugettext_lazy as _ from django.contrib.auth.models import User, Group from navigation.api import register_links, register_multi_item_links -from permissions.models import PermissionNamespace, Permission - from project_setup.api import register_setup -user_management_namespace = PermissionNamespace('user_management', _(u'User management')) - -PERMISSION_USER_CREATE = Permission.objects.register(user_management_namespace, 'user_create', _(u'Create new users')) -PERMISSION_USER_EDIT = Permission.objects.register(user_management_namespace, 'user_edit', _(u'Edit existing users')) -PERMISSION_USER_VIEW = Permission.objects.register(user_management_namespace, 'user_view', _(u'View existing users')) -PERMISSION_USER_DELETE = Permission.objects.register(user_management_namespace, 'user_delete', _(u'Delete existing users')) - -PERMISSION_GROUP_CREATE = Permission.objects.register(user_management_namespace, 'group_create', _(u'Create new groups')) -PERMISSION_GROUP_EDIT = Permission.objects.register(user_management_namespace, 'group_edit', _(u'Edit existing groups')) -PERMISSION_GROUP_VIEW = Permission.objects.register(user_management_namespace, 'group_view', _(u'View existing groups')) -PERMISSION_GROUP_DELETE = Permission.objects.register(user_management_namespace, 'group_delete', _(u'Delete existing groups')) +from .permissions import (PERMISSION_USER_CREATE, PERMISSION_USER_EDIT, + PERMISSION_USER_VIEW, PERMISSION_USER_DELETE, PERMISSION_GROUP_CREATE, + PERMISSION_GROUP_EDIT, PERMISSION_GROUP_VIEW, PERMISSION_GROUP_DELETE) user_list = {'text': _(u'user list'), 'view': 'user_list', 'famfam': 'user', 'permissions': [PERMISSION_USER_VIEW]} user_setup = {'text': _(u'users'), 'view': 'user_list', 'famfam': 'user', 'icon': 'user.png', 'permissions': [PERMISSION_USER_VIEW]} diff --git a/apps/user_management/permissions.py b/apps/user_management/permissions.py new file mode 100644 index 0000000000..e644b1cb5e --- /dev/null +++ b/apps/user_management/permissions.py @@ -0,0 +1,17 @@ +from __future__ import absolute_import + +from django.utils.translation import ugettext_lazy as _ + +from permissions.models import PermissionNamespace, Permission + +user_management_namespace = PermissionNamespace('user_management', _(u'User management')) + +PERMISSION_USER_CREATE = Permission.objects.register(user_management_namespace, 'user_create', _(u'Create new users')) +PERMISSION_USER_EDIT = Permission.objects.register(user_management_namespace, 'user_edit', _(u'Edit existing users')) +PERMISSION_USER_VIEW = Permission.objects.register(user_management_namespace, 'user_view', _(u'View existing users')) +PERMISSION_USER_DELETE = Permission.objects.register(user_management_namespace, 'user_delete', _(u'Delete existing users')) + +PERMISSION_GROUP_CREATE = Permission.objects.register(user_management_namespace, 'group_create', _(u'Create new groups')) +PERMISSION_GROUP_EDIT = Permission.objects.register(user_management_namespace, 'group_edit', _(u'Edit existing groups')) +PERMISSION_GROUP_VIEW = Permission.objects.register(user_management_namespace, 'group_view', _(u'View existing groups')) +PERMISSION_GROUP_DELETE = Permission.objects.register(user_management_namespace, 'group_delete', _(u'Delete existing groups')) diff --git a/apps/user_management/views.py b/apps/user_management/views.py index e5167dfef5..f859a6940f 100644 --- a/apps/user_management/views.py +++ b/apps/user_management/views.py @@ -1,3 +1,5 @@ +from __future__ import absolute_import + from django.utils.translation import ugettext_lazy as _ from django.http import HttpResponseRedirect from django.shortcuts import render_to_response, get_object_or_404 @@ -12,12 +14,10 @@ from common.utils import generate_choices_w_labels, encapsulate from common.widgets import two_state_template from common.views import assign_remove -from user_management import PERMISSION_USER_VIEW, \ - PERMISSION_USER_EDIT, PERMISSION_USER_CREATE, \ - PERMISSION_USER_DELETE, PERMISSION_GROUP_CREATE, \ - PERMISSION_GROUP_EDIT, PERMISSION_GROUP_VIEW, \ - PERMISSION_GROUP_DELETE -from user_management.forms import UserForm, PasswordForm, GroupForm +from .permissions import (PERMISSION_USER_CREATE, PERMISSION_USER_EDIT, + PERMISSION_USER_VIEW, PERMISSION_USER_DELETE, PERMISSION_GROUP_CREATE, + PERMISSION_GROUP_EDIT, PERMISSION_GROUP_VIEW, PERMISSION_GROUP_DELETE) +from .forms import UserForm, PasswordForm, GroupForm def user_list(request):