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 django.contrib import admin
from acls.models import AccessEntry
from django.contrib.contenttypes import generic from django.contrib.contenttypes import generic
from django.contrib.contenttypes.models import ContentType from django.contrib.contenttypes.models import ContentType
from .models import AccessEntry
#class PermissionHolderInline(admin.StackedInline): #class PermissionHolderInline(admin.StackedInline):
# model = PermissionHolder # model = PermissionHolder
# extra = 1 # extra = 1

View File

@@ -1,3 +1,5 @@
from __future__ import absolute_import
from django import forms from django import forms
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from django.contrib.auth.models import User, Group 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 permissions.models import Permission, Role
from common.utils import generate_choices_w_labels, encapsulate, get_object_name 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): def _as_choice_list(holders):

View File

@@ -1,3 +1,5 @@
from __future__ import absolute_import
import sys import sys
import types import types
import logging 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.translation import ugettext_lazy as _
from django.utils.safestring import mark_safe from django.utils.safestring import mark_safe
from django import forms from django import forms
@@ -8,7 +10,7 @@ from django.contrib.contenttypes.models import ContentType
from django.db.models.base import ModelBase from django.db.models.base import ModelBase
from django.template.defaultfilters import capfirst 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): def content_type_icon(content_type):

View File

@@ -1,3 +1,5 @@
from __future__ import absolute_import
import tempfile import tempfile
from django.utils.translation import ugettext_lazy as _ 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 navigation.api import register_links, register_top_menu
from common.conf import settings as common_settings from .conf import settings as common_settings
from common.utils import validate_path from .utils import validate_path
def has_usable_password(context): def has_usable_password(context):

View File

@@ -1,3 +1,5 @@
from __future__ import absolute_import
import os import os
from django import forms from django import forms
@@ -8,9 +10,9 @@ from django.contrib.auth.forms import AuthenticationForm
from django.contrib.auth import authenticate from django.contrib.auth import authenticate
from django.conf import settings from django.conf import settings
from common.utils import return_attrib from .utils import return_attrib
from common.widgets import DetailSelectMultiple, PlainWidget, \ from .widgets import (DetailSelectMultiple, PlainWidget, TextAreaDiv,
TextAreaDiv, EmailInput EmailInput)
class DetailForm(forms.ModelForm): class DetailForm(forms.ModelForm):
@@ -90,10 +92,10 @@ class FilterForm(forms.Form):
class ChoiceForm(forms.Form): class ChoiceForm(forms.Form):
""" '''
Form to be used in side by side templates used to add or remove Form to be used in side by side templates used to add or remove
items from a many to many field items from a many to many field
""" '''
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
choices = kwargs.pop('choices', []) choices = kwargs.pop('choices', [])
label = kwargs.pop('label', _(u'Selection')) label = kwargs.pop('label', _(u'Selection'))
@@ -106,28 +108,28 @@ class ChoiceForm(forms.Form):
class UserForm_view(DetailForm): class UserForm_view(DetailForm):
""" '''
Form used to display an user's public details Form used to display an user's public details
""" '''
class Meta: class Meta:
model = User model = User
fields = ('username', 'first_name', 'last_name', 'email', 'is_staff', 'is_superuser', 'last_login', 'date_joined', 'groups') fields = ('username', 'first_name', 'last_name', 'email', 'is_staff', 'is_superuser', 'last_login', 'date_joined', 'groups')
class UserForm(forms.ModelForm): class UserForm(forms.ModelForm):
""" '''
Form used to edit an user's mininal fields by the user himself Form used to edit an user's mininal fields by the user himself
""" '''
class Meta: class Meta:
model = User model = User
fields = ('first_name', 'last_name') fields = ('first_name', 'last_name')
class EmailAuthenticationForm(AuthenticationForm): class EmailAuthenticationForm(AuthenticationForm):
""" '''
Override the default authentication form to use email address Override the default authentication form to use email address
authentication authentication
""" '''
email = forms.CharField(label=_(u'Email'), max_length=75, email = forms.CharField(label=_(u'Email'), max_length=75,
widget=EmailInput() widget=EmailInput()
) )

View File

@@ -110,7 +110,9 @@ def pretty_size_10(size):
# http://www.johncardinal.com/tmgutil/capitalizenames.htm # http://www.johncardinal.com/tmgutil/capitalizenames.htm
def proper_name(name): 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) mc = re.compile(r'^Mc(\w)(?=\w)', re.I)
mac = re.compile(r'^Mac(\w)(?=\w)', re.I) mac = re.compile(r'^Mac(\w)(?=\w)', re.I)
suffixes = [ suffixes = [

View File

@@ -1,3 +1,5 @@
from __future__ import absolute_import
from django.shortcuts import redirect from django.shortcuts import redirect
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from django.http import HttpResponseRedirect from django.http import HttpResponseRedirect
@@ -10,26 +12,25 @@ from django.utils.http import urlencode
from django.contrib.auth.views import login from django.contrib.auth.views import login
from django.utils.simplejson import dumps, loads from django.utils.simplejson import dumps, loads
from common.forms import ChoiceForm, UserForm, UserForm_view, \ from .forms import (ChoiceForm, UserForm, UserForm_view, ChangelogForm,
ChangelogForm, LicenseForm LicenseForm, EmailAuthenticationForm)
from common.forms import EmailAuthenticationForm from .conf.settings import LOGIN_METHOD
from common.conf.settings import LOGIN_METHOD
def password_change_done(request): def password_change_done(request):
""" '''
View called when the new user password has been accepted View called when the new user password has been accepted
""" '''
messages.success(request, _(u'Your password has been successfully changed.')) messages.success(request, _(u'Your password has been successfully changed.'))
return redirect('home') return redirect('home')
def multi_object_action_view(request): def multi_object_action_view(request):
""" '''
Proxy view called first when using a multi object action, which Proxy view called first when using a multi object action, which
then redirects to the appropiate specialized view then redirects to the appropiate specialized view
""" '''
next = request.POST.get('next', request.GET.get('next', request.META.get('HTTP_REFERER', '/'))) 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): def current_user_details(request):
""" '''
Display the current user's details Display the current user's details
""" '''
form = UserForm_view(instance=request.user) form = UserForm_view(instance=request.user)
return render_to_response( return render_to_response(
@@ -159,9 +160,9 @@ def current_user_details(request):
def current_user_edit(request): def current_user_edit(request):
""" '''
Allow an user to edit his own details 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')))) 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): def login_view(request):
""" '''
Control how the use is to be authenticated, options are 'email' and Control how the use is to be authenticated, options are 'email' and
'username' 'username'
""" '''
kwargs = {'template_name': 'login.html'} kwargs = {'template_name': 'login.html'}
if LOGIN_METHOD == 'email': if LOGIN_METHOD == 'email':
@@ -197,9 +198,9 @@ def login_view(request):
def changelog_view(request): def changelog_view(request):
""" '''
Display the included Changelog.txt file from the about menu Display the included Changelog.txt file from the about menu
""" '''
form = ChangelogForm() form = ChangelogForm()
return render_to_response( return render_to_response(
'generic_detail.html', { 'generic_detail.html', {
@@ -210,9 +211,9 @@ def changelog_view(request):
def license_view(request): def license_view(request):
""" '''
Display the included LICENSE file from the about menu Display the included LICENSE file from the about menu
""" '''
form = LicenseForm() form = LicenseForm()
return render_to_response( return render_to_response(
'generic_detail.html', { 'generic_detail.html', {

View File

@@ -10,10 +10,10 @@ from django.utils.encoding import force_unicode
class PlainWidget(forms.widgets.Widget): class PlainWidget(forms.widgets.Widget):
""" '''
Class to define a form widget that effectively nulls the htmls of a Class to define a form widget that effectively nulls the htmls of a
widget and reduces the output to only it's value widget and reduces the output to only it's value
""" '''
def render(self, name, value, attrs=None): def render(self, name, value, attrs=None):
return mark_safe(u'%s' % value) 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 TextAreaDiv(forms.widgets.Widget):
""" '''
Class to define a form widget that simulates the behavior of a Class to define a form widget that simulates the behavior of a
Textarea widget but using a div tag instead Textarea widget but using a div tag instead
""" '''
def __init__(self, attrs=None): def __init__(self, attrs=None):
# The 'rows' and 'cols' attributes are required for HTML correctness. # 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 # From: http://www.peterbe.com/plog/emailinput-html5-django
class EmailInput(forms.widgets.Input): class EmailInput(forms.widgets.Input):
""" '''
Class for a login form widget that accepts only well formated Class for a login form widget that accepts only well formated
email address email address
""" '''
input_type = 'email' input_type = 'email'
def render(self, name, value, attrs=None): def render(self, name, value, attrs=None):
@@ -114,11 +114,11 @@ class EmailInput(forms.widgets.Input):
class ScrollableCheckboxSelectMultiple(forms.widgets.CheckboxSelectMultiple): class ScrollableCheckboxSelectMultiple(forms.widgets.CheckboxSelectMultiple):
""" '''
Class for a form widget composed of a selection of checkboxes wrapped 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 in a div tag with automatic overflow to add scrollbars when the list
exceds the height of the div exceds the height of the div
""" '''
def render(self, name, value, attrs=None, choices=()): def render(self, name, value, attrs=None, choices=()):
if value is None: value = [] if value is None: value = []
has_id = attrs and 'id' in attrs has_id = attrs and 'id' in attrs

View File

@@ -1,4 +1,4 @@
"""Common abstract classes for forms.""" '''Common abstract classes for forms.'''
try: try:
import cPickle as pickle import cPickle as pickle
except ImportError: except ImportError:
@@ -15,12 +15,13 @@ __all__ = ('security_hash', 'BoundFormWizard')
def security_hash_new(form, exclude=None, *args): 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 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 order, pickles the result with the SECRET_KEY setting, then takes an md5
hash of that. hash of that.
""" '''
data = [] data = []
if exclude is None: if exclude is None:
@@ -51,19 +52,24 @@ def security_hash_new(form, exclude=None, *args):
class BoundFormWizard(FormWizard): 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): 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. Form/FormSet instances.
Subclasses may want to take into account request-specific information, Subclasses may want to take into account request-specific information,
such as the IP address. such as the IP address.
""" '''
return security_hash_new(form) return security_hash_new(form)
def render(self, form, request, step, context=None): 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 old_data = request.POST
prev_fields = [] prev_fields = []
if old_data: if old_data:

View File

@@ -1,11 +1,13 @@
from __future__ import absolute_import
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from django.core.exceptions import ImproperlyConfigured from django.core.exceptions import ImproperlyConfigured
from navigation.api import register_sidebar_template from navigation.api import register_sidebar_template
from project_tools.api import register_tool from project_tools.api import register_tool
from converter.utils import load_backend from .utils import load_backend
from converter.conf.settings import GRAPHICS_BACKEND from .conf.settings import GRAPHICS_BACKEND
formats_list = {'text': _('file formats'), 'view': 'formats_list', 'famfam': 'pictures', 'icon': 'pictures.png'} 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 os
import subprocess import subprocess
import hashlib import hashlib
@@ -7,15 +9,13 @@ from common.conf.settings import TEMPORARY_DIRECTORY
from converter.literals import DEFAULT_PAGE_NUMBER, \ from converter.literals import DEFAULT_PAGE_NUMBER, \
DEFAULT_ZOOM_LEVEL, DEFAULT_ROTATION, DEFAULT_FILE_FORMAT DEFAULT_ZOOM_LEVEL, DEFAULT_ROTATION, DEFAULT_FILE_FORMAT
from converter import backend from . import backend
from converter.literals import TRANSFORMATION_CHOICES from .literals import (TRANSFORMATION_CHOICES, TRANSFORMATION_RESIZE,
from converter.literals import TRANSFORMATION_RESIZE, \ TRANSFORMATION_ROTATE, TRANSFORMATION_ZOOM, DIMENSION_SEPARATOR,
TRANSFORMATION_ROTATE, TRANSFORMATION_ZOOM FILE_FORMATS)
from converter.literals import DIMENSION_SEPARATOR from .utils import cleanup
from converter.literals import FILE_FORMATS from .runtime import office_converter
from converter.utils import cleanup from .exceptions import OfficeConversionError
from converter.runtime import office_converter
from converter.exceptions import OfficeConversionError
HASH_FUNCTION = lambda x: hashlib.sha256(x).hexdigest() HASH_FUNCTION = lambda x: hashlib.sha256(x).hexdigest()

View File

@@ -1,29 +1,29 @@
class ConvertError(Exception): class ConvertError(Exception):
""" '''
Base exception for all coverter app exceptions Base exception for all coverter app exceptions
""" '''
pass pass
class UnknownFileFormat(ConvertError): class UnknownFileFormat(ConvertError):
""" '''
Raised when the converter backend can't understand a file Raised when the converter backend can't understand a file
""" '''
pass pass
class IdentifyError(ConvertError): class IdentifyError(ConvertError):
""" '''
Raised by the graphcismagick and imagemagics identify program Raised by the graphcismagick and imagemagics identify program
""" '''
pass pass
class UnkownConvertError(ConvertError): class UnkownConvertError(ConvertError):
""" '''
Raised when an error is found but there is no disernible way to Raised when an error is found but there is no disernible way to
identify the kind of error identify the kind of error
""" '''
pass pass

View File

@@ -1,3 +1,5 @@
from __future__ import absolute_import
import os import os
import subprocess import subprocess
import logging import logging
@@ -6,8 +8,8 @@ from mimetype.api import get_mimetype
from common.conf.settings import TEMPORARY_DIRECTORY from common.conf.settings import TEMPORARY_DIRECTORY
from common.utils import id_generator from common.utils import id_generator
from converter.conf.settings import UNOCONV_PATH, UNOCONV_USE_PIPE from .conf.settings import UNOCONV_PATH, UNOCONV_USE_PIPE
from converter.exceptions import (OfficeConversionError, from .exceptions import (OfficeConversionError,
OfficeBackendError, UnknownFileFormat) OfficeBackendError, UnknownFileFormat)
CACHED_FILE_SUFFIX = u'_office_converter' CACHED_FILE_SUFFIX = u'_office_converter'

View File

@@ -1,5 +1,7 @@
from converter.office_converter import OfficeConverter from __future__ import absolute_import
from converter.exceptions import OfficeBackendError
from .office_converter import OfficeConverter
from .exceptions import OfficeBackendError
try: try:

View File

@@ -1,21 +1,17 @@
from __future__ import absolute_import
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from navigation.api import register_links, register_top_menu, \ from navigation.api import register_links, register_top_menu, \
register_model_list_columns, register_multi_item_links, \ register_model_list_columns, register_multi_item_links, \
register_sidebar_template register_sidebar_template
from main.api import register_diagnostic, register_maintenance_links from main.api import register_diagnostic, register_maintenance_links
from permissions.models import PermissionNamespace, Permission
from project_setup.api import register_setup from project_setup.api import register_setup
from hkp import Key as KeyServerKey from hkp import Key as KeyServerKey
from django_gpg.api import Key from .api import Key
from .permissions import (PERMISSION_KEY_VIEW, PERMISSION_KEY_DELETE,
django_gpg_namespace = PermissionNamespace('django_gpg', _(u'Key management')) PERMISSION_KEYSERVER_QUERY, PERMISSION_KEY_RECEIVE)
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'))
# Setup views # Setup views
private_keys = {'text': _(u'private keys'), 'view': 'key_private_list', 'args': 'object.pk', 'famfam': 'key', 'icon': 'key.png', 'permissions': [PERMISSION_KEY_VIEW]} 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 import types
from pickle import dumps from pickle import dumps
@@ -12,7 +14,7 @@ from django.utils.http import urlquote_plus
from hkp import KeyServer from hkp import KeyServer
import gnupg import gnupg
from django_gpg.exceptions import (GPGVerificationError, GPGSigningError, from .exceptions import (GPGVerificationError, GPGSigningError,
GPGDecryptionError, KeyDeleteError, KeyGenerationError, GPGDecryptionError, KeyDeleteError, KeyGenerationError,
KeyFetchingError, KeyDoesNotExist, KeyImportError) KeyFetchingError, KeyDoesNotExist, KeyImportError)

View File

@@ -1,3 +1,5 @@
from __future__ import absolute_import
from datetime import datetime from datetime import datetime
import logging import logging
@@ -15,13 +17,13 @@ from permissions.models import Permission
from common.utils import pretty_size, parse_range, urlquote, \ from common.utils import pretty_size, parse_range, urlquote, \
return_diff, encapsulate return_diff, encapsulate
from django_gpg.api import Key, SIGNATURE_STATES from .api import Key, SIGNATURE_STATES
from django_gpg.runtime import gpg from .runtime import gpg
from django_gpg.exceptions import (GPGVerificationError, KeyFetchingError, from .exceptions import (GPGVerificationError, KeyFetchingError,
KeyImportError) 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) PERMISSION_KEYSERVER_QUERY, PERMISSION_KEY_RECEIVE)
from django_gpg.forms import KeySearchForm
logger = logging.getLogger(__name__) 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.utils.translation import ugettext_lazy as _
from django.conf import settings from django.conf import settings
from django.contrib.comments.models import Comment 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: if 'django.contrib.comments' not in settings.INSTALLED_APPS:
raise Exception('This app depends on the django.contrib.comments app.') raise Exception('This app depends on the django.contrib.comments app.')
comments_namespace = PermissionNamespace('comments', _(u'Comments')) from .permissions import (PERMISSION_COMMENT_CREATE,
PERMISSION_COMMENT_DELETE, PERMISSION_COMMENT_EDIT,
PERMISSION_COMMENT_CREATE = Permission.objects.register(comments_namespace, 'comment_create', _(u'Create new comments')) PERMISSION_COMMENT_VIEW)
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'))
comment_delete = {'text': _('delete'), 'view': 'comment_delete', 'args': 'object.pk', 'famfam': 'comment_delete', 'permissions': [PERMISSION_COMMENT_DELETE]} 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_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]} comment_add = {'text': _('add comment'), 'view': 'comment_add', 'args': 'object.pk', 'famfam': 'comment_add', 'permissions': [PERMISSION_COMMENT_CREATE]}

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.utils.translation import ugettext_lazy as _
from django.contrib.comments.models import Comment from django.contrib.comments.models import Comment
from document_comments import comment_delete from . import comment_delete
def get_comments_subtemplate(obj): 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.shortcuts import render_to_response, get_object_or_404
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from django.contrib.comments.models import Comment from django.contrib.comments.models import Comment
@@ -10,9 +12,10 @@ from django.contrib.sites.models import Site
from permissions.models import Permission from permissions.models import Permission
from documents.models import Document from documents.models import Document
from document_comments import PERMISSION_COMMENT_DELETE, \ from .permissions import (PERMISSION_COMMENT_CREATE,
PERMISSION_COMMENT_CREATE, PERMISSION_COMMENT_VIEW PERMISSION_COMMENT_DELETE, PERMISSION_COMMENT_EDIT,
from document_comments.forms import CommentForm PERMISSION_COMMENT_VIEW)
from .forms import CommentForm
def comment_delete(request, comment_id=None, comment_id_list=None): 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): def comments_for_object(request, document_id):
""" '''
Show a list of all the comments related to the passed object Show a list of all the comments related to the passed object
""" '''
Permission.objects.check_permissions(request.user, [PERMISSION_COMMENT_VIEW]) Permission.objects.check_permissions(request.user, [PERMISSION_COMMENT_VIEW])
document = get_object_or_404(Document, pk=document_id) 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 django.utils.translation import ugettext_lazy as _
from navigation.api import register_top_menu, register_sidebar_template, \ from navigation.api import register_top_menu, register_sidebar_template, \
register_links register_links
from permissions.models import PermissionNamespace, Permission
from main.api import register_maintenance_links 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 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_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} 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_lazy as _
from django.utils.translation import ugettext from django.utils.translation import ugettext
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
@@ -7,15 +9,13 @@ from django.template.defaultfilters import slugify
from documents.models import Document from documents.models import Document
from metadata.classes import MetadataObject from metadata.classes import MetadataObject
from document_indexing.models import Index, IndexInstance, \ from .models import (Index, IndexInstance, DocumentRenameCount)
DocumentRenameCount from .conf.settings import (AVAILABLE_INDEXING_FUNCTIONS,
from document_indexing.conf.settings import AVAILABLE_INDEXING_FUNCTIONS MAX_SUFFIX_COUNT, SLUGIFY_PATHS)
from document_indexing.conf.settings import MAX_SUFFIX_COUNT from .filesystem import (fs_create_index_directory,
from document_indexing.filesystem import fs_create_index_directory, \ fs_create_document_link, fs_delete_document_link,
fs_create_document_link, fs_delete_document_link, \ fs_delete_index_directory, fs_delete_directory_recusive)
fs_delete_index_directory, fs_delete_directory_recusive from .os_specifics import assemble_suffixed_filename
from document_indexing.conf.settings import SLUGIFY_PATHS
from document_indexing.os_specifics import assemble_suffixed_filename
if SLUGIFY_PATHS == False: if SLUGIFY_PATHS == False:
# Do not slugify path or filenames and extensions # Do not slugify path or filenames and extensions

View File

@@ -1,12 +1,13 @@
from __future__ import absolute_import
import errno import errno
import os import os
from django.utils.translation import ugettext_lazy as _ 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) assemble_path_from_list)
from document_indexing.conf.settings import FILESERVING_ENABLE from .conf.settings import (FILESERVING_ENABLE, FILESERVING_PATH)
from document_indexing.conf.settings import FILESERVING_PATH
def get_instance_path(index_instance): def get_instance_path(index_instance):

View File

@@ -1,3 +1,5 @@
from __future__ import absolute_import
from django.db import models from django.db import models
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
@@ -6,7 +8,7 @@ from mptt.fields import TreeForeignKey
from documents.models import Document 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'' 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 import os
from document_indexing.conf.settings import SUFFIX_SEPARATOR from .conf.settings import SUFFIX_SEPARATOR
def assemble_suffixed_filename(filename, suffix=0): 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.utils.translation import ugettext_lazy as _
from django.http import HttpResponseRedirect from django.http import HttpResponseRedirect
from django.shortcuts import render_to_response, get_object_or_404 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 django.utils.safestring import mark_safe
from permissions.models import Permission 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.models import Document
from documents.views import document_list from documents.views import document_list
from common.utils import encapsulate 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) PERMISSION_DOCUMENT_INDEXING_REBUILD_INDEXES)
from .models import IndexInstance
from document_indexing.models import IndexInstance from .api import (get_breadcrumbs, get_instance_link,
from document_indexing.api import (get_breadcrumbs, get_instance_link,
do_rebuild_all_indexes) 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): 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 django.utils.translation import ugettext_lazy as _
from permissions.api import register_permission, set_namespace_title
from permissions.models import PermissionNamespace, Permission from permissions.models import PermissionNamespace, Permission
document_signatures_namespace = PermissionNamespace('document_signatures', _(u'Document signatures')) document_signatures_namespace = PermissionNamespace('document_signatures', _(u'Document signatures'))

View File

@@ -1,3 +1,5 @@
from __future__ import absolute_import
import tempfile import tempfile
from django.utils.translation import ugettext_lazy as _ 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 project_setup.api import register_setup
from acls.models import class_permissions from acls.models import class_permissions
from documents.models import (Document, DocumentPage, from .models import (Document, DocumentPage,
DocumentPageTransformation, DocumentType, DocumentTypeFilename, DocumentPageTransformation, DocumentType, DocumentTypeFilename,
DocumentVersion) DocumentVersion)
from documents.literals import (PERMISSION_DOCUMENT_CREATE, from .permissions import (PERMISSION_DOCUMENT_CREATE,
PERMISSION_DOCUMENT_PROPERTIES_EDIT, PERMISSION_DOCUMENT_VIEW, PERMISSION_DOCUMENT_PROPERTIES_EDIT, PERMISSION_DOCUMENT_VIEW,
PERMISSION_DOCUMENT_DELETE, PERMISSION_DOCUMENT_DOWNLOAD, PERMISSION_DOCUMENT_DELETE, PERMISSION_DOCUMENT_DOWNLOAD,
PERMISSION_DOCUMENT_TRANSFORM, PERMISSION_DOCUMENT_TOOLS, PERMISSION_DOCUMENT_TRANSFORM, PERMISSION_DOCUMENT_TOOLS,
PERMISSION_DOCUMENT_EDIT, PERMISSION_DOCUMENT_VERSION_REVERT, PERMISSION_DOCUMENT_EDIT, PERMISSION_DOCUMENT_VERSION_REVERT,
PERMISSION_DOCUMENT_TYPE_EDIT, PERMISSION_DOCUMENT_TYPE_DELETE, PERMISSION_DOCUMENT_TYPE_EDIT, PERMISSION_DOCUMENT_TYPE_DELETE,
PERMISSION_DOCUMENT_TYPE_CREATE, PERMISSION_DOCUMENT_TYPE_VIEW) 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) HISTORY_DOCUMENT_EDITED, HISTORY_DOCUMENT_DELETED)
from documents.conf.settings import ZOOM_MAX_LEVEL from .conf.settings import ZOOM_MAX_LEVEL
from documents.conf.settings import ZOOM_MIN_LEVEL from .conf.settings import ZOOM_MIN_LEVEL
from documents.conf import settings as document_settings from .conf import settings as document_settings
from documents.widgets import document_thumbnail from .widgets import document_thumbnail
# Document page links expressions # Document page links expressions
def is_first_page(context): def is_first_page(context):

View File

@@ -1,8 +1,10 @@
from __future__ import absolute_import
from django.contrib import admin from django.contrib import admin
from metadata.admin import DocumentMetadataInline from metadata.admin import DocumentMetadataInline
from documents.models import (DocumentType, Document, from .models import (DocumentType, Document,
DocumentTypeFilename, DocumentPage, DocumentTypeFilename, DocumentPage,
DocumentPageTransformation, RecentDocument, DocumentPageTransformation, RecentDocument,
DocumentVersion) DocumentVersion)

View File

@@ -1,3 +1,5 @@
from __future__ import absolute_import
from django import forms from django import forms
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from django.utils.translation import ugettext 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.conf.settings import DEFAULT_PAGE_ORIENTATION
from common.widgets import TextAreaDiv from common.widgets import TextAreaDiv
from documents.models import (Document, DocumentType, from .models import (Document, DocumentType,
DocumentPage, DocumentPageTransformation, DocumentTypeFilename, DocumentPage, DocumentPageTransformation, DocumentTypeFilename,
DocumentVersion) DocumentVersion)
from documents.widgets import document_html_widget from .widgets import document_html_widget
from documents.literals import (RELEASE_LEVEL_FINAL, RELEASE_LEVEL_CHOICES) from .literals import (RELEASE_LEVEL_FINAL, RELEASE_LEVEL_CHOICES)
# Document page forms # Document page forms
class DocumentPageTransformationForm(forms.ModelForm): class DocumentPageTransformationForm(forms.ModelForm):

View File

@@ -1,33 +1,10 @@
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from permissions.models import PermissionNamespace, Permission
PICTURE_ERROR_SMALL = u'picture_error.png' PICTURE_ERROR_SMALL = u'picture_error.png'
PICTURE_ERROR_MEDIUM = u'1297211435_error.png' PICTURE_ERROR_MEDIUM = u'1297211435_error.png'
PICTURE_UNKNOWN_SMALL = u'1299549572_unknown2.png' PICTURE_UNKNOWN_SMALL = u'1299549572_unknown2.png'
PICTURE_UNKNOWN_MEDIUM = u'1299549805_unknown.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 = { HISTORY_DOCUMENT_CREATED = {
'namespace': 'documents', 'name': 'document_created', 'namespace': 'documents', 'name': 'document_created',
'label': _(u'Document creation'), 'label': _(u'Document creation'),

View File

@@ -1,9 +1,11 @@
from __future__ import absolute_import
from ast import literal_eval from ast import literal_eval
from datetime import datetime from datetime import datetime
from django.db import models from django.db import models
from documents.conf.settings import RECENT_COUNT from .conf.settings import RECENT_COUNT
class RecentDocumentManager(models.Manager): class RecentDocumentManager(models.Manager):

View File

@@ -1,3 +1,5 @@
from __future__ import absolute_import
import os import os
import tempfile import tempfile
import hashlib 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, from converter.literals import (DEFAULT_ZOOM_LEVEL, DEFAULT_ROTATION,
DEFAULT_PAGE_NUMBER) DEFAULT_PAGE_NUMBER)
from documents.conf.settings import CHECKSUM_FUNCTION from .conf.settings import (CHECKSUM_FUNCTION, UUID_FUNCTION,
from documents.conf.settings import UUID_FUNCTION STORAGE_BACKEND, PREVIEW_SIZE, DISPLAY_SIZE, CACHE_PATH,
from documents.conf.settings import STORAGE_BACKEND ZOOM_MAX_LEVEL, ZOOM_MIN_LEVEL)
from documents.conf.settings import PREVIEW_SIZE from .managers import (RecentDocumentManager,
from documents.conf.settings import DISPLAY_SIZE DocumentPageTransformationManager)
from documents.conf.settings import CACHE_PATH from .utils import document_save_to_temp_dir
from documents.conf.settings import ZOOM_MAX_LEVEL from .literals import (RELEASE_LEVEL_FINAL, RELEASE_LEVEL_CHOICES,
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,
VERSION_UPDATE_MAJOR, VERSION_UPDATE_MINOR, VERSION_UPDATE_MICRO) VERSION_UPDATE_MAJOR, VERSION_UPDATE_MINOR, VERSION_UPDATE_MICRO)
# document image cache name hash function # 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.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 common.utils import pretty_size, pretty_size_10
from documents.conf.settings import STORAGE_BACKEND from .conf.settings import STORAGE_BACKEND
from documents.models import Document, DocumentType, DocumentPage, DocumentVersion from .models import Document, DocumentType, DocumentPage, DocumentVersion
from django.db.models import Avg, Count, Min, Max
def get_used_size(path, file_list): def get_used_size(path, file_list):

View File

@@ -1,3 +1,5 @@
from __future__ import absolute_import
import os import os
from django.utils import unittest 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 django.conf.urls.defaults import patterns, url
from documents.conf.settings import PREVIEW_SIZE from .conf.settings import (PREVIEW_SIZE, PRINT_SIZE, THUMBNAIL_SIZE,
from documents.conf.settings import PRINT_SIZE DISPLAY_SIZE, MULTIPAGE_PREVIEW_SIZE)
from documents.conf.settings import THUMBNAIL_SIZE
from documents.conf.settings import DISPLAY_SIZE
from documents.conf.settings import MULTIPAGE_PREVIEW_SIZE
urlpatterns = patterns('documents.views', urlpatterns = patterns('documents.views',
url(r'^list/$', 'document_list', (), 'document_list'), url(r'^list/$', 'document_list', (), 'document_list'),

View File

@@ -1,3 +1,5 @@
from __future__ import absolute_import
import urlparse import urlparse
import copy import copy
import logging import logging
@@ -29,41 +31,30 @@ from document_indexing.api import update_indexes, delete_indexes
from history.api import create_history from history.api import create_history
from acls.models import AccessEntry, PermissionDenied from acls.models import AccessEntry, PermissionDenied
from documents.conf.settings import PREVIEW_SIZE from .conf.settings import (PREVIEW_SIZE, STORAGE_BACKEND, ZOOM_PERCENT_STEP,
from documents.conf.settings import STORAGE_BACKEND ZOOM_MAX_LEVEL, ZOOM_MIN_LEVEL, ROTATION_STEP, PRINT_SIZE,
from documents.conf.settings import ZOOM_PERCENT_STEP RECENT_COUNT)
from documents.conf.settings import ZOOM_MAX_LEVEL from .permissions import (PERMISSION_DOCUMENT_CREATE,
from documents.conf.settings import ZOOM_MIN_LEVEL PERMISSION_DOCUMENT_PROPERTIES_EDIT, PERMISSION_DOCUMENT_VIEW,
from documents.conf.settings import ROTATION_STEP
from documents.conf.settings import PRINT_SIZE
from documents.conf.settings import RECENT_COUNT
from documents.literals import (PERMISSION_DOCUMENT_CREATE,
PERMISSION_DOCUMENT_PROPERTIES_EDIT,
PERMISSION_DOCUMENT_VIEW,
PERMISSION_DOCUMENT_DELETE, PERMISSION_DOCUMENT_DOWNLOAD, PERMISSION_DOCUMENT_DELETE, PERMISSION_DOCUMENT_DOWNLOAD,
PERMISSION_DOCUMENT_TRANSFORM, PERMISSION_DOCUMENT_TRANSFORM, PERMISSION_DOCUMENT_TOOLS,
PERMISSION_DOCUMENT_EDIT, PERMISSION_DOCUMENT_TOOLS, PERMISSION_DOCUMENT_EDIT, PERMISSION_DOCUMENT_VERSION_REVERT,
PERMISSION_DOCUMENT_VERSION_REVERT, PERMISSION_DOCUMENT_TYPE_VIEW) PERMISSION_DOCUMENT_TYPE_EDIT, PERMISSION_DOCUMENT_TYPE_DELETE,
from documents.literals import (HISTORY_DOCUMENT_CREATED, PERMISSION_DOCUMENT_TYPE_CREATE, PERMISSION_DOCUMENT_TYPE_VIEW)
from .literals import (HISTORY_DOCUMENT_CREATED,
HISTORY_DOCUMENT_EDITED, HISTORY_DOCUMENT_DELETED) HISTORY_DOCUMENT_EDITED, HISTORY_DOCUMENT_DELETED)
from .forms import (DocumentTypeSelectForm,
from documents.forms import (DocumentTypeSelectForm,
DocumentForm_edit, DocumentPropertiesForm, DocumentForm_edit, DocumentPropertiesForm,
DocumentPreviewForm, DocumentPageForm, DocumentPreviewForm, DocumentPageForm,
DocumentPageTransformationForm, DocumentContentForm, DocumentPageTransformationForm, DocumentContentForm,
DocumentPageForm_edit, DocumentPageForm_text, PrintForm, DocumentPageForm_edit, DocumentPageForm_text, PrintForm,
DocumentTypeForm, DocumentTypeFilenameForm, DocumentTypeForm, DocumentTypeFilenameForm,
DocumentTypeFilenameForm_create) DocumentTypeFilenameForm_create)
from documents.wizards import DocumentCreateWizard from .wizards import DocumentCreateWizard
from documents.models import (Document, DocumentType, DocumentPage, from .models import (Document, DocumentType, DocumentPage,
DocumentPageTransformation, RecentDocument, DocumentTypeFilename, DocumentPageTransformation, RecentDocument, DocumentTypeFilename,
DocumentVersion) DocumentVersion)
# Document type permissions
from documents.literals import PERMISSION_DOCUMENT_TYPE_EDIT, \
PERMISSION_DOCUMENT_TYPE_DELETE, PERMISSION_DOCUMENT_TYPE_CREATE
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)

View File

@@ -1,3 +1,5 @@
from __future__ import absolute_import
from django.utils.safestring import mark_safe from django.utils.safestring import mark_safe
from django.conf import settings from django.conf import settings
from django.utils.translation import ugettext_lazy as _ 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 converter.exceptions import UnknownFileFormat, UnkownConvertError
from mimetype.api import get_error_icon_url 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): 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.utils.translation import ugettext_lazy as _
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from django.http import HttpResponseRedirect from django.http import HttpResponseRedirect
@@ -7,7 +9,7 @@ from common.utils import urlquote
from metadata.forms import MetadataSelectionForm, MetadataFormSet from metadata.forms import MetadataSelectionForm, MetadataFormSet
from documents.forms import DocumentTypeSelectForm from .forms import DocumentTypeSelectForm
class DocumentCreateWizard(BoundFormWizard): class DocumentCreateWizard(BoundFormWizard):

View File

@@ -1,9 +1,11 @@
from __future__ import absolute_import
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from navigation.api import (register_links, register_top_menu, from navigation.api import (register_links, register_top_menu,
register_multi_item_links, register_sidebar_template) register_multi_item_links, register_sidebar_template)
from documents.models import Document 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.models import class_permissions
from acls import ACLS_EDIT_ACL, ACLS_VIEW_ACL 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 django.contrib import admin
from folders.models import Folder, FolderDocument from .models import Folder, FolderDocument
class FolderDocumentInline(admin.StackedInline): class FolderDocumentInline(admin.StackedInline):

View File

@@ -1,7 +1,9 @@
from __future__ import absolute_import
from django import forms from django import forms
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from folders.models import Folder from .models import Folder
class FolderForm(forms.ModelForm): class FolderForm(forms.ModelForm):

View File

@@ -1,4 +1,5 @@
from __future__ import absolute_import from __future__ import absolute_import
import logging import logging
from django.utils.translation import ugettext_lazy as _ 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.urlresolvers import reverse
from django.core.exceptions import PermissionDenied 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.models import Document
from documents.views import document_list from documents.views import document_list
from permissions import Permission from permissions import Permission

View File

@@ -1,11 +1,10 @@
from __future__ import absolute_import
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from project_tools.api import register_tool from project_tools.api import register_tool
from permissions.models import PermissionNamespace, Permission
history_namespace = PermissionNamespace('history', _(u'History')) from .permissions import PERMISSION_HISTORY_VIEW
PERMISSION_HISTORY_VIEW = Permission.objects.register(history_namespace, 'history_view', _(u'Access the history app'))
# TODO: support permissions AND operand # TODO: support permissions AND operand
# encapsulate into document_history_list and require DOCUMENT_VIEW and HISTORY_VIEW # 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 pickle
import json import json
@@ -14,8 +16,8 @@ from django.core import serializers
from django.shortcuts import get_object_or_404 from django.shortcuts import get_object_or_404
from django.db import models from django.db import models
from history.models import HistoryType, History from .models import HistoryType, History
from history.runtime_data import history_types_dict from .runtime_data import history_types_dict
@transaction.commit_manually @transaction.commit_manually

View File

@@ -1,6 +1,8 @@
from __future__ import absolute_import
from common.forms import DetailForm from common.forms import DetailForm
from history.models import History from .models import History
class HistoryDetailForm(DetailForm): class HistoryDetailForm(DetailForm):

View File

@@ -1,3 +1,5 @@
from __future__ import absolute_import
import json import json
import pickle import pickle
from datetime import datetime from datetime import datetime
@@ -9,7 +11,7 @@ from django.utils.translation import ugettext_lazy as _
from django.core import serializers from django.core import serializers
#from history.managers import HistoryManager #from history.managers import HistoryManager
from history.runtime_data import history_types_dict from .runtime_data import history_types_dict
class HistoryType(models.Model): 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.shortcuts import render_to_response
from django.template import RequestContext from django.template import RequestContext
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
@@ -9,10 +11,10 @@ from django.http import Http404
from permissions.models import Permission from permissions.models import Permission
from common.utils import encapsulate from common.utils import encapsulate
from history.models import History from .models import History
from history.forms import HistoryDetailForm from .forms import HistoryDetailForm
from history import PERMISSION_HISTORY_VIEW from .permissions import PERMISSION_HISTORY_VIEW
from history.widgets import history_entry_object_link, history_entry_summary from .widgets import history_entry_object_link, history_entry_summary
def history_list(request): def history_list(request):

View File

@@ -3,21 +3,16 @@ from __future__ import absolute_import
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from navigation.api import register_links, register_sidebar_template from navigation.api import register_links, register_sidebar_template
from permissions.models import PermissionNamespace, Permission
from project_setup.api import register_setup 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 documents.models import Document
from acls.models import class_permissions from acls.models import class_permissions
from acls import ACLS_EDIT_ACL, ACLS_VIEW_ACL from acls import ACLS_EDIT_ACL, ACLS_VIEW_ACL
from .models import SmartLink, SmartLinkCondition from .models import SmartLink, SmartLinkCondition
from .permissions import (PERMISSION_SMART_LINK_VIEW,
linking_namespace = PermissionNamespace('linking', _(u'Smart links')) PERMISSION_SMART_LINK_CREATE, PERMISSION_SMART_LINK_DELETE,
PERMISSION_SMART_LINK_EDIT)
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'))
smart_link_instance_view_link = {'text': _(u'smart links actions'), 'view': 'smart_link_instance_view', 'famfam': 'page_link', 'permissions': [PERMISSION_DOCUMENT_VIEW]} 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]} 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 django.utils.translation import ugettext_lazy as _
from .managers import SmartLinkManager from .managers import SmartLinkManager
from .literals import OPERATOR_CHOICES, INCLUSION_AND, \ from .literals import (OPERATOR_CHOICES, INCLUSION_AND,
INCLUSION_CHOICES INCLUSION_CHOICES)
class SmartLink(models.Model): 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 from __future__ import absolute_import
import logging import logging
from django.utils.translation import ugettext_lazy as _ 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 common.widgets import two_state_template
from documents.models import Document from documents.models import Document
from documents.views import document_list 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 permissions.models import Permission
from acls.views import acl_new_holder_for, acl_list_for, acl_detail_for from acls.views import acl_new_holder_for, acl_list_for, acl_detail_for
from acls.models import AccessEntry, PermissionDenied from acls.models import AccessEntry, PermissionDenied
@@ -22,7 +23,7 @@ from .conf.settings import SHOW_EMPTY_SMART_LINKS
from .forms import (SmartLinkInstanceForm, SmartLinkForm, from .forms import (SmartLinkInstanceForm, SmartLinkForm,
SmartLinkConditionForm) SmartLinkConditionForm)
from . import smart_link_instance_view_link 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_CREATE, PERMISSION_SMART_LINK_DELETE,
PERMISSION_SMART_LINK_EDIT) PERMISSION_SMART_LINK_EDIT)

View File

@@ -1,4 +1,6 @@
from lock_manager.exceptions import LockError from __future__ import absolute_import
from lock_manager.models import Lock as LockModel
from .exceptions import LockError
from .models import Lock as LockModel
Lock = LockModel.objects Lock = LockModel.objects

View File

@@ -1,6 +1,8 @@
from __future__ import absolute_import
from django.contrib import admin from django.contrib import admin
from lock_manager.models import Lock from .models import Lock
class LockAdmin(admin.ModelAdmin): class LockAdmin(admin.ModelAdmin):

View File

@@ -1,3 +1,5 @@
from __future__ import absolute_import
import logging import logging
import datetime import datetime
@@ -6,7 +8,7 @@ from django.db.utils import IntegrityError
from django.db import transaction from django.db import transaction
from django.db import models from django.db import models
from lock_manager.exceptions import LockError from .exceptions import LockError
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)

View File

@@ -1,10 +1,12 @@
from __future__ import absolute_import
import datetime import datetime
from django.db import models from django.db import models
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from lock_manager.managers import LockManager from .managers import LockManager
from lock_manager.conf.settings import DEFAULT_LOCK_TIMEOUT from .conf.settings import DEFAULT_LOCK_TIMEOUT
class Lock(models.Model): class Lock(models.Model):

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_lazy as _
from navigation.api import register_top_menu 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_setup.api import register_setup
from project_tools.api import register_tool from project_tools.api import register_tool
from main.conf.settings import SIDE_BAR_SEARCH from .conf.settings import SIDE_BAR_SEARCH, DISABLE_HOME_VIEW
from main.conf.settings import DISABLE_HOME_VIEW
__author__ = 'Roberto Rosario' __author__ = 'Roberto Rosario'
__copyright__ = 'Copyright 2011 Roberto Rosario' __copyright__ = 'Copyright 2011 Roberto Rosario'
@@ -24,10 +25,10 @@ __version_info__ = {
'serial': 0 'serial': 0
} }
def is_superuser(context): def is_superuser(context):
return context['request'].user.is_staff or context['request'].user.is_superuser 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'} 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'} statistics = {'text': _(u'statistics'), 'view': 'statistics', 'famfam': 'table', 'icon': 'blackboard_sum.png'}
diagnostics = {'text': _(u'diagnostics'), 'view': 'diagnostics', 'famfam': 'pill', 'icon': 'pill.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__) vers.append('%(releaselevel)s%(serial)i' % __version_info__)
return ''.join(vers) return ''.join(vers)
__version__ = get_version() __version__ = get_version()
register_setup(admin_site) register_setup(admin_site)

View File

@@ -1,3 +1,5 @@
from __future__ import absolute_import
from django.shortcuts import render_to_response from django.shortcuts import render_to_response
from django.template import RequestContext from django.template import RequestContext
from django.utils.translation import ugettext_lazy as _ 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 ocr.statistics import get_statistics as ocr_statistics
from permissions.models import Permission from permissions.models import Permission
from main.api import diagnostics, tools from .api import diagnostics, tools
from main.conf.settings import DISABLE_HOME_VIEW from .conf.settings import DISABLE_HOME_VIEW
def home(request): def home(request):

View File

@@ -1,31 +1,22 @@
from __future__ import absolute_import
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from navigation.api import register_links, register_multi_item_links, \ from navigation.api import register_links, register_multi_item_links, \
register_sidebar_template register_sidebar_template
from permissions.models import Permission, PermissionNamespace
from documents.models import Document, DocumentType 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 project_setup.api import register_setup
from acls.models import class_permissions from acls.models import class_permissions
from metadata.models import MetadataType, MetadataSet from .models import MetadataType, MetadataSet
from .permissions import (PERMISSION_METADATA_DOCUMENT_EDIT,
metadata_namespace = PermissionNamespace('metadata', _(u'Metadata')) PERMISSION_METADATA_DOCUMENT_ADD, PERMISSION_METADATA_DOCUMENT_REMOVE,
PERMISSION_METADATA_DOCUMENT_EDIT = Permission.objects.register(metadata_namespace, 'metadata_document_edit', _(u'Edit a document\'s metadata')) PERMISSION_METADATA_DOCUMENT_VIEW, PERMISSION_METADATA_TYPE_EDIT,
PERMISSION_METADATA_DOCUMENT_ADD = Permission.objects.register(metadata_namespace, 'metadata_document_add', _(u'Add metadata to a document')) PERMISSION_METADATA_TYPE_CREATE, PERMISSION_METADATA_TYPE_DELETE,
PERMISSION_METADATA_DOCUMENT_REMOVE = Permission.objects.register(metadata_namespace, 'metadata_document_remove', _(u'Remove metadata from a document')) PERMISSION_METADATA_TYPE_VIEW, PERMISSION_METADATA_SET_EDIT,
PERMISSION_METADATA_DOCUMENT_VIEW = Permission.objects.register(metadata_namespace, 'metadata_document_view', _(u'View metadata from a document')) PERMISSION_METADATA_SET_CREATE, PERMISSION_METADATA_SET_DELETE,
PERMISSION_METADATA_SET_VIEW)
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'))
metadata_edit = {'text': _(u'edit metadata'), 'view': 'metadata_edit', 'args': 'object.pk', 'famfam': 'xhtml_go', 'permissions': [PERMISSION_METADATA_DOCUMENT_EDIT]} 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']} 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]} 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(['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_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]) 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_type_list)
register_setup(setup_metadata_set_list) register_setup(setup_metadata_set_list)
class_permissions(Document, [ class_permissions(Document, [
PERMISSION_METADATA_DOCUMENT_EDIT, PERMISSION_METADATA_DOCUMENT_EDIT,
PERMISSION_METADATA_DOCUMENT_ADD, PERMISSION_METADATA_DOCUMENT_ADD,

View File

@@ -1,7 +1,9 @@
from __future__ import absolute_import
from django.contrib import admin from django.contrib import admin
from metadata.models import MetadataType, MetadataSet, MetadataSetItem, \ from .models import (MetadataType, MetadataSet, MetadataSetItem,
DocumentMetadata, DocumentTypeDefaults DocumentMetadata, DocumentTypeDefaults)
class MetadataTypeAdmin(admin.ModelAdmin): 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 urllib import unquote_plus
from django.shortcuts import get_object_or_404 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): 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 = { metadata_dict = {
'id': {}, 'id': {},
'value': {} 'value': {}
@@ -32,19 +35,19 @@ def decode_metadata_from_url(url_dict):
def save_metadata_list(metadata_list, document, create=False): def save_metadata_list(metadata_list, document, create=False):
""" '''
Take a list of metadata dictionaries and associate them to a Take a list of metadata dictionaries and associate them to a
document document
""" '''
for item in metadata_list: for item in metadata_list:
save_metadata(item, document, create) save_metadata(item, document, create)
def save_metadata(metadata_dict, document, create=False): def save_metadata(metadata_dict, document, create=False):
""" '''
Take a dictionary of metadata type & value and associate it to a Take a dictionary of metadata type & value and associate it to a
document document
""" '''
if create: if create:
# Use matched metadata now to create document metadata # Use matched metadata now to create document metadata
document_metadata, created = DocumentMetadata.objects.get_or_create( 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): 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)) return u', '.join(metadata_repr_as_list(metadata_list))
def metadata_repr_as_list(metadata_list): def metadata_repr_as_list(metadata_list):
""" '''
Turn a list of metadata into a list of printable representations Turn a list of metadata into a list of printable representations
""" '''
output = [] output = []
for metadata_dict in metadata_list: for metadata_dict in metadata_list:
try: try:
@@ -98,7 +103,7 @@ def metadata_repr_as_list(metadata_list):
def get_metadata_string(document): def get_metadata_string(document):
""" '''
Return a formated representation of a document's metadata values 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')]) 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 import forms
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from django.forms.formsets import formset_factory from django.forms.formsets import formset_factory
from common.widgets import ScrollableCheckboxSelectMultiple from common.widgets import ScrollableCheckboxSelectMultiple
from metadata.conf.settings import AVAILABLE_MODELS from .conf.settings import (AVAILABLE_MODELS, AVAILABLE_FUNCTIONS)
from metadata.conf.settings import AVAILABLE_FUNCTIONS from .models import (MetadataSet, MetadataType, DocumentTypeDefaults)
from metadata.models import MetadataSet, MetadataType, \
DocumentTypeDefaults
class MetadataForm(forms.Form): class MetadataForm(forms.Form):

View File

@@ -1,10 +1,11 @@
from __future__ import absolute_import
from django.db import models from django.db import models
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from documents.models import Document, DocumentType from documents.models import Document, DocumentType
from metadata.conf.settings import AVAILABLE_MODELS from .conf.settings import (AVAILABLE_MODELS, AVAILABLE_FUNCTIONS)
from metadata.conf.settings import 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_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'' 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.shortcuts import render_to_response
from django.template import RequestContext from django.template import RequestContext
from django.utils.translation import ugettext_lazy as _ 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.core.urlresolvers import reverse
from django.utils.http import urlencode 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 documents.models import Document, RecentDocument, DocumentType
from permissions.models import Permission from permissions.models import Permission
from document_indexing.api import update_indexes, delete_indexes 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.utils import generate_choices_w_labels, encapsulate
from common.views import assign_remove from common.views import assign_remove
from metadata import PERMISSION_METADATA_DOCUMENT_VIEW, \ from .permissions import (PERMISSION_METADATA_DOCUMENT_EDIT,
PERMISSION_METADATA_DOCUMENT_EDIT, \ PERMISSION_METADATA_DOCUMENT_ADD, PERMISSION_METADATA_DOCUMENT_REMOVE,
PERMISSION_METADATA_DOCUMENT_ADD, PERMISSION_METADATA_DOCUMENT_REMOVE, \ PERMISSION_METADATA_DOCUMENT_VIEW, PERMISSION_METADATA_TYPE_EDIT,
PERMISSION_METADATA_TYPE_EDIT, PERMISSION_METADATA_TYPE_CREATE, \ PERMISSION_METADATA_TYPE_CREATE, PERMISSION_METADATA_TYPE_DELETE,
PERMISSION_METADATA_TYPE_DELETE, PERMISSION_METADATA_TYPE_VIEW, \ PERMISSION_METADATA_TYPE_VIEW, PERMISSION_METADATA_SET_EDIT,
PERMISSION_METADATA_SET_EDIT, PERMISSION_METADATA_SET_CREATE, \ PERMISSION_METADATA_SET_CREATE, PERMISSION_METADATA_SET_DELETE,
PERMISSION_METADATA_SET_DELETE, PERMISSION_METADATA_SET_VIEW PERMISSION_METADATA_SET_VIEW)
from metadata.forms import MetadataFormSet, AddMetadataForm, \ from .forms import (MetadataFormSet, AddMetadataForm,
MetadataRemoveFormSet, MetadataTypeForm, MetadataSetForm MetadataRemoveFormSet, MetadataTypeForm, MetadataSetForm)
from metadata.api import save_metadata_list from .api import save_metadata_list
from metadata.models import DocumentMetadata, MetadataType, MetadataSet, \ from .models import (DocumentMetadata, MetadataType, MetadataSet,
MetadataSetItem, DocumentTypeDefaults MetadataSetItem, DocumentTypeDefaults)
def metadata_edit(request, document_id=None, document_id_list=None): def metadata_edit(request, document_id=None, document_id_list=None):

View File

@@ -3,15 +3,15 @@ import re
import urlparse import urlparse
from django.core.urlresolvers import reverse, NoReverseMatch from django.core.urlresolvers import reverse, NoReverseMatch
from django.template import TemplateSyntaxError, Library, \ from django.template import (TemplateSyntaxError, Library,
VariableDoesNotExist, Node, Variable VariableDoesNotExist, Node, Variable)
from django.utils.text import unescape_string_literal from django.utils.text import unescape_string_literal
from django.utils.translation import ugettext as _ from django.utils.translation import ugettext as _
from common.utils import urlquote from common.utils import urlquote
from navigation.api import object_navigation, multi_object_navigation, \ from navigation.api import (object_navigation, multi_object_navigation,
top_menu_entries, sidebar_templates top_menu_entries, sidebar_templates)
from navigation.forms import MultiItemForm from navigation.forms import MultiItemForm
from navigation.utils import resolve_to_name from navigation.utils import resolve_to_name

View File

@@ -1,3 +1,5 @@
from __future__ import absolute_import
import logging import logging
from django.db import transaction from django.db import transaction
@@ -14,21 +16,15 @@ from project_tools.api import register_tool
from scheduler.api import register_interval_job from scheduler.api import register_interval_job
from ocr.conf.settings import AUTOMATIC_OCR from .conf.settings import (AUTOMATIC_OCR, QUEUE_PROCESSING_INTERVAL)
from ocr.conf.settings import QUEUE_PROCESSING_INTERVAL from .models import DocumentQueue, QueueTransformation, QueueDocument
from ocr.models import DocumentQueue, QueueTransformation, QueueDocument from .tasks import task_process_document_queues
from ocr.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__) 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 #Links
submit_document = {'text': _('submit to OCR queue'), 'view': 'submit_document', 'args': 'object.id', 'famfam': 'hourglass_add', 'permissions': [PERMISSION_OCR_DOCUMENT]} 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]} 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 #Some code from http://wiki.github.com/hoffstaetter/python-tesseract
from __future__ import absolute_import
import codecs import codecs
import os import os
@@ -13,14 +14,12 @@ from common.conf.settings import TEMPORARY_DIRECTORY
from converter.api import convert from converter.api import convert
from documents.models import DocumentPage from documents.models import DocumentPage
from ocr.conf.settings import TESSERACT_PATH from .conf.settings import (TESSERACT_PATH, TESSERACT_LANGUAGE, UNPAPER_PATH)
from ocr.conf.settings import TESSERACT_LANGUAGE from .exceptions import TesseractError, UnpaperError
from ocr.exceptions import TesseractError, UnpaperError from .parsers import parse_document_page
from ocr.conf.settings import UNPAPER_PATH from .parsers.exceptions import ParserError, ParserUnknownFile
from ocr.parsers import parse_document_page from .literals import (DEFAULT_OCR_FILE_FORMAT, UNPAPER_FILE_FORMAT,
from ocr.parsers.exceptions import ParserError, ParserUnknownFile DEFAULT_OCR_FILE_EXTENSION)
from ocr.literals import DEFAULT_OCR_FILE_FORMAT, UNPAPER_FILE_FORMAT, \
DEFAULT_OCR_FILE_EXTENSION
def get_language_backend(): def get_language_backend():

View File

@@ -1,6 +1,8 @@
from __future__ import absolute_import
from django.db import models from django.db import models
from ocr.exceptions import AlreadyQueued from .exceptions import AlreadyQueued
class DocumentQueueManager(models.Manager): class DocumentQueueManager(models.Manager):

View File

@@ -1,3 +1,5 @@
from __future__ import absolute_import
from ast import literal_eval from ast import literal_eval
from datetime import datetime from datetime import datetime
@@ -13,11 +15,11 @@ from documents.models import Document
from converter.api import get_available_transformations_choices from converter.api import get_available_transformations_choices
from sources.managers import SourceTransformationManager from sources.managers import SourceTransformationManager
from ocr.literals import DOCUMENTQUEUE_STATE_STOPPED, \ from .literals import (DOCUMENTQUEUE_STATE_STOPPED,
DOCUMENTQUEUE_STATE_CHOICES, QUEUEDOCUMENT_STATE_PENDING, \ DOCUMENTQUEUE_STATE_CHOICES, QUEUEDOCUMENT_STATE_PENDING,
QUEUEDOCUMENT_STATE_CHOICES, QUEUEDOCUMENT_STATE_PROCESSING QUEUEDOCUMENT_STATE_CHOICES, QUEUEDOCUMENT_STATE_PROCESSING)
from ocr.managers import DocumentQueueManager from .managers import DocumentQueueManager
from ocr.exceptions import ReQueueError from .exceptions import ReQueueError
class DocumentQueue(models.Model): 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 from datetime import timedelta, datetime
import platform import platform
from time import sleep from time import sleep
@@ -9,15 +11,13 @@ from django.db.models import Q
from job_processor.api import process_job from job_processor.api import process_job
from lock_manager import Lock, LockError from lock_manager import Lock, LockError
from ocr.api import do_document_ocr from .api import do_document_ocr
from ocr.literals import QUEUEDOCUMENT_STATE_PENDING, \ from .literals import (QUEUEDOCUMENT_STATE_PENDING,
QUEUEDOCUMENT_STATE_PROCESSING, DOCUMENTQUEUE_STATE_ACTIVE, \ QUEUEDOCUMENT_STATE_PROCESSING, DOCUMENTQUEUE_STATE_ACTIVE,
QUEUEDOCUMENT_STATE_ERROR QUEUEDOCUMENT_STATE_ERROR)
from ocr.models import QueueDocument, DocumentQueue from .models import QueueDocument, DocumentQueue
from ocr.conf.settings import NODE_CONCURRENT_EXECUTION from .conf.settings import (NODE_CONCURRENT_EXECUTION, REPLICATION_DELAY,
from ocr.conf.settings import REPLICATION_DELAY CACHE_URI, QUEUE_PROCESSING_INTERVAL)
from ocr.conf.settings import CACHE_URI
from ocr.conf.settings import QUEUE_PROCESSING_INTERVAL
LOCK_EXPIRE = 60 * 10 # Lock expires in 10 minutes LOCK_EXPIRE = 60 * 10 # Lock expires in 10 minutes
# TODO: Tie LOCK_EXPIRATION with hard task timeout # TODO: Tie LOCK_EXPIRATION with hard task timeout

View File

@@ -1,3 +1,5 @@
from __future__ import absolute_import
import socket import socket
from django.http import HttpResponseRedirect from django.http import HttpResponseRedirect
@@ -14,17 +16,16 @@ from documents.models import Document
from documents.widgets import document_link, document_thumbnail from documents.widgets import document_link, document_thumbnail
from common.utils import encapsulate from common.utils import encapsulate
from ocr import PERMISSION_OCR_DOCUMENT, PERMISSION_OCR_DOCUMENT_DELETE, \ from .permissions import (PERMISSION_OCR_DOCUMENT,
PERMISSION_OCR_QUEUE_ENABLE_DISABLE, PERMISSION_OCR_CLEAN_ALL_PAGES, \ PERMISSION_OCR_DOCUMENT_DELETE, PERMISSION_OCR_QUEUE_ENABLE_DISABLE,
PERMISSION_OCR_QUEUE_EDIT PERMISSION_OCR_CLEAN_ALL_PAGES, PERMISSION_OCR_QUEUE_EDIT)
from .models import DocumentQueue, QueueDocument, QueueTransformation
from ocr.models import DocumentQueue, QueueDocument, QueueTransformation from .literals import (QUEUEDOCUMENT_STATE_PENDING,
from ocr.literals import QUEUEDOCUMENT_STATE_PENDING, \ QUEUEDOCUMENT_STATE_PROCESSING, DOCUMENTQUEUE_STATE_STOPPED,
QUEUEDOCUMENT_STATE_PROCESSING, DOCUMENTQUEUE_STATE_STOPPED, \ DOCUMENTQUEUE_STATE_ACTIVE)
DOCUMENTQUEUE_STATE_ACTIVE from .exceptions import AlreadyQueued, ReQueueError
from ocr.exceptions import AlreadyQueued, ReQueueError from .api import clean_pages
from ocr.api import clean_pages from .forms import QueueTransformationForm, QueueTransformationForm_create
from ocr.forms import QueueTransformationForm, QueueTransformationForm_create
def queue_document_list(request, queue_name='default'): 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.contrib.auth.models import User
from django.db.models.signals import post_save from django.db.models.signals import post_save
from django.core.exceptions import ObjectDoesNotExist 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 navigation.api import register_links, register_multi_item_links
from project_setup.api import register_setup from project_setup.api import register_setup
from permissions.conf.settings import DEFAULT_ROLES from .conf.settings import DEFAULT_ROLES
from permissions.models import Role, Permission, PermissionNamespace from .models import Role, Permission, PermissionNamespace
from .permissions import (PERMISSION_ROLE_VIEW, PERMISSION_ROLE_EDIT,
permissions_namespace = PermissionNamespace('permissions', _(u'Permissions')) PERMISSION_ROLE_CREATE, PERMISSION_ROLE_DELETE,
PERMISSION_PERMISSION_GRANT, PERMISSION_PERMISSION_REVOKE)
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'))
role_list = {'text': _(u'roles'), 'view': 'role_list', 'famfam': 'medal_gold_1', 'icon': 'medal_gold_1.png', 'permissions': [PERMISSION_ROLE_VIEW]} 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]} 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 django.contrib import admin
from permissions.models import StoredPermission, PermissionHolder, Role, RoleMember from .models import StoredPermission, PermissionHolder, Role, RoleMember
class PermissionHolderInline(admin.StackedInline): class PermissionHolderInline(admin.StackedInline):

View File

@@ -1,8 +1,10 @@
from __future__ import absolute_import
from django import forms from django import forms
from common.forms import DetailForm from common.forms import DetailForm
from permissions.models import Role from .models import Role
class RoleForm(forms.ModelForm): class RoleForm(forms.ModelForm):

View File

@@ -1,3 +1,5 @@
from __future__ import absolute_import
import logging import logging
from django.db import models from django.db import models
@@ -8,7 +10,7 @@ from django.contrib.contenttypes import generic
from django.contrib.auth.models import User from django.contrib.auth.models import User
from django.core.exceptions import PermissionDenied from django.core.exceptions import PermissionDenied
from permissions.managers import (RoleMemberManager, StoredPermissionManager) from .managers import (RoleMemberManager, StoredPermissionManager)
logger = logging.getLogger(__name__) 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 operator
import itertools import itertools
@@ -17,12 +19,12 @@ from common.views import assign_remove
from common.utils import generate_choices_w_labels, encapsulate from common.utils import generate_choices_w_labels, encapsulate
from common.widgets import two_state_template from common.widgets import two_state_template
from permissions.models import Role, Permission, PermissionHolder, RoleMember from .models import Role, Permission, PermissionHolder, RoleMember
from permissions.forms import RoleForm, RoleForm_view from .forms import RoleForm, RoleForm_view
from permissions import PERMISSION_ROLE_VIEW, PERMISSION_ROLE_EDIT, \ from .permissions import (PERMISSION_ROLE_VIEW, PERMISSION_ROLE_EDIT,
PERMISSION_ROLE_CREATE, PERMISSION_ROLE_DELETE, PERMISSION_PERMISSION_GRANT, \ PERMISSION_ROLE_CREATE, PERMISSION_ROLE_DELETE,
PERMISSION_PERMISSION_REVOKE PERMISSION_PERMISSION_GRANT, PERMISSION_PERMISSION_REVOKE)
from permissions.widgets import role_permission_link from .widgets import role_permission_link
def role_list(request): 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.shortcuts import render_to_response, get_object_or_404
from django.template import RequestContext from django.template import RequestContext
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from navigation.widgets import button_navigation_widget from navigation.widgets import button_navigation_widget
from project_setup.api import setup_items from .api import setup_items
def setup_list(request): 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.shortcuts import render_to_response, get_object_or_404
from django.template import RequestContext from django.template import RequestContext
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from navigation.widgets import button_navigation_widget from navigation.widgets import button_navigation_widget
from project_tools.api import tool_items from .api import tool_items
def tools_list(request): def tools_list(request):

View File

@@ -1,10 +1,12 @@
from __future__ import absolute_import
from django.conf.urls.defaults import patterns, url from django.conf.urls.defaults import patterns, url
from djangorestframework.views import ListModelView from djangorestframework.views import ListModelView
from djangorestframework.views import ListOrCreateModelView, InstanceModelView from djangorestframework.views import ListOrCreateModelView, InstanceModelView
from rest_api.views import APIBase, Version_0, ReadOnlyInstanceModelView, IsZoomable from .views import APIBase, Version_0, ReadOnlyInstanceModelView, IsZoomable
from rest_api.resources import DocumentResourceSimple from .resources import DocumentResourceSimple
urlpatterns = patterns('', urlpatterns = patterns('',
url(r'^$', APIBase.as_view(), name='api-root'), url(r'^$', APIBase.as_view(), name='api-root'),

View File

@@ -1,5 +1,7 @@
from scheduler.runtime import scheduler from __future__ import absolute_import
from scheduler.exceptions import AlreadyScheduled
from .runtime import scheduler
from .exceptions import AlreadyScheduled
registered_jobs = {} registered_jobs = {}

View File

@@ -1,3 +1,5 @@
from __future__ import absolute_import
from django.shortcuts import render_to_response from django.shortcuts import render_to_response
from django.template import RequestContext from django.template import RequestContext
from django.utils.translation import ugettext_lazy as _ 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.utils import return_type, encapsulate
from common.widgets import exists_with_famfam from common.widgets import exists_with_famfam
from smart_settings.api import settings from .api import settings
def setting_list(request): def setting_list(request):

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_lazy as _
from navigation.api import register_links, \ from navigation.api import register_links, \
@@ -6,22 +8,16 @@ from permissions.models import Permission, PermissionNamespace
from common.utils import encapsulate from common.utils import encapsulate
from project_setup.api import register_setup from project_setup.api import register_setup
from documents.models import Document 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 acls.models import class_permissions
from sources.staging import StagingFile from .staging import StagingFile
from sources.models import WebForm, StagingFolder, SourceTransformation, \ from .models import (WebForm, StagingFolder, SourceTransformation,
WatchFolder WatchFolder)
from sources.widgets import staging_file_thumbnail from .widgets import staging_file_thumbnail
from .permissions import (PERMISSION_SOURCES_SETUP_VIEW,
sources_setup_namespace = PermissionNamespace('sources_setup', _(u'Sources setup')) PERMISSION_SOURCES_SETUP_EDIT, PERMISSION_SOURCES_SETUP_DELETE,
PERMISSION_SOURCES_SETUP_VIEW = Permission.objects.register(sources_setup_namespace, 'sources_setup_view', _(u'View existing document sources')) PERMISSION_SOURCES_SETUP_CREATE, PERMISSION_DOCUMENT_NEW_VERSION)
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'))
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_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} 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) register_setup(setup_sources)
class_permissions(Document, [ class_permissions(Document, [

View File

@@ -1,6 +1,8 @@
from __future__ import absolute_import
from django.contrib import admin 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(StagingFolder)
admin.site.register(WebForm) admin.site.register(WebForm)

View File

@@ -1,13 +1,15 @@
from __future__ import absolute_import
from django import forms from django import forms
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from django.utils.translation import ugettext from django.utils.translation import ugettext
from documents.forms import DocumentForm from documents.forms import DocumentForm
from sources.models import WebForm, StagingFolder, SourceTransformation, \ from .models import (WebForm, StagingFolder, SourceTransformation,
WatchFolder WatchFolder)
from sources.widgets import FamFamRadioSelect from .widgets import FamFamRadioSelect
from sources.utils import validate_whitelist_blacklist from .utils import validate_whitelist_blacklist
class StagingDocumentForm(DocumentForm): class StagingDocumentForm(DocumentForm):

View File

@@ -1,3 +1,5 @@
from __future__ import absolute_import
from ast import literal_eval from ast import literal_eval
from django.db import models from django.db import models
@@ -16,13 +18,13 @@ from metadata.models import MetadataType
from metadata.api import save_metadata_list from metadata.api import save_metadata_list
from scheduler.api import register_interval_job, remove_job from scheduler.api import register_interval_job, remove_job
from sources.managers import SourceTransformationManager from .managers import SourceTransformationManager
from sources.literals import SOURCE_CHOICES, SOURCE_CHOICES_PLURAL, \ from .literals import (SOURCE_CHOICES, SOURCE_CHOICES_PLURAL,
SOURCE_INTERACTIVE_UNCOMPRESS_CHOICES, SOURCE_CHOICE_WEB_FORM, \ SOURCE_INTERACTIVE_UNCOMPRESS_CHOICES, SOURCE_CHOICE_WEB_FORM,
SOURCE_CHOICE_STAGING, SOURCE_ICON_DISK, SOURCE_ICON_DRIVE, \ SOURCE_CHOICE_STAGING, SOURCE_ICON_DISK, SOURCE_ICON_DRIVE,
SOURCE_ICON_CHOICES, SOURCE_CHOICE_WATCH, SOURCE_UNCOMPRESS_CHOICES, \ SOURCE_ICON_CHOICES, SOURCE_CHOICE_WATCH, SOURCE_UNCOMPRESS_CHOICES,
SOURCE_UNCOMPRESS_CHOICE_Y SOURCE_UNCOMPRESS_CHOICE_Y)
from sources.compressed_file import CompressedFile, NotACompressedFile from .compressed_file import CompressedFile, NotACompressedFile
class BaseModel(models.Model): 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 errno
import os import os
import hashlib import hashlib

View File

@@ -1,7 +1,9 @@
from __future__ import absolute_import
from django.conf.urls.defaults import patterns, url from django.conf.urls.defaults import patterns, url
from sources.literals import SOURCE_CHOICE_WEB_FORM, SOURCE_CHOICE_STAGING, \ from .literals import (SOURCE_CHOICE_WEB_FORM, SOURCE_CHOICE_STAGING,
SOURCE_CHOICE_WATCH SOURCE_CHOICE_WATCH)
urlpatterns = patterns('sources.views', 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'), 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.http import HttpResponseRedirect
from django.shortcuts import render_to_response, get_object_or_404 from django.shortcuts import render_to_response, get_object_or_404
from django.template import RequestContext from django.template import RequestContext
@@ -8,7 +10,7 @@ from django.utils.translation import ugettext
from django.utils.safestring import mark_safe from django.utils.safestring import mark_safe
from django.conf import settings 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.models import DocumentType, Document
from documents.conf.settings import THUMBNAIL_SIZE from documents.conf.settings import THUMBNAIL_SIZE
from metadata.api import decode_metadata_from_url, metadata_repr_as_list from metadata.api import decode_metadata_from_url, metadata_repr_as_list
@@ -17,18 +19,18 @@ from common.utils import encapsulate
import sendfile import sendfile
from acls.models import AccessEntry, PermissionDenied from acls.models import AccessEntry, PermissionDenied
from sources.models import WebForm, StagingFolder, SourceTransformation, \ from sources.models import (WebForm, StagingFolder, SourceTransformation,
WatchFolder WatchFolder)
from sources.literals import SOURCE_CHOICE_WEB_FORM, SOURCE_CHOICE_STAGING, \ from sources.literals import (SOURCE_CHOICE_WEB_FORM, SOURCE_CHOICE_STAGING,
SOURCE_CHOICE_WATCH SOURCE_CHOICE_WATCH)
from sources.literals import SOURCE_UNCOMPRESS_CHOICE_Y, \ from sources.literals import (SOURCE_UNCOMPRESS_CHOICE_Y,
SOURCE_UNCOMPRESS_CHOICE_ASK SOURCE_UNCOMPRESS_CHOICE_ASK)
from sources.staging import create_staging_file_class, StagingFile from sources.staging import create_staging_file_class, StagingFile
from sources.forms import StagingDocumentForm, WebFormForm, \ from sources.forms import (StagingDocumentForm, WebFormForm,
WatchFolderSetupForm WatchFolderSetupForm)
from sources.forms import WebFormSetupForm, StagingFolderSetupForm from sources.forms import WebFormSetupForm, StagingFolderSetupForm
from sources.forms import SourceTransformationForm, SourceTransformationForm_create 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_EDIT, PERMISSION_SOURCES_SETUP_DELETE,
PERMISSION_SOURCES_SETUP_CREATE, PERMISSION_DOCUMENT_NEW_VERSION) 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 django.utils.translation import ugettext_lazy as _
from navigation.api import register_links, register_top_menu, \ from navigation.api import (register_links, register_top_menu,
register_model_list_columns, register_multi_item_links register_model_list_columns, register_multi_item_links)
from permissions.models import PermissionNamespace, Permission
from common.utils import encapsulate from common.utils import encapsulate
from documents.models import Document from documents.models import Document
from acls.models import class_permissions from acls.models import class_permissions
@@ -10,16 +11,10 @@ from acls.models import class_permissions
from taggit.models import Tag from taggit.models import Tag
from taggit.managers import TaggableManager from taggit.managers import TaggableManager
from tags.widgets import tag_color_block from .widgets import tag_color_block
from .permissions import (PERMISSION_TAG_CREATE, PERMISSION_TAG_ATTACH,
tags_namespace = PermissionNamespace('tags', _(u'Tags')) PERMISSION_TAG_REMOVE, PERMISSION_TAG_DELETE, PERMISSION_TAG_EDIT,
PERMISSION_TAG_VIEW)
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'))
tag_list = {'text': _(u'tag list'), 'view': 'tag_list', 'famfam': 'tag_blue'} 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'} 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 django.contrib import admin
from tags.models import TagProperties from .models import TagProperties
admin.site.register(TagProperties) admin.site.register(TagProperties)

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