Cleanups, permissions separation into explicit module, absolute import update
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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):
|
||||||
|
|||||||
@@ -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
14
apps/acls/permissions.py
Normal 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'))
|
||||||
@@ -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):
|
||||||
|
|||||||
@@ -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):
|
||||||
|
|||||||
@@ -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()
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -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 = [
|
||||||
|
|||||||
@@ -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', {
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|||||||
@@ -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'}
|
||||||
|
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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'
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|||||||
@@ -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]}
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|
||||||
|
|||||||
@@ -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__)
|
||||||
|
|
||||||
|
|||||||
@@ -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]}
|
||||||
|
|||||||
12
apps/document_comments/permissions.py
Normal file
12
apps/document_comments/permissions.py
Normal 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'))
|
||||||
@@ -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):
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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):
|
||||||
|
|||||||
@@ -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''
|
||||||
|
|
||||||
|
|||||||
@@ -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):
|
||||||
|
|||||||
10
apps/document_indexing/permissions.py
Normal file
10
apps/document_indexing/permissions.py
Normal 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'))
|
||||||
@@ -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):
|
||||||
|
|||||||
@@ -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'))
|
||||||
|
|||||||
@@ -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):
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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):
|
||||||
|
|||||||
@@ -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'),
|
||||||
|
|||||||
@@ -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):
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
24
apps/documents/permissions.py
Normal file
24
apps/documents/permissions.py
Normal 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'))
|
||||||
@@ -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):
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
from __future__ import absolute_import
|
||||||
|
|
||||||
import os
|
import os
|
||||||
|
|
||||||
from django.utils import unittest
|
from django.utils import unittest
|
||||||
|
|||||||
@@ -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'),
|
||||||
|
|||||||
@@ -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__)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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):
|
||||||
|
|||||||
@@ -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):
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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):
|
||||||
|
|||||||
@@ -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):
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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):
|
||||||
|
|||||||
@@ -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):
|
||||||
|
|||||||
9
apps/history/permissions.py
Normal file
9
apps/history/permissions.py
Normal 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'))
|
||||||
@@ -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):
|
||||||
|
|||||||
@@ -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]}
|
||||||
|
|||||||
@@ -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):
|
||||||
|
|||||||
12
apps/linking/permissions.py
Normal file
12
apps/linking/permissions.py
Normal 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'))
|
||||||
@@ -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)
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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):
|
||||||
|
|||||||
@@ -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__)
|
||||||
|
|
||||||
|
|||||||
@@ -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):
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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):
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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):
|
||||||
|
|||||||
@@ -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')])
|
||||||
|
|||||||
@@ -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):
|
||||||
|
|||||||
@@ -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''
|
||||||
|
|||||||
22
apps/metadata/permissions.py
Normal file
22
apps/metadata/permissions.py
Normal 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'))
|
||||||
@@ -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):
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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]}
|
||||||
|
|||||||
@@ -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():
|
||||||
|
|||||||
@@ -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):
|
||||||
|
|||||||
@@ -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
13
apps/ocr/permissions.py
Normal 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'))
|
||||||
@@ -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
|
||||||
|
|||||||
@@ -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'):
|
||||||
|
|||||||
@@ -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]}
|
||||||
|
|||||||
@@ -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):
|
||||||
|
|||||||
@@ -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):
|
||||||
|
|||||||
@@ -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__)
|
||||||
|
|
||||||
|
|||||||
14
apps/permissions/permissions.py
Normal file
14
apps/permissions/permissions.py
Normal 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'))
|
||||||
@@ -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):
|
||||||
|
|||||||
@@ -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):
|
||||||
|
|||||||
@@ -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):
|
||||||
|
|||||||
@@ -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'),
|
||||||
|
|||||||
@@ -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 = {}
|
||||||
|
|
||||||
|
|||||||
@@ -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):
|
||||||
|
|||||||
@@ -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, [
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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):
|
||||||
|
|||||||
@@ -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):
|
||||||
|
|||||||
14
apps/sources/permissions.py
Normal file
14
apps/sources/permissions.py
Normal 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'))
|
||||||
@@ -1,3 +1,5 @@
|
|||||||
|
from __future__ import absolute_import
|
||||||
|
|
||||||
import errno
|
import errno
|
||||||
import os
|
import os
|
||||||
import hashlib
|
import hashlib
|
||||||
|
|||||||
@@ -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'),
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|
||||||
|
|||||||
@@ -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'}
|
||||||
|
|||||||
@@ -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
Reference in New Issue
Block a user