Fixed error and some warning returned by pylint
This commit is contained in:
@@ -2,4 +2,5 @@ import tempfile
|
|||||||
|
|
||||||
from common.conf import settings as common_settings
|
from common.conf import settings as common_settings
|
||||||
|
|
||||||
TEMPORARY_DIRECTORY = common_settings.TEMPORARY_DIRECTORY if common_settings.TEMPORARY_DIRECTORY else tempfile.mkdtemp()
|
TEMPORARY_DIRECTORY = common_settings.TEMPORARY_DIRECTORY \
|
||||||
|
if common_settings.TEMPORARY_DIRECTORY else tempfile.mkdtemp()
|
||||||
|
|||||||
@@ -2,38 +2,42 @@ from django import forms
|
|||||||
from django.utils.safestring import mark_safe
|
from django.utils.safestring import mark_safe
|
||||||
from django.utils.translation import ugettext as _
|
from django.utils.translation import ugettext as _
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from django.conf import settings
|
|
||||||
from django.template.defaultfilters import capfirst
|
|
||||||
|
|
||||||
from common.utils import return_attrib
|
from common.utils import return_attrib
|
||||||
|
|
||||||
|
|
||||||
class DetailSelectMultiple(forms.widgets.SelectMultiple):
|
class DetailSelectMultiple(forms.widgets.SelectMultiple):
|
||||||
def __init__(self, queryset=None, *args, **kwargs):
|
def __init__(self, queryset=None, *args, **kwargs):
|
||||||
self.queryset=queryset
|
self.queryset = queryset
|
||||||
super(DetailSelectMultiple, self).__init__(*args, **kwargs)
|
super(DetailSelectMultiple, self).__init__(*args, **kwargs)
|
||||||
|
|
||||||
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 = ''
|
||||||
final_attrs = self.build_attrs(attrs, name=name)
|
final_attrs = self.build_attrs(attrs, name=name)
|
||||||
css_class = final_attrs.get('class', 'list')
|
css_class = final_attrs.get('class', 'list')
|
||||||
output = u'<ul class="%s">' % css_class
|
output = u'<ul class="%s">' % css_class
|
||||||
options = None
|
options = None
|
||||||
if value:
|
if value:
|
||||||
if getattr(value, '__iter__', None):
|
if getattr(value, '__iter__', None):
|
||||||
options = [(index, string) for index, string in self.choices if index in value]
|
options = [(index, string) for index, string in \
|
||||||
|
self.choices if index in value]
|
||||||
else:
|
else:
|
||||||
options = [(index, string) for index, string in self.choices if index == value]
|
options = [(index, string) for index, string in \
|
||||||
|
self.choices if index == value]
|
||||||
else:
|
else:
|
||||||
if self.choices:
|
if self.choices:
|
||||||
if self.choices[0] != (u'', u'---------') and value != []:
|
if self.choices[0] != (u'', u'---------') and value != []:
|
||||||
options = [(index, string) for index, string in self.choices]
|
options = [(index, string) for index, string in \
|
||||||
|
self.choices]
|
||||||
|
|
||||||
if options:
|
if options:
|
||||||
for index, string in options:
|
for index, string in options:
|
||||||
if self.queryset:
|
if self.queryset:
|
||||||
try:
|
try:
|
||||||
output += u'<li><a href="%s">%s</a></li>' % (self.queryset.get(pk=index).get_absolute_url(), string)
|
output += u'<li><a href="%s">%s</a></li>' % (
|
||||||
|
self.queryset.get(pk=index).get_absolute_url(),
|
||||||
|
string)
|
||||||
except AttributeError:
|
except AttributeError:
|
||||||
output += u'<li>%s</li>' % (string)
|
output += u'<li>%s</li>' % (string)
|
||||||
else:
|
else:
|
||||||
@@ -57,12 +61,14 @@ class DetailForm(forms.ModelForm):
|
|||||||
label = 'label' in extra_field and extra_field['label'] or None
|
label = 'label' in extra_field and extra_field['label'] or None
|
||||||
#TODO: Add others result types <=> Field types
|
#TODO: Add others result types <=> Field types
|
||||||
if isinstance(result, models.query.QuerySet):
|
if isinstance(result, models.query.QuerySet):
|
||||||
self.fields[extra_field['field']]=forms.ModelMultipleChoiceField(queryset=result, label=label)
|
self.fields[extra_field['field']] = \
|
||||||
|
forms.ModelMultipleChoiceField(
|
||||||
|
queryset=result, label=label)
|
||||||
else:
|
else:
|
||||||
self.fields[extra_field['field']]=forms.CharField(
|
self.fields[extra_field['field']] = forms.CharField(
|
||||||
label=extra_field['label'],
|
label=extra_field['label'],
|
||||||
#initial=getattr(self.instance, extra_field['field'], None),
|
initial=return_attrib(self.instance,
|
||||||
initial=return_attrib(self.instance, extra_field['field'], None),
|
extra_field['field'], None),
|
||||||
widget=PlainWidget)
|
widget=PlainWidget)
|
||||||
|
|
||||||
for field_name, field in self.fields.items():
|
for field_name, field in self.fields.items():
|
||||||
@@ -72,36 +78,44 @@ class DetailForm(forms.ModelForm):
|
|||||||
attrs=field.widget.attrs,
|
attrs=field.widget.attrs,
|
||||||
queryset=getattr(field, 'queryset', None),
|
queryset=getattr(field, 'queryset', None),
|
||||||
)
|
)
|
||||||
self.fields[field_name].help_text=''
|
self.fields[field_name].help_text = ''
|
||||||
elif isinstance(field.widget, forms.widgets.Select):
|
elif isinstance(field.widget, forms.widgets.Select):
|
||||||
self.fields[field_name].widget = DetailSelectMultiple(
|
self.fields[field_name].widget = DetailSelectMultiple(
|
||||||
choices=field.widget.choices,
|
choices=field.widget.choices,
|
||||||
attrs=field.widget.attrs,
|
attrs=field.widget.attrs,
|
||||||
queryset=getattr(field, 'queryset', None),
|
queryset=getattr(field, 'queryset', None),
|
||||||
)
|
)
|
||||||
self.fields[field_name].help_text=''
|
self.fields[field_name].help_text = ''
|
||||||
|
|
||||||
|
|
||||||
class GenericConfirmForm(forms.Form):
|
class GenericConfirmForm(forms.Form):
|
||||||
|
def __init__(self, *args, **kwargs):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
class GenericAssignRemoveForm(forms.Form):
|
class GenericAssignRemoveForm(forms.Form):
|
||||||
left_list = forms.ModelMultipleChoiceField(required=False, queryset=None)
|
def __init__(self, *args, **kwargs):
|
||||||
right_list = forms.ModelMultipleChoiceField(required=False, queryset=None)
|
left_list_qryset = kwargs.pop('left_list_qryset', None)
|
||||||
def __init__(self, left_list_qryset=None, right_list_qryset=None, left_filter=None, *args, **kwargs):
|
right_list_qryset = kwargs.pop('right_list_qryset', None)
|
||||||
|
left_filter = kwargs.pop('left_filter', None)
|
||||||
super(GenericAssignRemoveForm, self).__init__(*args, **kwargs)
|
super(GenericAssignRemoveForm, self).__init__(*args, **kwargs)
|
||||||
if left_filter:
|
if left_filter:
|
||||||
self.fields['left_list'].queryset = left_list_qryset.filter(*left_filter)
|
self.fields['left_list'].queryset = left_list_qryset.filter(
|
||||||
|
*left_filter)
|
||||||
else:
|
else:
|
||||||
self.fields['left_list'].queryset = left_list_qryset
|
self.fields['left_list'].queryset = left_list_qryset
|
||||||
|
|
||||||
self.fields['right_list'].queryset = right_list_qryset
|
self.fields['right_list'].queryset = right_list_qryset
|
||||||
|
|
||||||
|
left_list = forms.ModelMultipleChoiceField(required=False, queryset=None)
|
||||||
|
right_list = forms.ModelMultipleChoiceField(required=False, queryset=None)
|
||||||
|
|
||||||
|
|
||||||
class FilterForm(forms.Form):
|
class FilterForm(forms.Form):
|
||||||
def __init__(self, list_filters, *args, **kwargs):
|
def __init__(self, list_filters, *args, **kwargs):
|
||||||
super(FilterForm, self).__init__(*args, **kwargs)
|
super(FilterForm, self).__init__(*args, **kwargs)
|
||||||
for list_filter in list_filters:
|
for list_filter in list_filters:
|
||||||
label = list_filter.get('title', list_filter['name'])
|
label = list_filter.get('title', list_filter['name'])
|
||||||
self.fields[list_filter['name']] = forms.ModelChoiceField(queryset=list_filter['queryset'], label=label[0].upper() + label[1:], required=False)
|
self.fields[list_filter['name']] = forms.ModelChoiceField(
|
||||||
|
queryset=list_filter['queryset'],
|
||||||
|
label=label[0].upper() + label[1:], required=False)
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ class LoginRequiredMiddleware:
|
|||||||
Requires authentication middleware and template context processors to be
|
Requires authentication middleware and template context processors to be
|
||||||
loaded. You'll get an error if they aren't.
|
loaded. You'll get an error if they aren't.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def process_request(self, request):
|
def process_request(self, request):
|
||||||
assert hasattr(request, 'user'), "The Login Required middleware\
|
assert hasattr(request, 'user'), "The Login Required middleware\
|
||||||
requires authentication middleware to be installed. Edit your\
|
requires authentication middleware to be installed. Edit your\
|
||||||
|
|||||||
@@ -1,6 +1,4 @@
|
|||||||
from django.core.urlresolvers import reverse
|
from django.template import Library
|
||||||
from django.template.defaultfilters import stringfilter
|
|
||||||
from django.template import Library, Node, Variable, VariableDoesNotExist
|
|
||||||
|
|
||||||
from common.utils import return_attrib
|
from common.utils import return_attrib
|
||||||
from navigation.api import model_list_columns
|
from navigation.api import model_list_columns
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
from django.template import TemplateSyntaxError, Library, VariableDoesNotExist
|
from django.template import Library
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
|
|
||||||
register = Library()
|
register = Library()
|
||||||
|
|||||||
@@ -1,9 +1,7 @@
|
|||||||
import re
|
import re
|
||||||
|
|
||||||
from django.template import Node, Variable
|
from django.template import Node
|
||||||
from django.template import TemplateSyntaxError, Library, VariableDoesNotExist
|
from django.template import TemplateSyntaxError, Library
|
||||||
from django.template.defaultfilters import stringfilter
|
|
||||||
from django.template.defaultfilters import date as datefilter
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
|
|
||||||
register = Library()
|
register = Library()
|
||||||
|
|||||||
@@ -30,18 +30,19 @@ def urlquote(link=None, get={}):
|
|||||||
if isinstance(link, dict):
|
if isinstance(link, dict):
|
||||||
# urlqoute({'key': 'value', 'key2': 'value2'}) --> key=value&key2=value2
|
# urlqoute({'key': 'value', 'key2': 'value2'}) --> key=value&key2=value2
|
||||||
assert not get, get
|
assert not get, get
|
||||||
get=link
|
get = link
|
||||||
link=''
|
link = ''
|
||||||
assert isinstance(get, dict), 'wrong type "%s", dict required' % type(get)
|
assert isinstance(get, dict), 'wrong type "%s", dict required' % type(get)
|
||||||
#assert not (link.startswith('http://') or link.startswith('https://')), \
|
#assert not (link.startswith('http://') or link.startswith('https://')), \
|
||||||
# 'This method should only quote the url path. It should not start with http(s):// (%s)' % (
|
# 'This method should only quote the url path.
|
||||||
|
# It should not start with http(s):// (%s)' % (
|
||||||
# link)
|
# link)
|
||||||
if get:
|
if get:
|
||||||
# http://code.djangoproject.com/ticket/9089
|
# http://code.djangoproject.com/ticket/9089
|
||||||
if isinstance(get, MultiValueDict):
|
if isinstance(get, MultiValueDict):
|
||||||
get=get.lists()
|
get = get.lists()
|
||||||
if link:
|
if link:
|
||||||
link='%s?' % django_urlquote(link)
|
link = '%s?' % django_urlquote(link)
|
||||||
return u'%s%s' % (link, django_urlencode(get, doseq=True))
|
return u'%s%s' % (link, django_urlencode(get, doseq=True))
|
||||||
else:
|
else:
|
||||||
return django_urlquote(link)
|
return django_urlquote(link)
|
||||||
@@ -71,15 +72,15 @@ def return_attrib(obj, attrib, arguments={}):
|
|||||||
|
|
||||||
#http://snippets.dzone.com/posts/show/5434
|
#http://snippets.dzone.com/posts/show/5434
|
||||||
#http://snippets.dzone.com/user/jakob
|
#http://snippets.dzone.com/user/jakob
|
||||||
def pretty_size(size, suffixes = [('B',2**10), ('K',2**20), ('M',2**30), ('G',2**40), ('T',2**50)]):
|
def pretty_size(size, suffixes = [('B', 2**10), ('K', 2**20), ('M', 2**30), ('G', 2**40), ('T', 2**50)]):
|
||||||
for suf, lim in suffixes:
|
for suf, lim in suffixes:
|
||||||
if size > lim:
|
if size > lim:
|
||||||
continue
|
continue
|
||||||
else:
|
else:
|
||||||
return round(size/float(lim/2**10),2).__str__()+suf
|
return round(size/float(lim/2**10), 2).__str__()+suf
|
||||||
|
|
||||||
def pretty_size_10(size):
|
def pretty_size_10(size):
|
||||||
return pretty_size(size, suffixes = [('B',10**3), ('K',10**6), ('M',10**9), ('G',10**12), ('T',10**15)])
|
return pretty_size(size, suffixes = [('B', 10**3), ('K', 10**6), ('M', 10**9), ('G', 10**12), ('T', 10**15)])
|
||||||
|
|
||||||
|
|
||||||
def exists_with_famfam(path):
|
def exists_with_famfam(path):
|
||||||
@@ -98,14 +99,29 @@ def exists_with_famfam(path):
|
|||||||
# 2006-03-16
|
# 2006-03-16
|
||||||
# Thanks to David Kern <kernd@reasonspace.com> for fixing some bugs.
|
# Thanks to David Kern <kernd@reasonspace.com> for fixing some bugs.
|
||||||
|
|
||||||
suffixes = [u"II", u"(II)", u"III", u"(III)", u"IV", u"(IV)", u"VI", u"(VI)",
|
#class Name(str):
|
||||||
u"VII", u"(VII)", u"2nd", u"(2nd)", u"3rd", u"(3rd)", u"4th", u"(4th)",
|
# """A Class (based on the string type) that properly capitalizes a name."""
|
||||||
u"5th", u"(5th)"]
|
#
|
||||||
|
# def __new__(cls, value=''):
|
||||||
|
# original = value
|
||||||
|
# proper = Capitalize(value)
|
||||||
|
# obj = str.__new__(cls, proper)
|
||||||
|
# obj.original = original
|
||||||
|
# return obj
|
||||||
|
|
||||||
# The names listed here are included by permission from John Cardinal's TMG Utility.
|
def proper_name(name):
|
||||||
# http://www.johncardinal.com/tmgutil/index.htm
|
"""Does the work of capitalizing a name (can be a full name)."""
|
||||||
# John Cardinal maintains the copyright for this list of names.
|
|
||||||
surnames = [
|
suffixes = [
|
||||||
|
u"II", u"(II)", u"III", u"(III)", u"IV", u"(IV)", u"VI", u"(VI)",
|
||||||
|
u"VII", u"(VII)", u"2nd", u"(2nd)", u"3rd", u"(3rd)", u"4th", u"(4th)",
|
||||||
|
u"5th", u"(5th)"
|
||||||
|
]
|
||||||
|
|
||||||
|
# The names listed here are included by permission from John Cardinal's TMG Utility.
|
||||||
|
# http://www.johncardinal.com/tmgutil/index.htm
|
||||||
|
# John Cardinal maintains the copyright for this list of names.
|
||||||
|
surnames = [
|
||||||
u"ApShaw", u"d'Albini", "d'Aubigney", u"d'Aubigné", u"d'Autry",
|
u"ApShaw", u"d'Albini", "d'Aubigney", u"d'Aubigné", u"d'Autry",
|
||||||
u"d'Entremont", u"d'Hurst", u"D'ovidio", u"da Graça", u"DaSilva",
|
u"d'Entremont", u"d'Hurst", u"D'ovidio", u"da Graça", u"DaSilva",
|
||||||
u"DeAnda", u"deAnnethe", u"deAubigne", u"deAubigny", u"DeBardelaben",
|
u"DeAnda", u"deAnnethe", u"deAubigne", u"deAubigny", u"DeBardelaben",
|
||||||
@@ -218,20 +234,9 @@ surnames = [
|
|||||||
u"vonFreymann", u"vonHeimburg", u"VonHuben", u"vonKramer",
|
u"vonFreymann", u"vonHeimburg", u"VonHuben", u"vonKramer",
|
||||||
u"vonKruchenburg", u"vonPostel", u"VonRohr", u"VonRohrbach",
|
u"vonKruchenburg", u"vonPostel", u"VonRohr", u"VonRohrbach",
|
||||||
u"VonSass", u"VonSasse", u"vonSchlotte", u"VonSchneider", u"VonSeldern",
|
u"VonSass", u"VonSasse", u"vonSchlotte", u"VonSchneider", u"VonSeldern",
|
||||||
u"VonSpringer", u"VonVeyelmann", u"VonZweidorff"]
|
u"VonSpringer", u"VonVeyelmann", u"VonZweidorff"
|
||||||
|
]
|
||||||
|
|
||||||
#class Name(str):
|
|
||||||
# """A Class (based on the string type) that properly capitalizes a name."""
|
|
||||||
#
|
|
||||||
# def __new__(cls, value=''):
|
|
||||||
# original = value
|
|
||||||
# proper = Capitalize(value)
|
|
||||||
# obj = str.__new__(cls, proper)
|
|
||||||
# obj.original = original
|
|
||||||
# return obj
|
|
||||||
|
|
||||||
def proper_name(name):
|
|
||||||
"""Does the work of capitalizing a name (can be a full name)."""
|
|
||||||
hyphen_indexes = []
|
hyphen_indexes = []
|
||||||
while name.find('-') > -1:
|
while name.find('-') > -1:
|
||||||
index = name.find('-')
|
index = name.find('-')
|
||||||
|
|||||||
@@ -1,15 +1,20 @@
|
|||||||
from django.shortcuts import redirect
|
from django.shortcuts import redirect
|
||||||
from django.utils.translation import ugettext as _
|
from django.utils.translation import ugettext as _
|
||||||
from django.contrib import messages
|
from django.contrib import messages
|
||||||
from django.http import HttpResponse, HttpResponseRedirect, Http404
|
from django.http import HttpResponseRedirect
|
||||||
|
|
||||||
|
|
||||||
def password_change_done(request):
|
def password_change_done(request):
|
||||||
|
'''View called when the new user password has been accepted'''
|
||||||
|
|
||||||
messages.success(request, _(u'Your password has been successfully changed.'))
|
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 usuing a multi object action, which
|
||||||
|
then redirects to the appropiate specialized view'''
|
||||||
|
|
||||||
action = request.GET.get('action', None)
|
action = request.GET.get('action', None)
|
||||||
id_list = u','.join([key[3:] for key in request.GET.keys() if key.startswith('pk_')])
|
id_list = u','.join([key[3:] for key in request.GET.keys() if key.startswith('pk_')])
|
||||||
|
|
||||||
|
|||||||
@@ -1,11 +1,7 @@
|
|||||||
import os
|
import os
|
||||||
import shlex
|
|
||||||
import subprocess
|
import subprocess
|
||||||
import tempfile
|
|
||||||
import shutil
|
|
||||||
|
|
||||||
from django.utils.importlib import import_module
|
from django.utils.importlib import import_module
|
||||||
from django.conf import settings
|
|
||||||
from django.core.exceptions import ImproperlyConfigured
|
from django.core.exceptions import ImproperlyConfigured
|
||||||
from django.template.defaultfilters import slugify
|
from django.template.defaultfilters import slugify
|
||||||
|
|
||||||
@@ -17,8 +13,7 @@ from converter.conf.settings import LOW_QUALITY_OPTIONS
|
|||||||
from converter.conf.settings import HIGH_QUALITY_OPTIONS
|
from converter.conf.settings import HIGH_QUALITY_OPTIONS
|
||||||
from converter.conf.settings import GRAPHICS_BACKEND
|
from converter.conf.settings import GRAPHICS_BACKEND
|
||||||
|
|
||||||
from exceptions import ConvertError, UnknownFormat, UnpaperError, \
|
from exceptions import UnpaperError
|
||||||
IdentifyError, UnkownConvertError
|
|
||||||
|
|
||||||
#from converter.conf.settings import UNOCONV_PATH
|
#from converter.conf.settings import UNOCONV_PATH
|
||||||
from common import TEMPORARY_DIRECTORY
|
from common import TEMPORARY_DIRECTORY
|
||||||
@@ -164,17 +159,9 @@ def convert_document_for_ocr(document, page=0, format='tif'):
|
|||||||
#Catch invalid or non existing pages
|
#Catch invalid or non existing pages
|
||||||
document_page = document.documentpage_set.get(document=document, page_number=page+1)
|
document_page = document.documentpage_set.get(document=document, page_number=page+1)
|
||||||
for page_transformation in document_page.documentpagetransformation_set.all():
|
for page_transformation in document_page.documentpagetransformation_set.all():
|
||||||
try:
|
|
||||||
if page_transformation.transformation in TRANFORMATION_CHOICES:
|
if page_transformation.transformation in TRANFORMATION_CHOICES:
|
||||||
output = TRANFORMATION_CHOICES[page_transformation.transformation] % eval(page_transformation.arguments)
|
output = TRANFORMATION_CHOICES[page_transformation.transformation] % eval(page_transformation.arguments)
|
||||||
transformation_list.append(output)
|
transformation_list.append(output)
|
||||||
except Exception, e:
|
|
||||||
if request.user.is_staff:
|
|
||||||
messages.warning(request, _(u'Error for transformation %(transformation)s:, %(error)s') %
|
|
||||||
{'transformation':page_transformation.get_transformation_display(),
|
|
||||||
'error':e})
|
|
||||||
else:
|
|
||||||
pass
|
|
||||||
except ObjectDoesNotExist:
|
except ObjectDoesNotExist:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|||||||
@@ -3,8 +3,7 @@ import subprocess
|
|||||||
|
|
||||||
from converter.conf.settings import GM_PATH
|
from converter.conf.settings import GM_PATH
|
||||||
from converter.api import QUALITY_DEFAULT, QUALITY_SETTINGS
|
from converter.api import QUALITY_DEFAULT, QUALITY_SETTINGS
|
||||||
from converter.exceptions import ConvertError, UnknownFormat, UnpaperError, \
|
from converter.exceptions import ConvertError, UnknownFormat, IdentifyError
|
||||||
IdentifyError, UnkownConvertError
|
|
||||||
|
|
||||||
CONVERTER_ERROR_STRING_NO_DECODER = 'No decode delegate for this image format'
|
CONVERTER_ERROR_STRING_NO_DECODER = 'No decode delegate for this image format'
|
||||||
|
|
||||||
|
|||||||
@@ -4,8 +4,8 @@ import subprocess
|
|||||||
from converter.conf.settings import IM_IDENTIFY_PATH
|
from converter.conf.settings import IM_IDENTIFY_PATH
|
||||||
from converter.conf.settings import IM_CONVERT_PATH
|
from converter.conf.settings import IM_CONVERT_PATH
|
||||||
from converter.api import QUALITY_DEFAULT, QUALITY_SETTINGS
|
from converter.api import QUALITY_DEFAULT, QUALITY_SETTINGS
|
||||||
from converter.exceptions import ConvertError, UnknownFormat, UnpaperError, \
|
from converter.exceptions import ConvertError, UnknownFormat, \
|
||||||
IdentifyError, UnkownConvertError
|
IdentifyError
|
||||||
|
|
||||||
CONVERTER_ERROR_STRING_NO_DECODER = 'no decode delegate for this image format'
|
CONVERTER_ERROR_STRING_NO_DECODER = 'no decode delegate for this image format'
|
||||||
|
|
||||||
|
|||||||
@@ -1,18 +1,29 @@
|
|||||||
class ConvertError(Exception):
|
class ConvertError(Exception):
|
||||||
|
'''Base exception for all coverter app exceptions
|
||||||
|
'''
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
class UnknownFormat(ConvertError):
|
class UnknownFormat(ConvertError):
|
||||||
|
'''Raised when the converter backend can't understand or there
|
||||||
|
isn't an appropiate driver available'''
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
class UnpaperError(ConvertError):
|
class UnpaperError(ConvertError):
|
||||||
|
'''Raised by upaper
|
||||||
|
'''
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
class IdentifyError(ConvertError):
|
class IdentifyError(ConvertError):
|
||||||
|
'''Raised by identify
|
||||||
|
'''
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
class UnkownConvertError(ConvertError):
|
class UnkownConvertError(ConvertError):
|
||||||
|
'''Raised when an error is found but there is no disernible way to
|
||||||
|
identify the kind of error
|
||||||
|
'''
|
||||||
pass
|
pass
|
||||||
|
|||||||
@@ -1,8 +1,3 @@
|
|||||||
import os
|
|
||||||
import tempfile
|
|
||||||
|
|
||||||
from common import TEMPORARY_DIRECTORY
|
|
||||||
|
|
||||||
#http://stackoverflow.com/questions/123198/how-do-i-copy-a-file-in-python
|
#http://stackoverflow.com/questions/123198/how-do-i-copy-a-file-in-python
|
||||||
def copyfile(source, dest, buffer_size=1024*1024):
|
def copyfile(source, dest, buffer_size=1024*1024):
|
||||||
"""
|
"""
|
||||||
|
|||||||
@@ -73,7 +73,6 @@ class ImageWidget(forms.widgets.Widget):
|
|||||||
if not self.attrs.get('hide_detail_link', False):
|
if not self.attrs.get('hide_detail_link', False):
|
||||||
for document_page in value.documentpage_set.all():
|
for document_page in value.documentpage_set.all():
|
||||||
output.append('<br/><a href="%(url)s"><span class="famfam active famfam-page_white"></span>%(text)s</a>' % {
|
output.append('<br/><a href="%(url)s"><span class="famfam active famfam-page_white"></span>%(text)s</a>' % {
|
||||||
'page_number': document_page.page_number,
|
|
||||||
'url':reverse('document_page_view', args=[document_page.id]),
|
'url':reverse('document_page_view', args=[document_page.id]),
|
||||||
'text':ugettext(u'Page %s details') % document_page.page_number})
|
'text':ugettext(u'Page %s details') % document_page.page_number})
|
||||||
|
|
||||||
@@ -108,7 +107,7 @@ class DocumentPreviewForm(forms.Form):
|
|||||||
|
|
||||||
super(DocumentPreviewForm, self).__init__(*args, **kwargs)
|
super(DocumentPreviewForm, self).__init__(*args, **kwargs)
|
||||||
self.fields['preview'].initial = self.document
|
self.fields['preview'].initial = self.document
|
||||||
self.fields['preview'].widget.attrs['hide_detail_link']=self.hide_detail_link
|
self.fields['preview'].widget.attrs['hide_detail_link'] = self.hide_detail_link
|
||||||
|
|
||||||
preview = forms.CharField(widget=ImageWidget())
|
preview = forms.CharField(widget=ImageWidget())
|
||||||
|
|
||||||
@@ -141,7 +140,7 @@ class StagingDocumentForm(forms.Form):
|
|||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
super(StagingDocumentForm, self).__init__(*args, **kwargs)
|
super(StagingDocumentForm, self).__init__(*args, **kwargs)
|
||||||
try:
|
try:
|
||||||
self.fields['staging_file_id'].choices=[(staging_file.id, staging_file) for staging_file in StagingFile.get_all()]
|
self.fields['staging_file_id'].choices = [(staging_file.id, staging_file) for staging_file in StagingFile.get_all()]
|
||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@@ -170,17 +169,17 @@ class MetadataForm(forms.Form):
|
|||||||
self.metadata_type = kwargs['initial'].pop('metadata_type', None)
|
self.metadata_type = kwargs['initial'].pop('metadata_type', None)
|
||||||
self.document_type = kwargs['initial'].pop('document_type', None)
|
self.document_type = kwargs['initial'].pop('document_type', None)
|
||||||
|
|
||||||
required=self.document_type.documenttypemetadatatype_set.get(metadata_type=self.metadata_type).required
|
required = self.document_type.documenttypemetadatatype_set.get(metadata_type=self.metadata_type).required
|
||||||
required_string = u''
|
required_string = u''
|
||||||
if required:
|
if required:
|
||||||
self.fields['value'].required=True
|
self.fields['value'].required = True
|
||||||
required_string = ' (%s)' % ugettext(u'required')
|
required_string = ' (%s)' % ugettext(u'required')
|
||||||
else:
|
else:
|
||||||
#TODO: FIXME: not working correctly
|
#TODO: FIXME: not working correctly
|
||||||
self.fields['value'].required=False
|
self.fields['value'].required = False
|
||||||
|
|
||||||
self.fields['name'].initial='%s%s' % ((self.metadata_type.title if self.metadata_type.title else self.metadata_type.name), required_string)
|
self.fields['name'].initial = '%s%s' % ((self.metadata_type.title if self.metadata_type.title else self.metadata_type.name), required_string)
|
||||||
self.fields['id'].initial=self.metadata_type.id
|
self.fields['id'].initial = self.metadata_type.id
|
||||||
if self.metadata_type.default:
|
if self.metadata_type.default:
|
||||||
try:
|
try:
|
||||||
self.fields['value'].initial = eval(self.metadata_type.default, AVAILABLE_FUNCTIONS)
|
self.fields['value'].initial = eval(self.metadata_type.default, AVAILABLE_FUNCTIONS)
|
||||||
@@ -198,7 +197,7 @@ class MetadataForm(forms.Form):
|
|||||||
self.fields['value'].required = required
|
self.fields['value'].required = required
|
||||||
except Exception, err:
|
except Exception, err:
|
||||||
self.fields['value'].initial = err
|
self.fields['value'].initial = err
|
||||||
self.fields['value'].widget=forms.TextInput(attrs={'readonly':'readonly'})
|
self.fields['value'].widget = forms.TextInput(attrs={'readonly':'readonly'})
|
||||||
|
|
||||||
id = forms.CharField(label=_(u'id'), widget=forms.HiddenInput)
|
id = forms.CharField(label=_(u'id'), widget=forms.HiddenInput)
|
||||||
name = forms.CharField(label=_(u'Name'),
|
name = forms.CharField(label=_(u'Name'),
|
||||||
@@ -235,7 +234,7 @@ class DocumentCreateWizard(BoundFormWizard):
|
|||||||
return super(DocumentCreateWizard, self).render_template(request, form, previous_fields, step, context)
|
return super(DocumentCreateWizard, self).render_template(request, form, previous_fields, step, context)
|
||||||
|
|
||||||
def parse_params(self, request, *args, **kwargs):
|
def parse_params(self, request, *args, **kwargs):
|
||||||
self.extra_context={'step_titles':self.step_titles}
|
self.extra_context = {'step_titles':self.step_titles}
|
||||||
|
|
||||||
def process_step(self, request, form, step):
|
def process_step(self, request, form, step):
|
||||||
#if step == 0:
|
#if step == 0:
|
||||||
|
|||||||
@@ -52,7 +52,7 @@ def save_metadata(metadata_dict, document):
|
|||||||
|
|
||||||
#unquote_plus handles utf-8?!?
|
#unquote_plus handles utf-8?!?
|
||||||
#http://stackoverflow.com/questions/4382875/handling-iri-in-django
|
#http://stackoverflow.com/questions/4382875/handling-iri-in-django
|
||||||
document_metadata.value=unquote_plus(metadata_dict['value'])#.decode('utf-8')
|
document_metadata.value = unquote_plus(metadata_dict['value'])#.decode('utf-8')
|
||||||
document_metadata.save()
|
document_metadata.save()
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -128,7 +128,7 @@ class Document(models.Model):
|
|||||||
total_pages = get_page_count(filepath)
|
total_pages = get_page_count(filepath)
|
||||||
|
|
||||||
for page_number in range(total_pages):
|
for page_number in range(total_pages):
|
||||||
document_page, created = DocumentPage.objects.get_or_create(
|
DocumentPage.objects.get_or_create(
|
||||||
document=self, page_number=page_number+1)
|
document=self, page_number=page_number+1)
|
||||||
|
|
||||||
os.close(handle)
|
os.close(handle)
|
||||||
@@ -197,7 +197,7 @@ class Document(models.Model):
|
|||||||
|
|
||||||
def apply_default_transformations(self):
|
def apply_default_transformations(self):
|
||||||
#Only apply default transformations on new documents
|
#Only apply default transformations on new documents
|
||||||
if DEFAULT_TRANSFORMATIONS and reduce(lambda x,y : x+y, [page.documentpagetransformation_set.count() for page in self.documentpage_set.all()]) == 0:
|
if DEFAULT_TRANSFORMATIONS and reduce(lambda x, y : x+y, [page.documentpagetransformation_set.count() for page in self.documentpage_set.all()]) == 0:
|
||||||
for transformation in DEFAULT_TRANSFORMATIONS:
|
for transformation in DEFAULT_TRANSFORMATIONS:
|
||||||
if 'name' in transformation:
|
if 'name' in transformation:
|
||||||
for document_page in self.documentpage_set.all():
|
for document_page in self.documentpage_set.all():
|
||||||
|
|||||||
@@ -2,10 +2,8 @@ import errno
|
|||||||
import os
|
import os
|
||||||
import hashlib
|
import hashlib
|
||||||
|
|
||||||
from django.conf import settings
|
|
||||||
from django.core.exceptions import ObjectDoesNotExist
|
from django.core.exceptions import ObjectDoesNotExist
|
||||||
from django.core.files.uploadedfile import InMemoryUploadedFile, \
|
from django.core.files.uploadedfile import SimpleUploadedFile
|
||||||
SimpleUploadedFile
|
|
||||||
from django.utils.translation import ugettext
|
from django.utils.translation import ugettext
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
from django.utils.translation import ugettext as _
|
from django.utils.translation import ugettext as _
|
||||||
from django.core.urlresolvers import reverse
|
|
||||||
|
|
||||||
from common.utils import pretty_size, pretty_size_10
|
from common.utils import pretty_size, pretty_size_10
|
||||||
from permissions.api import check_permissions
|
from permissions.api import check_permissions
|
||||||
|
|||||||
@@ -1,6 +1,4 @@
|
|||||||
import os
|
import os
|
||||||
import tempfile
|
|
||||||
|
|
||||||
|
|
||||||
from common import TEMPORARY_DIRECTORY
|
from common import TEMPORARY_DIRECTORY
|
||||||
|
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
import zipfile
|
import zipfile
|
||||||
|
|
||||||
from django.utils.translation import ugettext as _
|
from django.utils.translation import ugettext as _
|
||||||
from django.http import HttpResponse, HttpResponseRedirect, Http404
|
from django.http import HttpResponse, HttpResponseRedirect
|
||||||
from django.shortcuts import render_to_response, get_object_or_404, redirect
|
from django.shortcuts import render_to_response, get_object_or_404
|
||||||
from django.template import RequestContext
|
from django.template import RequestContext
|
||||||
from django.contrib import messages
|
from django.contrib import messages
|
||||||
from django.views.generic.list_detail import object_detail, object_list
|
from django.views.generic.list_detail import object_detail, object_list
|
||||||
@@ -11,7 +11,6 @@ from django.views.generic.create_update import create_object, delete_object, upd
|
|||||||
from django.core.files.base import File
|
from django.core.files.base import File
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.utils.http import urlencode
|
from django.utils.http import urlencode
|
||||||
from django.template.defaultfilters import slugify
|
|
||||||
from django.core.exceptions import ObjectDoesNotExist
|
from django.core.exceptions import ObjectDoesNotExist
|
||||||
from django.core.files.uploadedfile import SimpleUploadedFile
|
from django.core.files.uploadedfile import SimpleUploadedFile
|
||||||
|
|
||||||
@@ -30,7 +29,6 @@ from documents.conf.settings import USE_STAGING_DIRECTORY
|
|||||||
from documents.conf.settings import STAGING_FILES_PREVIEW_SIZE
|
from documents.conf.settings import STAGING_FILES_PREVIEW_SIZE
|
||||||
from documents.conf.settings import PREVIEW_SIZE
|
from documents.conf.settings import PREVIEW_SIZE
|
||||||
from documents.conf.settings import THUMBNAIL_SIZE
|
from documents.conf.settings import THUMBNAIL_SIZE
|
||||||
from documents.conf.settings import TRANFORMATION_PREVIEW_SIZE
|
|
||||||
from documents.conf.settings import GROUP_MAX_RESULTS
|
from documents.conf.settings import GROUP_MAX_RESULTS
|
||||||
from documents.conf.settings import GROUP_SHOW_EMPTY
|
from documents.conf.settings import GROUP_SHOW_EMPTY
|
||||||
from documents.conf.settings import GROUP_SHOW_THUMBNAIL
|
from documents.conf.settings import GROUP_SHOW_THUMBNAIL
|
||||||
@@ -51,7 +49,7 @@ from forms import DocumentTypeSelectForm, DocumentCreateWizard, \
|
|||||||
MetadataFormSet, DocumentPageForm, DocumentPageTransformationForm, \
|
MetadataFormSet, DocumentPageForm, DocumentPageTransformationForm, \
|
||||||
DocumentContentForm
|
DocumentContentForm
|
||||||
|
|
||||||
from metadata import save_metadata, save_metadata_list, \
|
from metadata import save_metadata_list, \
|
||||||
decode_metadata_from_url, metadata_repr_as_list
|
decode_metadata_from_url, metadata_repr_as_list
|
||||||
from models import Document, DocumentMetadata, DocumentType, MetadataType, \
|
from models import Document, DocumentMetadata, DocumentType, MetadataType, \
|
||||||
DocumentPage, DocumentPageTransformation
|
DocumentPage, DocumentPageTransformation
|
||||||
@@ -315,7 +313,7 @@ def document_view(request, document_id):
|
|||||||
else:
|
else:
|
||||||
total_string = ''
|
total_string = ''
|
||||||
|
|
||||||
extra_columns = [{'name':'current','attribute':lambda x:
|
extra_columns = [{'name':'current', 'attribute':lambda x:
|
||||||
'<span class="famfam active famfam-resultset_previous"></span>' if x == document else ''}]
|
'<span class="famfam active famfam-resultset_previous"></span>' if x == document else ''}]
|
||||||
|
|
||||||
if GROUP_SHOW_THUMBNAIL:
|
if GROUP_SHOW_THUMBNAIL:
|
||||||
@@ -708,17 +706,13 @@ def document_page_transformation_edit(request, document_page_transformation_id):
|
|||||||
object_id=document_page_transformation_id,
|
object_id=document_page_transformation_id,
|
||||||
post_save_redirect=reverse('document_page_view', args=[document_page_transformation.document_page_id]),
|
post_save_redirect=reverse('document_page_view', args=[document_page_transformation.document_page_id]),
|
||||||
extra_context={
|
extra_context={
|
||||||
'object_name':_(u'transformation')}
|
'object_name':_(u'transformation'),
|
||||||
)
|
|
||||||
|
|
||||||
return render_to_response('generic_form.html', {
|
|
||||||
'form':form,
|
|
||||||
'object':document_page_transformation.document_page,
|
|
||||||
'title':_(u'Edit transformation "%(transformation)s" for page: %(page)s of document: %(document)s') % {
|
'title':_(u'Edit transformation "%(transformation)s" for page: %(page)s of document: %(document)s') % {
|
||||||
'transformation':document_page_transformation.get_transformation_display(),
|
'transformation':document_page_transformation.get_transformation_display(),
|
||||||
'page':document_page_transformation.document_page.page_number,
|
'page':document_page_transformation.document_page.page_number,
|
||||||
'document':document_page_transformation.document_page.document},
|
'document':document_page_transformation.document_page.document},
|
||||||
}, context_instance=RequestContext(request))
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def document_page_transformation_delete(request, document_page_transformation_id):
|
def document_page_transformation_delete(request, document_page_transformation_id):
|
||||||
@@ -879,7 +873,7 @@ def document_view_simple(request, document_id):
|
|||||||
else:
|
else:
|
||||||
total_string = ''
|
total_string = ''
|
||||||
|
|
||||||
extra_columns = [{'name':'current','attribute':lambda x:
|
extra_columns = [{'name':'current', 'attribute':lambda x:
|
||||||
'<span class="famfam active famfam-resultset_previous"></span>' if x == document else ''}]
|
'<span class="famfam active famfam-resultset_previous"></span>' if x == document else ''}]
|
||||||
|
|
||||||
if GROUP_SHOW_THUMBNAIL:
|
if GROUP_SHOW_THUMBNAIL:
|
||||||
|
|||||||
@@ -101,7 +101,7 @@ def next_available_filename(document, metadata_index, path, filename, extension,
|
|||||||
if suffix:
|
if suffix:
|
||||||
target = '_'.join([filename, unicode(suffix)])
|
target = '_'.join([filename, unicode(suffix)])
|
||||||
filepath = os.path.join(path, os.extsep.join([target, extension]))
|
filepath = os.path.join(path, os.extsep.join([target, extension]))
|
||||||
matches=DocumentMetadataIndex.objects.filter(filename=filepath)
|
matches = DocumentMetadataIndex.objects.filter(filename=filepath)
|
||||||
if matches.count() == 0:
|
if matches.count() == 0:
|
||||||
document_metadata_index = DocumentMetadataIndex(
|
document_metadata_index = DocumentMetadataIndex(
|
||||||
document=document, metadata_index=metadata_index,
|
document=document, metadata_index=metadata_index,
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import ugettext_lazy as _
|
||||||
from django.http import HttpResponse, HttpResponseRedirect, Http404
|
from django.http import HttpResponseRedirect
|
||||||
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.contrib import messages
|
from django.contrib import messages
|
||||||
|
|||||||
@@ -1,9 +1,7 @@
|
|||||||
import re
|
import re
|
||||||
|
|
||||||
from django.template import Node, Variable
|
from django.template import Node
|
||||||
from django.template import TemplateSyntaxError, Library, VariableDoesNotExist
|
from django.template import TemplateSyntaxError, Library
|
||||||
from django.template.defaultfilters import stringfilter
|
|
||||||
from django.template.defaultfilters import date as datefilter
|
|
||||||
from main.conf import settings
|
from main.conf import settings
|
||||||
|
|
||||||
register = Library()
|
register = Library()
|
||||||
|
|||||||
@@ -93,7 +93,7 @@ def check_settings(request):
|
|||||||
{'name':'SEARCH_LIMIT', 'value':search_settings.LIMIT},
|
{'name':'SEARCH_LIMIT', 'value':search_settings.LIMIT},
|
||||||
]
|
]
|
||||||
|
|
||||||
context={
|
context = {
|
||||||
'title':_(u'settings'),
|
'title':_(u'settings'),
|
||||||
'object_list':settings,
|
'object_list':settings,
|
||||||
'hide_link':True,
|
'hide_link':True,
|
||||||
|
|||||||
@@ -1,8 +1,5 @@
|
|||||||
import copy
|
import copy
|
||||||
|
|
||||||
from django.db.utils import DatabaseError
|
|
||||||
|
|
||||||
|
|
||||||
object_navigation = {}
|
object_navigation = {}
|
||||||
multi_object_navigation = {}
|
multi_object_navigation = {}
|
||||||
menu_links = []
|
menu_links = []
|
||||||
@@ -57,7 +54,7 @@ def register_menu(links):
|
|||||||
for link in links:
|
for link in links:
|
||||||
menu_links.append(link)
|
menu_links.append(link)
|
||||||
|
|
||||||
menu_links.sort(lambda x,y: 1 if x>y else -1, lambda x:x['position'] if 'position' in x else 1)
|
menu_links.sort(lambda x, y: 1 if x>y else -1, lambda x:x['position'] if 'position' in x else 1)
|
||||||
|
|
||||||
|
|
||||||
def register_model_list_columns(model, columns):
|
def register_model_list_columns(model, columns):
|
||||||
|
|||||||
@@ -1,8 +1,6 @@
|
|||||||
import types
|
|
||||||
import copy
|
import copy
|
||||||
import re
|
import re
|
||||||
|
|
||||||
from django.conf import settings
|
|
||||||
from django.core.urlresolvers import reverse, NoReverseMatch
|
from django.core.urlresolvers import reverse, NoReverseMatch
|
||||||
from django.core.urlresolvers import RegexURLResolver, RegexURLPattern, Resolver404, get_resolver
|
from django.core.urlresolvers import RegexURLResolver, RegexURLPattern, Resolver404, get_resolver
|
||||||
from django.template import TemplateSyntaxError, Library, \
|
from django.template import TemplateSyntaxError, Library, \
|
||||||
@@ -246,7 +244,6 @@ def object_navigation_template(context):
|
|||||||
'horizontal':True,
|
'horizontal':True,
|
||||||
'object_navigation_links':_get_object_navigation_links(context)
|
'object_navigation_links':_get_object_navigation_links(context)
|
||||||
}
|
}
|
||||||
return new_context
|
|
||||||
|
|
||||||
|
|
||||||
@register.tag
|
@register.tag
|
||||||
|
|||||||
@@ -6,12 +6,8 @@ import subprocess
|
|||||||
import tempfile
|
import tempfile
|
||||||
|
|
||||||
from django.utils.translation import ugettext as _
|
from django.utils.translation import ugettext as _
|
||||||
from django.contrib import messages
|
|
||||||
|
|
||||||
from common import TEMPORARY_DIRECTORY
|
from common import TEMPORARY_DIRECTORY
|
||||||
|
|
||||||
from documents.models import Document
|
|
||||||
|
|
||||||
from converter.api import convert_document_for_ocr
|
from converter.api import convert_document_for_ocr
|
||||||
|
|
||||||
from ocr.conf.settings import TESSERACT_PATH
|
from ocr.conf.settings import TESSERACT_PATH
|
||||||
|
|||||||
@@ -5,8 +5,8 @@ from django.core.exceptions import ObjectDoesNotExist
|
|||||||
|
|
||||||
from documents.models import Document
|
from documents.models import Document
|
||||||
|
|
||||||
from 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_CHOICES
|
||||||
from exceptions import AlreadyQueued
|
from exceptions import AlreadyQueued
|
||||||
|
|
||||||
|
|||||||
@@ -1,15 +1,13 @@
|
|||||||
from datetime import date, timedelta, datetime
|
from datetime import timedelta, datetime
|
||||||
import platform
|
import platform
|
||||||
import time
|
import time
|
||||||
import random
|
import random
|
||||||
|
|
||||||
from django.db.models import Q
|
from django.db.models import Q
|
||||||
|
|
||||||
from celery.task import Task, PeriodicTask
|
from celery.task import PeriodicTask
|
||||||
from celery.decorators import task
|
from celery.decorators import task
|
||||||
|
|
||||||
from documents import Document
|
|
||||||
|
|
||||||
from ocr.api import do_document_ocr
|
from ocr.api import do_document_ocr
|
||||||
from literals import QUEUEDOCUMENT_STATE_PENDING, \
|
from literals import QUEUEDOCUMENT_STATE_PENDING, \
|
||||||
QUEUEDOCUMENT_STATE_PROCESSING, DOCUMENTQUEUE_STATE_ACTIVE, \
|
QUEUEDOCUMENT_STATE_PROCESSING, DOCUMENTQUEUE_STATE_ACTIVE, \
|
||||||
|
|||||||
@@ -1,13 +1,11 @@
|
|||||||
import datetime
|
import datetime
|
||||||
|
|
||||||
from django.http import HttpResponse, HttpResponseRedirect, Http404
|
from django.http import HttpResponseRedirect
|
||||||
from django.shortcuts import render_to_response, get_object_or_404, redirect
|
from django.shortcuts import render_to_response, get_object_or_404, redirect
|
||||||
from django.template import RequestContext
|
from django.template import RequestContext
|
||||||
from django.contrib import messages
|
from django.contrib import messages
|
||||||
from django.views.generic.list_detail import object_detail, object_list
|
from django.views.generic.list_detail import object_list
|
||||||
from django.core.urlresolvers import reverse
|
from django.core.urlresolvers import reverse
|
||||||
from django.views.generic.create_update import create_object, delete_object, update_object
|
|
||||||
from django.conf import settings
|
|
||||||
from django.utils.translation import ugettext as _
|
from django.utils.translation import ugettext as _
|
||||||
|
|
||||||
from permissions.api import check_permissions
|
from permissions.api import check_permissions
|
||||||
|
|||||||
@@ -1,8 +1,6 @@
|
|||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
|
|
||||||
from models import Permission, PermissionHolder, Role, RoleMember
|
from models import Permission, PermissionHolder, Role, RoleMember
|
||||||
from django.contrib.contenttypes import generic
|
|
||||||
|
|
||||||
|
|
||||||
class PermissionHolderInline(admin.StackedInline):
|
class PermissionHolderInline(admin.StackedInline):
|
||||||
model = PermissionHolder
|
model = PermissionHolder
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
from django.http import Http404
|
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
from django.contrib.auth.models import Group
|
from django.contrib.auth.models import Group
|
||||||
from django.db.utils import DatabaseError
|
from django.db.utils import DatabaseError
|
||||||
@@ -20,7 +19,7 @@ def register_permissions(namespace, permissions):
|
|||||||
try:
|
try:
|
||||||
permission_obj, created = Permission.objects.get_or_create(
|
permission_obj, created = Permission.objects.get_or_create(
|
||||||
namespace=namespace, name=permission['name'])
|
namespace=namespace, name=permission['name'])
|
||||||
permission_obj.label=unicode(permission['label'])
|
permission_obj.label = unicode(permission['label'])
|
||||||
permission_obj.save()
|
permission_obj.save()
|
||||||
except DatabaseError:
|
except DatabaseError:
|
||||||
#Special case for ./manage.py syncdb
|
#Special case for ./manage.py syncdb
|
||||||
|
|||||||
@@ -11,8 +11,8 @@ class PermissionDeniedMiddleware(object):
|
|||||||
try:
|
try:
|
||||||
# Handle import error but allow any type error from view
|
# Handle import error but allow any type error from view
|
||||||
callback = getattr(import_module(settings.ROOT_URLCONF),'handler403')
|
callback = getattr(import_module(settings.ROOT_URLCONF),'handler403')
|
||||||
return callback(request,exception)
|
return callback(request, exception)
|
||||||
except (ImportError,AttributeError):
|
except (ImportError, AttributeError):
|
||||||
# Try to get a 403 template
|
# Try to get a 403 template
|
||||||
try:
|
try:
|
||||||
# First look for a user-defined template named "403.html"
|
# First look for a user-defined template named "403.html"
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ from django.contrib.contenttypes import generic
|
|||||||
class PermissionManager(models.Manager):
|
class PermissionManager(models.Manager):
|
||||||
def get_for_holder(self, holder):
|
def get_for_holder(self, holder):
|
||||||
ct = ContentType.objects.get_for_model(holder)
|
ct = ContentType.objects.get_for_model(holder)
|
||||||
return [Permission.objects.get(id=id) for id in PermissionHolder.objects.filter(holder_type=ct,holder_id=holder.id).values_list('permission_id', flat=True)]
|
return [Permission.objects.get(id=id) for id in PermissionHolder.objects.filter(holder_type=ct, holder_id=holder.id).values_list('permission_id', flat=True)]
|
||||||
|
|
||||||
class Permission(models.Model):
|
class Permission(models.Model):
|
||||||
namespace = models.CharField(max_length=64, verbose_name=_(u'namespace'))
|
namespace = models.CharField(max_length=64, verbose_name=_(u'namespace'))
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
from django.core.exceptions import PermissionDenied
|
from django.core.exceptions import PermissionDenied
|
||||||
from django.template import TemplateSyntaxError, Library, \
|
from django.template import TemplateSyntaxError, Library, \
|
||||||
VariableDoesNotExist, Node, Variable
|
Node, Variable
|
||||||
|
|
||||||
from permissions.api import check_permissions as check_permission_function
|
from permissions.api import check_permissions as check_permission_function
|
||||||
|
|
||||||
@@ -32,7 +32,7 @@ def check_permissions(parser, token):
|
|||||||
# Splitting by None == splitting by spaces.
|
# Splitting by None == splitting by spaces.
|
||||||
tag_name, args = token.contents.split(None, 1)
|
tag_name, args = token.contents.split(None, 1)
|
||||||
except ValueError:
|
except ValueError:
|
||||||
raise template.TemplateSyntaxError, "%r tag requires arguments" % token.contents.split()[0]
|
raise TemplateSyntaxError, "%r tag requires arguments" % token.contents.split()[0]
|
||||||
|
|
||||||
return CheckPermissionsNode(*args.split())
|
return CheckPermissionsNode(*args.split())
|
||||||
|
|
||||||
|
|||||||
@@ -1,12 +1,11 @@
|
|||||||
from django.utils.translation import ugettext as _
|
from django.utils.translation import ugettext as _
|
||||||
from django.http import HttpResponse, HttpResponseRedirect, Http404
|
from django.http import HttpResponseRedirect
|
||||||
from django.shortcuts import render_to_response, get_object_or_404, redirect
|
from django.shortcuts import render_to_response, get_object_or_404
|
||||||
from django.template import RequestContext
|
from django.template import RequestContext
|
||||||
from django.contrib import messages
|
from django.contrib import messages
|
||||||
from django.views.generic.list_detail import object_detail, object_list
|
from django.views.generic.list_detail import object_list
|
||||||
from django.core.urlresolvers import reverse
|
from django.core.urlresolvers import reverse
|
||||||
from django.views.generic.create_update import create_object, delete_object, update_object
|
from django.views.generic.create_update import create_object, delete_object, update_object
|
||||||
from django.conf import settings
|
|
||||||
from django.contrib.contenttypes.models import ContentType
|
from django.contrib.contenttypes.models import ContentType
|
||||||
from django.core.exceptions import ObjectDoesNotExist
|
from django.core.exceptions import ObjectDoesNotExist
|
||||||
|
|
||||||
@@ -55,7 +54,7 @@ def role_permissions(request, role_id):
|
|||||||
role = get_object_or_404(Role, pk=role_id)
|
role = get_object_or_404(Role, pk=role_id)
|
||||||
form = RoleForm_view(instance=role)
|
form = RoleForm_view(instance=role)
|
||||||
|
|
||||||
role_permissions = Permission.objects.get_for_holder(role)
|
role_permissions_list = Permission.objects.get_for_holder(role)
|
||||||
subtemplates_dict = [
|
subtemplates_dict = [
|
||||||
{
|
{
|
||||||
'name':'generic_list_subtemplate.html',
|
'name':'generic_list_subtemplate.html',
|
||||||
@@ -64,7 +63,7 @@ def role_permissions(request, role_id):
|
|||||||
'extra_columns':[
|
'extra_columns':[
|
||||||
{'name':_(u'namespace'), 'attribute':'namespace'},
|
{'name':_(u'namespace'), 'attribute':'namespace'},
|
||||||
{'name':_(u'name'), 'attribute':'label'},
|
{'name':_(u'name'), 'attribute':'label'},
|
||||||
{'name':_(u'state'), 'attribute':lambda x: _role_permission_link(role, x, role_permissions)}
|
{'name':_(u'state'), 'attribute':lambda x: _role_permission_link(role, x, role_permissions_list)}
|
||||||
],
|
],
|
||||||
'hide_link':True,
|
'hide_link':True,
|
||||||
'hide_object':True,
|
'hide_object':True,
|
||||||
|
|||||||
@@ -9,5 +9,5 @@ class FileBasedStorage(FileSystemStorage):
|
|||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
super(FileBasedStorage, self).__init__(*args, **kwargs)
|
super(FileBasedStorage, self).__init__(*args, **kwargs)
|
||||||
self.location=FILESTORAGE_LOCATION
|
self.location = FILESTORAGE_LOCATION
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user