Fixed error and some warning returned by pylint

This commit is contained in:
Roberto Rosario
2011-04-05 00:04:11 -04:00
parent 283df926d1
commit f66c8ec6e2
37 changed files with 269 additions and 287 deletions

View File

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

View File

@@ -2,42 +2,46 @@ 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:
output += u'<li>%s</li>' % string output += u'<li>%s</li>' % string
else: else:
output += u'<li>%s</li>' % _(u"None") output += u'<li>%s</li>' % _(u"None")
return mark_safe(output + u'</ul>\n') return mark_safe(output + u'</ul>\n')
@@ -57,13 +61,15 @@ 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():
if isinstance(field.widget, forms.widgets.SelectMultiple): if isinstance(field.widget, forms.widgets.SelectMultiple):
@@ -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):
pass def __init__(self, *args, **kwargs):
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)

View File

@@ -4,27 +4,28 @@ from re import compile
EXEMPT_URLS = [compile(settings.LOGIN_URL.lstrip('/'))] EXEMPT_URLS = [compile(settings.LOGIN_URL.lstrip('/'))]
if hasattr(settings, 'LOGIN_EXEMPT_URLS'): if hasattr(settings, 'LOGIN_EXEMPT_URLS'):
EXEMPT_URLS += [compile(expr) for expr in settings.LOGIN_EXEMPT_URLS] EXEMPT_URLS += [compile(expr) for expr in settings.LOGIN_EXEMPT_URLS]
class LoginRequiredMiddleware: class LoginRequiredMiddleware:
""" """
Middleware that requires a user to be authenticated to view any page other Middleware that requires a user to be authenticated to view any page other
than LOGIN_URL. Exemptions to this requirement can optionally be specified than LOGIN_URL. Exemptions to this requirement can optionally be specified
in settings via a list of regular expressions in LOGIN_EXEMPT_URLS (which in settings via a list of regular expressions in LOGIN_EXEMPT_URLS (which
you can copy from your urls.py). you can copy from your urls.py).
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):
assert hasattr(request, 'user'), "The Login Required middleware\ def process_request(self, request):
assert hasattr(request, 'user'), "The Login Required middleware\
requires authentication middleware to be installed. Edit your\ requires authentication middleware to be installed. Edit your\
MIDDLEWARE_CLASSES setting to insert\ MIDDLEWARE_CLASSES setting to insert\
'django.contrib.auth.middlware.AuthenticationMiddleware'. If that doesn't\ 'django.contrib.auth.middlware.AuthenticationMiddleware'. If that doesn't\
work, ensure your TEMPLATE_CONTEXT_PROCESSORS setting includes\ work, ensure your TEMPLATE_CONTEXT_PROCESSORS setting includes\
'django.core.context_processors.auth'." 'django.core.context_processors.auth'."
if not request.user.is_authenticated(): if not request.user.is_authenticated():
path = request.path_info.lstrip('/') path = request.path_info.lstrip('/')
if not any(m.match(path) for m in EXEMPT_URLS): if not any(m.match(path) for m in EXEMPT_URLS):
return HttpResponseRedirect(settings.LOGIN_URL) return HttpResponseRedirect(settings.LOGIN_URL)

View File

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

View File

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

View File

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

View File

@@ -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,128 +99,6 @@ 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)",
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"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"DeBardeleben", u"DeBaugh", u"deBeauford", u"DeBerry", u"deBethune",
u"DeBetuile", u"DeBoard", u"DeBoer", u"DeBohun", u"DeBord", u"DeBose",
u"DeBrouwer", u"DeBroux", u"DeBruhl", u"deBruijn", u"deBrus", u"deBruse",
u"deBrusse", u"DeBruyne", u"DeBusk", u"DeCamp", u"deCastilla", u"DeCello",
u"deClare", u"DeClark", u"DeClerck", u"DeCoste", u"deCote", u"DeCoudres",
u"DeCoursey", u"DeCredico", u"deCuire", u"DeCuyre", u"DeDominicios",
u"DeDuyster", u"DeDuytscher", u"DeDuytser", u"deFiennes", u"DeFord",
u"DeForest", u"DeFrance", u"DeFriece", u"DeGarmo", u"deGraaff", u"DeGraff",
u"DeGraffenreid", u"DeGraw", u"DeGrenier", u"DeGroats", u"DeGroft",
u"DeGrote", u"DeHaan", u"DeHaas", u"DeHaddeclive", u"deHannethe",
u"DeHatclyf", u"DeHaven", u"DeHeer", u"DeJager", u"DeJarnette", u"DeJean",
u"DeJong", u"deJonge", u"deKemmeter", u"deKirketon", u"DeKroon",
u"deKype", u"del-Rosario", u"dela Chamotte", u"DeLa Cuadra",
u"DeLa Force", u"dela Fountaine", u"dela Greña", u"dela Place",
u"DeLa Ward", u"DeLaci", u"DeLacy", u"DeLaet", u"DeLalonde", u"DelAmarre",
u"DeLancey", u"DeLascy", u"DelAshmutt", u"DeLassy", u"DeLattre",
u"DeLaughter", u"DeLay", u"deLessine", u"DelGado", u"DelGaudio",
u"DeLiberti", u"DeLoache", u"DeLoatch", u"DeLoch", u"DeLockwood",
u"DeLong", u"DeLozier", u"DeLuca", u"DeLucenay", u"deLucy", u"DeMars",
u"DeMartino", u"deMaule", u"DeMello", u"DeMinck", u"DeMink", u"DeMoree",
u"DeMoss", u"DeMott", u"DeMuynck", u"deNiet", u"DeNise", u"DeNure",
u"DePalma", u"DePasquale", u"dePender", u"dePercy", u"DePoe", u"DePriest",
u"DePu", u"DePui", u"DePuis", u"DeReeper", u"deRochette", u"deRose",
u"DeRossett", u"DeRover", u"deRuggele", u"deRuggle", u"DeRuyter",
u"deSaint-Sauveur", u"DeSantis", u"desCuirs", u"DeSentis", u"DeShane",
u"DeSilva", u"DesJardins", u"DesMarest", u"deSoleure", u"DeSoto",
u"DeSpain", u"DeStefano", u"deSwaert", u"deSwart", u"DeVall", u"DeVane",
u"DeVasher", u"DeVasier", u"DeVaughan", u"DeVaughn", u"DeVault", u"DeVeau",
u"DeVeault", u"deVilleneuve", u"DeVilliers", u"DeVinney", u"DeVito",
u"deVogel", u"DeVolder", u"DeVolld", u"DeVore", u"deVos", u"DeVries",
u"deVries", u"DeWall", u"DeWaller", u"DeWalt", u"deWashington",
u"deWerly", u"deWessyngton", u"DeWet", u"deWinter", u"DeWitt", u"DeWolf",
u"DeWolfe", u"DeWolff", u"DeWoody", u"DeYager", u"DeYarmett", u"DeYoung",
u"DiCicco", u"DiCredico", u"DiFillippi", u"DiGiacomo", u"DiMarco",
u"DiMeo", u"DiMonte", u"DiNonno", u"DiPietro", u"diPilato", u"DiPrima",
u"DiSalvo", u"du Bosc", u"du Hurst", u"DuFort", u"DuMars", u"DuPre",
u"DuPue", u"DuPuy", u"FitzUryan", u"kummel", u"LaBarge", u"LaBarr",
u"LaBauve", u"LaBean", u"LaBelle", u"LaBerteaux", u"LaBine", u"LaBonte",
u"LaBorde", u"LaBounty", u"LaBranche", u"LaBrash", u"LaCaille", u"LaCasse",
u"LaChapelle", u"LaClair", u"LaComb", u"LaCoste", u"LaCount", u"LaCour",
u"LaCroix", u"LaFarlett", u"LaFarlette", u"LaFerry", u"LaFlamme",
u"LaFollette", u"LaForge", u"LaFortune", u"LaFoy", u"LaFramboise",
u"LaFrance", u"LaFuze", u"LaGioia", u"LaGrone", u"LaLiberte", u"LaLonde",
u"LaLone", u"LaMaster", u"LaMay", u"LaMere", u"LaMont", u"LaMotte",
u"LaPeer", u"LaPierre", u"LaPlante", u"LaPoint", u"LaPointe", u"LaPorte",
u"LaPrade", u"LaRocca", u"LaRochelle", u"LaRose", u"LaRue", u"LaVallee",
u"LaVaque", u"LaVeau", u"LeBleu", u"LeBoeuf", u"LeBoiteaux", u"LeBoyteulx",
u"LeCheminant", u"LeClair", u"LeClerc", u"LeCompte", u"LeCroy", u"LeDuc",
u"LeFevbre", u"LeFever", u"LeFevre", u"LeFlore", u"LeGette", u"LeGrand",
u"LeGrave", u"LeGro", u"LeGros", u"LeJeune", u"LeMaistre", u"LeMaitre",
u"LeMaster", u"LeMesurier", u"LeMieux", u"LeMoe", u"LeMoigne", u"LeMoine",
u"LeNeve", u"LePage", u"LeQuire", u"LeQuyer", u"LeRou", u"LeRoy", u"LeSuer",
u"LeSueur", u"LeTardif", u"LeVally", u"LeVert", u"LoMonaco", u"Macabe",
u"Macaluso", u"MacaTasney", u"Macaulay", u"Macchitelli", u"Maccoone",
u"Maccurry", u"Macdermattroe", u"Macdiarmada", u"Macelvaine", u"Macey",
u"Macgraugh", u"Machan", u"Machann", u"Machum", u"Maciejewski", u"Maciel",
u"Mackaben", u"Mackall", u"Mackartee", u"Mackay", u"Macken", u"Mackert",
u"Mackey", u"Mackie", u"Mackin", u"Mackins", u"Macklin", u"Macko",
u"Macksey", u"Mackwilliams", u"Maclean", u"Maclinden", u"Macomb",
u"Macomber", u"Macon", u"Macoombs", u"Macraw", u"Macumber", u"Macurdy",
u"Macwilliams", u"MaGuinness", u"MakCubyn", u"MakCumby", u"Mcelvany",
u"Mcsherry", u"Op den Dyck", u"Op den Graeff", u"regory", u"Schweißguth",
u"StElmo", u"StGelais", u"StJacques", u"te Boveldt", u"VanAernam",
u"VanAken", u"VanAlstine", u"VanAmersfoort", u"VanAntwerp", u"VanArlem",
u"VanArnam", u"VanArnem", u"VanArnhem", u"VanArnon", u"VanArsdale",
u"VanArsdalen", u"VanArsdol", u"vanAssema", u"vanAsten", u"VanAuken",
u"VanAwman", u"VanBaucom", u"VanBebber", u"VanBeber", u"VanBenschoten",
u"VanBibber", u"VanBilliard", u"vanBlare", u"vanBlaricom", u"VanBuren",
u"VanBuskirk", u"VanCamp", u"VanCampen", u"VanCleave", u"VanCleef",
u"VanCleve", u"VanCouwenhoven", u"VanCovenhoven", u"VanCowenhoven",
u"VanCuren", u"VanDalsem", u"VanDam", u"VanDe Poel", u"vanden Dijkgraaf",
u"vanden Kommer", u"VanDer Aar", u"vander Gouwe", u"VanDer Honing",
u"VanDer Hooning", u"vander Horst", u"vander Kroft", u"vander Krogt",
u"VanDer Meer", u"vander Meulen", u"vander Putte", u"vander Schooren",
u"VanDer Veen", u"VanDer Ven", u"VanDer Wal", u"VanDer Weide",
u"VanDer Willigen", u"vander Wulp", u"vander Zanden", u"vander Zwan",
u"VanDer Zweep", u"VanDeren", u"VanDerlaan", u"VanDerveer",
u"VanderWoude", u"VanDeursen", u"VanDeusen", u"vanDijk", u"VanDoren",
u"VanDorn", u"VanDort", u"VanDruff", u"VanDryer", u"VanDusen", u"VanDuzee",
u"VanDuzen", u"VanDuzer", u"VanDyck", u"VanDyke", u"VanEman", u"VanEmmen",
u"vanEmmerik", u"VanEngen", u"vanErp", u"vanEssen", u"VanFleet",
u"VanGalder", u"VanGelder", u"vanGerrevink", u"VanGog", u"vanGogh",
u"VanGorder", u"VanGordon", u"VanGroningen", u"VanGuilder", u"VanGundy",
u"VanHaaften", u"VanHaute", u"VanHees", u"vanHeugten", u"VanHise",
u"VanHoeck", u"VanHoek", u"VanHook", u"vanHoorn", u"VanHoornbeeck",
u"VanHoose", u"VanHooser", u"VanHorn", u"VanHorne", u"VanHouten",
u"VanHoye", u"VanHuijstee", u"VanHuss", u"VanImmon", u"VanKersschaever",
u"VanKeuren", u"VanKleeck", u"VanKoughnet", u"VanKouwenhoven",
u"VanKuykendaal", u"vanLeeuwen", u"vanLent", u"vanLet", u"VanLeuven",
u"vanLingen", u"VanLoozen", u"VanLopik", u"VanLuven", u"vanMaasdijk",
u"VanMele", u"VanMeter", u"vanMoorsel", u"VanMoorst", u"VanMossevelde",
u"VanNaarden", u"VanNamen", u"VanNemon", u"VanNess", u"VanNest",
u"VanNimmen", u"vanNobelen", u"VanNorman", u"VanNormon", u"VanNostrunt",
u"VanNote", u"VanOker", u"vanOosten", u"VanOrden", u"VanOrder",
u"VanOrma", u"VanOrman", u"VanOrnum", u"VanOstrander", u"VanOvermeire",
u"VanPelt", u"VanPool", u"VanPoole", u"VanPoorvliet", u"VanPutten",
u"vanRee", u"VanRhijn", u"vanRijswijk", u"VanRotmer", u"VanSchaick",
u"vanSchelt", u"VanSchoik", u"VanSchoonhoven", u"VanSciver", u"VanScoy",
u"VanScoyoc", u"vanSeters", u"VanSickle", u"VanSky", u"VanSnellenberg",
u"vanStaveren", u"VanStraten", u"VanSuijdam", u"VanTassel", u"VanTassell",
u"VanTessel", u"VanTexel", u"VanTuyl", u"VanValckenburgh", u"vanValen",
u"VanValkenburg", u"VanVelsor", u"VanVelzor", u"VanVlack", u"VanVleck",
u"VanVleckeren", u"VanWaard", u"VanWart", u"VanWassenhove", u"VanWinkle",
u"VanWoggelum", u"vanWordragen", u"VanWormer", u"VanZuidam",
u"VanZuijdam", u"VonAdenbach", u"vonAllmen", u"vonBardeleben",
u"vonBerckefeldt", u"VonBergen", u"vonBreyman", u"VonCannon",
u"vonFreymann", u"vonHeimburg", u"VonHuben", u"vonKramer",
u"vonKruchenburg", u"vonPostel", u"VonRohr", u"VonRohrbach",
u"VonSass", u"VonSasse", u"vonSchlotte", u"VonSchneider", u"VonSeldern",
u"VonSpringer", u"VonVeyelmann", u"VonZweidorff"]
#class Name(str): #class Name(str):
# """A Class (based on the string type) that properly capitalizes a name.""" # """A Class (based on the string type) that properly capitalizes a name."""
# #
@@ -232,6 +111,132 @@ surnames = [
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)."""
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"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"DeBardeleben", u"DeBaugh", u"deBeauford", u"DeBerry", u"deBethune",
u"DeBetuile", u"DeBoard", u"DeBoer", u"DeBohun", u"DeBord", u"DeBose",
u"DeBrouwer", u"DeBroux", u"DeBruhl", u"deBruijn", u"deBrus", u"deBruse",
u"deBrusse", u"DeBruyne", u"DeBusk", u"DeCamp", u"deCastilla", u"DeCello",
u"deClare", u"DeClark", u"DeClerck", u"DeCoste", u"deCote", u"DeCoudres",
u"DeCoursey", u"DeCredico", u"deCuire", u"DeCuyre", u"DeDominicios",
u"DeDuyster", u"DeDuytscher", u"DeDuytser", u"deFiennes", u"DeFord",
u"DeForest", u"DeFrance", u"DeFriece", u"DeGarmo", u"deGraaff", u"DeGraff",
u"DeGraffenreid", u"DeGraw", u"DeGrenier", u"DeGroats", u"DeGroft",
u"DeGrote", u"DeHaan", u"DeHaas", u"DeHaddeclive", u"deHannethe",
u"DeHatclyf", u"DeHaven", u"DeHeer", u"DeJager", u"DeJarnette", u"DeJean",
u"DeJong", u"deJonge", u"deKemmeter", u"deKirketon", u"DeKroon",
u"deKype", u"del-Rosario", u"dela Chamotte", u"DeLa Cuadra",
u"DeLa Force", u"dela Fountaine", u"dela Greña", u"dela Place",
u"DeLa Ward", u"DeLaci", u"DeLacy", u"DeLaet", u"DeLalonde", u"DelAmarre",
u"DeLancey", u"DeLascy", u"DelAshmutt", u"DeLassy", u"DeLattre",
u"DeLaughter", u"DeLay", u"deLessine", u"DelGado", u"DelGaudio",
u"DeLiberti", u"DeLoache", u"DeLoatch", u"DeLoch", u"DeLockwood",
u"DeLong", u"DeLozier", u"DeLuca", u"DeLucenay", u"deLucy", u"DeMars",
u"DeMartino", u"deMaule", u"DeMello", u"DeMinck", u"DeMink", u"DeMoree",
u"DeMoss", u"DeMott", u"DeMuynck", u"deNiet", u"DeNise", u"DeNure",
u"DePalma", u"DePasquale", u"dePender", u"dePercy", u"DePoe", u"DePriest",
u"DePu", u"DePui", u"DePuis", u"DeReeper", u"deRochette", u"deRose",
u"DeRossett", u"DeRover", u"deRuggele", u"deRuggle", u"DeRuyter",
u"deSaint-Sauveur", u"DeSantis", u"desCuirs", u"DeSentis", u"DeShane",
u"DeSilva", u"DesJardins", u"DesMarest", u"deSoleure", u"DeSoto",
u"DeSpain", u"DeStefano", u"deSwaert", u"deSwart", u"DeVall", u"DeVane",
u"DeVasher", u"DeVasier", u"DeVaughan", u"DeVaughn", u"DeVault", u"DeVeau",
u"DeVeault", u"deVilleneuve", u"DeVilliers", u"DeVinney", u"DeVito",
u"deVogel", u"DeVolder", u"DeVolld", u"DeVore", u"deVos", u"DeVries",
u"deVries", u"DeWall", u"DeWaller", u"DeWalt", u"deWashington",
u"deWerly", u"deWessyngton", u"DeWet", u"deWinter", u"DeWitt", u"DeWolf",
u"DeWolfe", u"DeWolff", u"DeWoody", u"DeYager", u"DeYarmett", u"DeYoung",
u"DiCicco", u"DiCredico", u"DiFillippi", u"DiGiacomo", u"DiMarco",
u"DiMeo", u"DiMonte", u"DiNonno", u"DiPietro", u"diPilato", u"DiPrima",
u"DiSalvo", u"du Bosc", u"du Hurst", u"DuFort", u"DuMars", u"DuPre",
u"DuPue", u"DuPuy", u"FitzUryan", u"kummel", u"LaBarge", u"LaBarr",
u"LaBauve", u"LaBean", u"LaBelle", u"LaBerteaux", u"LaBine", u"LaBonte",
u"LaBorde", u"LaBounty", u"LaBranche", u"LaBrash", u"LaCaille", u"LaCasse",
u"LaChapelle", u"LaClair", u"LaComb", u"LaCoste", u"LaCount", u"LaCour",
u"LaCroix", u"LaFarlett", u"LaFarlette", u"LaFerry", u"LaFlamme",
u"LaFollette", u"LaForge", u"LaFortune", u"LaFoy", u"LaFramboise",
u"LaFrance", u"LaFuze", u"LaGioia", u"LaGrone", u"LaLiberte", u"LaLonde",
u"LaLone", u"LaMaster", u"LaMay", u"LaMere", u"LaMont", u"LaMotte",
u"LaPeer", u"LaPierre", u"LaPlante", u"LaPoint", u"LaPointe", u"LaPorte",
u"LaPrade", u"LaRocca", u"LaRochelle", u"LaRose", u"LaRue", u"LaVallee",
u"LaVaque", u"LaVeau", u"LeBleu", u"LeBoeuf", u"LeBoiteaux", u"LeBoyteulx",
u"LeCheminant", u"LeClair", u"LeClerc", u"LeCompte", u"LeCroy", u"LeDuc",
u"LeFevbre", u"LeFever", u"LeFevre", u"LeFlore", u"LeGette", u"LeGrand",
u"LeGrave", u"LeGro", u"LeGros", u"LeJeune", u"LeMaistre", u"LeMaitre",
u"LeMaster", u"LeMesurier", u"LeMieux", u"LeMoe", u"LeMoigne", u"LeMoine",
u"LeNeve", u"LePage", u"LeQuire", u"LeQuyer", u"LeRou", u"LeRoy", u"LeSuer",
u"LeSueur", u"LeTardif", u"LeVally", u"LeVert", u"LoMonaco", u"Macabe",
u"Macaluso", u"MacaTasney", u"Macaulay", u"Macchitelli", u"Maccoone",
u"Maccurry", u"Macdermattroe", u"Macdiarmada", u"Macelvaine", u"Macey",
u"Macgraugh", u"Machan", u"Machann", u"Machum", u"Maciejewski", u"Maciel",
u"Mackaben", u"Mackall", u"Mackartee", u"Mackay", u"Macken", u"Mackert",
u"Mackey", u"Mackie", u"Mackin", u"Mackins", u"Macklin", u"Macko",
u"Macksey", u"Mackwilliams", u"Maclean", u"Maclinden", u"Macomb",
u"Macomber", u"Macon", u"Macoombs", u"Macraw", u"Macumber", u"Macurdy",
u"Macwilliams", u"MaGuinness", u"MakCubyn", u"MakCumby", u"Mcelvany",
u"Mcsherry", u"Op den Dyck", u"Op den Graeff", u"regory", u"Schweißguth",
u"StElmo", u"StGelais", u"StJacques", u"te Boveldt", u"VanAernam",
u"VanAken", u"VanAlstine", u"VanAmersfoort", u"VanAntwerp", u"VanArlem",
u"VanArnam", u"VanArnem", u"VanArnhem", u"VanArnon", u"VanArsdale",
u"VanArsdalen", u"VanArsdol", u"vanAssema", u"vanAsten", u"VanAuken",
u"VanAwman", u"VanBaucom", u"VanBebber", u"VanBeber", u"VanBenschoten",
u"VanBibber", u"VanBilliard", u"vanBlare", u"vanBlaricom", u"VanBuren",
u"VanBuskirk", u"VanCamp", u"VanCampen", u"VanCleave", u"VanCleef",
u"VanCleve", u"VanCouwenhoven", u"VanCovenhoven", u"VanCowenhoven",
u"VanCuren", u"VanDalsem", u"VanDam", u"VanDe Poel", u"vanden Dijkgraaf",
u"vanden Kommer", u"VanDer Aar", u"vander Gouwe", u"VanDer Honing",
u"VanDer Hooning", u"vander Horst", u"vander Kroft", u"vander Krogt",
u"VanDer Meer", u"vander Meulen", u"vander Putte", u"vander Schooren",
u"VanDer Veen", u"VanDer Ven", u"VanDer Wal", u"VanDer Weide",
u"VanDer Willigen", u"vander Wulp", u"vander Zanden", u"vander Zwan",
u"VanDer Zweep", u"VanDeren", u"VanDerlaan", u"VanDerveer",
u"VanderWoude", u"VanDeursen", u"VanDeusen", u"vanDijk", u"VanDoren",
u"VanDorn", u"VanDort", u"VanDruff", u"VanDryer", u"VanDusen", u"VanDuzee",
u"VanDuzen", u"VanDuzer", u"VanDyck", u"VanDyke", u"VanEman", u"VanEmmen",
u"vanEmmerik", u"VanEngen", u"vanErp", u"vanEssen", u"VanFleet",
u"VanGalder", u"VanGelder", u"vanGerrevink", u"VanGog", u"vanGogh",
u"VanGorder", u"VanGordon", u"VanGroningen", u"VanGuilder", u"VanGundy",
u"VanHaaften", u"VanHaute", u"VanHees", u"vanHeugten", u"VanHise",
u"VanHoeck", u"VanHoek", u"VanHook", u"vanHoorn", u"VanHoornbeeck",
u"VanHoose", u"VanHooser", u"VanHorn", u"VanHorne", u"VanHouten",
u"VanHoye", u"VanHuijstee", u"VanHuss", u"VanImmon", u"VanKersschaever",
u"VanKeuren", u"VanKleeck", u"VanKoughnet", u"VanKouwenhoven",
u"VanKuykendaal", u"vanLeeuwen", u"vanLent", u"vanLet", u"VanLeuven",
u"vanLingen", u"VanLoozen", u"VanLopik", u"VanLuven", u"vanMaasdijk",
u"VanMele", u"VanMeter", u"vanMoorsel", u"VanMoorst", u"VanMossevelde",
u"VanNaarden", u"VanNamen", u"VanNemon", u"VanNess", u"VanNest",
u"VanNimmen", u"vanNobelen", u"VanNorman", u"VanNormon", u"VanNostrunt",
u"VanNote", u"VanOker", u"vanOosten", u"VanOrden", u"VanOrder",
u"VanOrma", u"VanOrman", u"VanOrnum", u"VanOstrander", u"VanOvermeire",
u"VanPelt", u"VanPool", u"VanPoole", u"VanPoorvliet", u"VanPutten",
u"vanRee", u"VanRhijn", u"vanRijswijk", u"VanRotmer", u"VanSchaick",
u"vanSchelt", u"VanSchoik", u"VanSchoonhoven", u"VanSciver", u"VanScoy",
u"VanScoyoc", u"vanSeters", u"VanSickle", u"VanSky", u"VanSnellenberg",
u"vanStaveren", u"VanStraten", u"VanSuijdam", u"VanTassel", u"VanTassell",
u"VanTessel", u"VanTexel", u"VanTuyl", u"VanValckenburgh", u"vanValen",
u"VanValkenburg", u"VanVelsor", u"VanVelzor", u"VanVlack", u"VanVleck",
u"VanVleckeren", u"VanWaard", u"VanWart", u"VanWassenhove", u"VanWinkle",
u"VanWoggelum", u"vanWordragen", u"VanWormer", u"VanZuidam",
u"VanZuijdam", u"VonAdenbach", u"vonAllmen", u"vonBardeleben",
u"vonBerckefeldt", u"VonBergen", u"vonBreyman", u"VonCannon",
u"vonFreymann", u"vonHeimburg", u"VonHuben", u"vonKramer",
u"vonKruchenburg", u"vonPostel", u"VonRohr", u"VonRohrbach",
u"VonSass", u"VonSasse", u"vonSchlotte", u"VonSchneider", u"VonSeldern",
u"VonSpringer", u"VonVeyelmann", u"VonZweidorff"
]
hyphen_indexes = [] hyphen_indexes = []
while name.find('-') > -1: while name.find('-') > -1:
index = name.find('-') index = name.find('-')

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -1,6 +1,4 @@
import os import os
import tempfile
from common import TEMPORARY_DIRECTORY from common import TEMPORARY_DIRECTORY

View File

@@ -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,18 +706,14 @@ 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'),
'title':_(u'Edit transformation "%(transformation)s" for page: %(page)s of document: %(document)s') % {
'transformation':document_page_transformation.get_transformation_display(),
'page':document_page_transformation.document_page.page_number,
'document':document_page_transformation.document_page.document},
}
) )
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') % {
'transformation':document_page_transformation.get_transformation_display(),
'page':document_page_transformation.document_page.page_number,
'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):
check_permissions(request.user, 'documents', [PERMISSION_DOCUMENT_TRANSFORM]) check_permissions(request.user, 'documents', [PERMISSION_DOCUMENT_TRANSFORM])
@@ -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:

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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