Cleanups, permissions separation into explicit module, absolute import update

This commit is contained in:
Roberto Rosario
2012-01-02 03:48:26 -04:00
parent 2781a211ec
commit 34311fb17e
107 changed files with 693 additions and 468 deletions

View File

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

View File

@@ -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):

View File

@@ -1,3 +1,5 @@
from __future__ import absolute_import
import sys
import types
import logging

14
apps/acls/permissions.py Normal file
View File

@@ -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'))

View File

@@ -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):

View File

@@ -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):

View File

@@ -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()
)

View File

@@ -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 = [

View File

@@ -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', {

View File

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

View File

@@ -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:

View File

@@ -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'}

View File

@@ -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()

View File

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

View File

@@ -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'

View File

@@ -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:

View File

@@ -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]}

View File

@@ -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)

View File

@@ -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__)

View File

@@ -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,12 +14,9 @@ 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]}

View File

@@ -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'))

View File

@@ -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):

View File

@@ -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)

View File

@@ -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}

View File

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

View File

@@ -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):

View File

@@ -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''

View File

@@ -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):

View File

@@ -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'))

View File

@@ -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):

View File

@@ -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'))

View File

@@ -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):

View File

@@ -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)

View File

@@ -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):

View File

@@ -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'),

View File

@@ -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):

View File

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

View File

@@ -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'))

View File

@@ -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):

View File

@@ -1,3 +1,5 @@
from __future__ import absolute_import
import os
from django.utils import unittest

View File

@@ -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'),

View File

@@ -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__)

View File

@@ -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):

View File

@@ -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):

View File

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

View File

@@ -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):

View File

@@ -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):

View File

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

View File

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

View File

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

View File

@@ -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):

View File

@@ -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):

View File

@@ -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'))

View File

@@ -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):

View File

@@ -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]}

View File

@@ -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):

View File

@@ -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'))

View File

@@ -1,4 +1,5 @@
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)

View File

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

View File

@@ -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):

View File

@@ -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__)

View File

@@ -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):

View File

@@ -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)

View File

@@ -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):

View File

@@ -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,

View File

@@ -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):

View File

@@ -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')])

View File

@@ -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):

View File

@@ -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''

View File

@@ -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'))

View File

@@ -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):

View File

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

View File

@@ -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]}

View File

@@ -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():

View File

@@ -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):

View File

@@ -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):

13
apps/ocr/permissions.py Normal file
View File

@@ -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'))

View File

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

View File

@@ -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'):

View File

@@ -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]}

View File

@@ -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):

View File

@@ -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):

View File

@@ -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__)

View File

@@ -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'))

View File

@@ -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):

View File

@@ -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):

View File

@@ -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):

View File

@@ -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'),

View File

@@ -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 = {}

View File

@@ -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):

View File

@@ -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, [

View File

@@ -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)

View File

@@ -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):

View File

@@ -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):

View File

@@ -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'))

View File

@@ -1,3 +1,5 @@
from __future__ import absolute_import
import errno
import os
import hashlib

View File

@@ -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<source_type>\w+)/(?P<source_id>\d+)/(?P<staging_file_id>\w+)/preview/$', 'staging_file_preview', (), 'staging_file_preview'),

View File

@@ -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)

View File

@@ -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'}

View File

@@ -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)

Some files were not shown because too many files have changed in this diff Show More