diff --git a/apps/documents/forms.py b/apps/documents/forms.py
index f193989503..85ae83bd2b 100644
--- a/apps/documents/forms.py
+++ b/apps/documents/forms.py
@@ -10,7 +10,6 @@ from django.forms.formsets import formset_factory
from staging import StagingFile
from common.wizard import BoundFormWizard
-from common.utils import urlquote
from common.forms import DetailForm
from models import Document, DocumentType, DocumentTypeMetadataType, \
@@ -23,22 +22,22 @@ from documents.conf.settings import AVAILABLE_MODELS
class DocumentPageTransformationForm(forms.ModelForm):
class Meta:
model = DocumentPageTransformation
-
+
def __init__(self, *args, **kwargs):
super(DocumentPageTransformationForm, self).__init__(*args, **kwargs)
self.fields['document_page'].widget = forms.HiddenInput()
-
+
class DocumentPageImageWidget(forms.widgets.Widget):
def render(self, name, value, attrs=None):
output = []
output.append('
' % {
- 'img':reverse('document_preview_transformation', args=[value.document.id]),
- 'page':value.page_number,
+ 'img': reverse('document_preview_transformation',
+ args=[value.document.id]),
+ 'page': value.page_number,
})
- #output.append(super(ImageWidget, self).render(name, value, attrs))
- return mark_safe(u''.join(output))
-
+ return mark_safe(u''.join(output))
+
class DocumentPageForm(DetailForm):
class Meta:
@@ -47,7 +46,7 @@ class DocumentPageForm(DetailForm):
def __init__(self, *args, **kwargs):
super(DocumentPageForm, self).__init__(*args, **kwargs)
self.fields['page_image'].initial = self.instance
-
+
page_image = forms.CharField(widget=DocumentPageImageWidget())
@@ -56,27 +55,34 @@ class ImageWidget(forms.widgets.Widget):
output = []
page_count = value.documentpage_set.count()
if page_count > 1:
- output.append('
%s
' % ugettext(u'Pages'))
+ output.append(
+ '
%s
' %
+ ugettext(u'Pages'))
for page_index in range(value.documentpage_set.count()):
- output.append('%(page)s)
' % {
- 'url':reverse('document_display', args=[value.id]),
- 'img':reverse('document_preview_multipage', args=[value.id]),
- 'page':page_index+1,
+ output.append(
+ '%(page)s)
' % {
+ 'url': reverse('document_display', args=[value.id]),
+ 'img': reverse('document_preview_multipage', args=[value.id]),
+ 'page': page_index + 1,
})
else:
- output.append('
' % {
- 'url':reverse('document_display', args=[value.id]),
- 'img':reverse('document_preview', args=[value.id]),
+ output.append(
+ '
' % {
+ 'url': reverse('document_display', args=[value.id]),
+ 'img': reverse('document_preview', args=[value.id]),
})
- output.append('
%s' % ugettext(u'Click on the image for full size view'))
+ output.append(
+ '
%s' %
+ ugettext(u'Click on the image for full size view'))
if not self.attrs.get('hide_detail_link', False):
for document_page in value.documentpage_set.all():
- output.append('
%(text)s' % {
- 'url':reverse('document_page_view', args=[document_page.id]),
- 'text':ugettext(u'Page %s details') % document_page.page_number})
-
- return mark_safe(u''.join(output))
+ output.append(
+ '
%(text)s' % {
+ 'url': reverse('document_page_view', args=[document_page.id]),
+ 'text': ugettext(u'Page %s details') % document_page.page_number})
+
+ return mark_safe(u''.join(output))
#TODO: Turn this into a base form and let others inherit
@@ -108,7 +114,7 @@ class DocumentPreviewForm(forms.Form):
super(DocumentPreviewForm, self).__init__(*args, **kwargs)
self.fields['preview'].initial = self.document
self.fields['preview'].widget.attrs['hide_detail_link'] = self.hide_detail_link
-
+
preview = forms.CharField(widget=ImageWidget())
@@ -118,21 +124,23 @@ class DocumentContentForm(forms.Form):
super(DocumentContentForm, self).__init__(*args, **kwargs)
page_break_template = u'\n\n\n------------------ %s ------------------\n\n\n' % _(u'page break')
self.fields['contents'].initial = page_break_template.join([page.content for page in self.document.documentpage_set.all() if page.content])
-
- contents = forms.CharField(label=_(u'Contents'), widget=forms.widgets.Textarea(attrs={'rows':24, 'cols':80}))
+
+ contents = forms.CharField(
+ label=_(u'Contents'),
+ widget=forms.widgets.Textarea(attrs={'rows': 24, 'cols': 80}))
class DocumentForm_view(DetailForm):
class Meta:
model = Document
exclude = ('file',)
-
-
+
+
class DocumentForm_edit(DocumentForm):
class Meta:
model = Document
exclude = ('file', 'document_type')
-
+
new_filename = forms.CharField(label=_(u'New document filename'), required=False)
@@ -143,7 +151,7 @@ class StagingDocumentForm(forms.Form):
self.fields['staging_file_id'].choices = [(staging_file.id, staging_file) for staging_file in StagingFile.get_all()]
except:
pass
-
+
if 'initial' in kwargs:
if 'document_type' in kwargs['initial']:
filenames_qs = kwargs['initial']['document_type'].documenttypefilename_set.filter(enabled=True)
@@ -152,7 +160,7 @@ class StagingDocumentForm(forms.Form):
queryset=filenames_qs,
required=False,
label=_(u'Quick document rename'))
-
+
staging_file_id = forms.ChoiceField(label=_(u'Staging file'))
@@ -163,12 +171,12 @@ class DocumentTypeSelectForm(forms.Form):
class MetadataForm(forms.Form):
def __init__(self, *args, **kwargs):
super(MetadataForm, self).__init__(*args, **kwargs)
-
+
#Set form fields initial values
if 'initial' in kwargs:
self.metadata_type = kwargs['initial'].pop('metadata_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_string = u''
if required:
@@ -177,7 +185,7 @@ class MetadataForm(forms.Form):
else:
#TODO: FIXME: not working correctly
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['id'].initial = self.metadata_type.id
if self.metadata_type.default:
@@ -192,31 +200,32 @@ class MetadataForm(forms.Form):
self.fields['value'] = forms.ChoiceField(label=self.fields['value'].label)
choices = zip(choices, choices)
if not required:
- choices.insert(0,('', '------'))
+ choices.insert(0, ('', '------'))
self.fields['value'].choices = choices
self.fields['value'].required = required
except Exception, 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)
name = forms.CharField(label=_(u'Name'),
- required=False, widget=forms.TextInput(attrs={'readonly':'readonly'}))
+ required=False, widget=forms.TextInput(attrs={'readonly': 'readonly'}))
value = forms.CharField(label=_(u'Value'), required=False)
MetadataFormSet = formset_factory(MetadataForm, extra=0)
class DocumentCreateWizard(BoundFormWizard):
- def _generate_metadata_initial_values(self):
- initial=[]
+ def generate_metadata_initial_values(self):
+ initial = []
for item in DocumentTypeMetadataType.objects.filter(document_type=self.document_type):
initial.append({
- 'metadata_type':item.metadata_type,
- 'document_type':self.document_type,
+ 'metadata_type': item.metadata_type,
+ 'document_type': self.document_type,
})
return initial
-
+
def __init__(self, *args, **kwargs):
+ self.urldata = []
self.multiple = kwargs.pop('multiple', True)
self.step_titles = kwargs.pop('step_titles', [
_(u'step 1 of 2: Document type'),
@@ -227,29 +236,26 @@ class DocumentCreateWizard(BoundFormWizard):
super(DocumentCreateWizard, self).__init__(*args, **kwargs)
if self.document_type:
- self.initial = {0:self._generate_metadata_initial_values()}
-
+ self.initial = {0: self.generate_metadata_initial_values()}
+
def render_template(self, request, form, previous_fields, step, context=None):
- context = {'step_title':self.extra_context['step_titles'][step]}
+ context = {'step_title': self.extra_context['step_titles'][step]}
return super(DocumentCreateWizard, self).render_template(request, form, previous_fields, step, context)
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):
- #if step == 0:
if isinstance(form, DocumentTypeSelectForm):
self.document_type = form.cleaned_data['document_type']
- self.initial = {1:self._generate_metadata_initial_values()}
+ self.initial = {1: self.generate_metadata_initial_values()}
- #if step == 1:
if isinstance(form, MetadataFormSet):
- self.urldata = []
- for id, metadata in enumerate(form.cleaned_data):
+ for identifier, metadata in enumerate(form.cleaned_data):
if metadata['value']:
- self.urldata.append(('metadata%s_id' % id, metadata['id']))
- self.urldata.append(('metadata%s_value' % id, metadata['value']))
-
+ self.urldata.append(('metadata%s_id' % identifier, metadata['id']))
+ self.urldata.append(('metadata%s_value' % identifier, metadata['value']))
+
def get_template(self, step):
return 'generic_wizard.html'
diff --git a/apps/documents/metadata.py b/apps/documents/metadata.py
index 6313f25527..0cda7f7856 100644
--- a/apps/documents/metadata.py
+++ b/apps/documents/metadata.py
@@ -1,3 +1,6 @@
+'''Metadata handling commonalities
+'''
+
from urllib import unquote_plus
from django.shortcuts import get_object_or_404
@@ -7,6 +10,8 @@ from django.core.exceptions import ObjectDoesNotExist
from models import DocumentMetadata, MetadataType
def decode_metadata_from_url(url_dict):
+ '''Parses a URL query string to a list of metadata
+ '''
metadata_dict = {
'id':{},
'value':{}
@@ -19,14 +24,19 @@ def decode_metadata_from_url(url_dict):
metadata_dict[element][index] = value
#Convert the nested dictionary into a list of id+values dictionaries
- for order, id in metadata_dict['id'].items():
+ for order, identifier in metadata_dict['id'].items():
if order in metadata_dict['value'].keys():
- metadata_list.append({'id':id, 'value':metadata_dict['value'][order]})
+ metadata_list.append({
+ 'id':identifier,
+ 'value':metadata_dict['value'][order]
+ })
return metadata_list
def save_metadata_list(metadata_list, document):
+ '''Takes a list of metadata values and associates a document to it
+ '''
for item in metadata_list:
if item['value']:
save_metadata(item, document)
@@ -35,36 +45,49 @@ def save_metadata_list(metadata_list, document):
#completely from the document
try:
metadata_type = MetadataType.objects.get(id=item['id'])
- document_metadata = DocumentMetadata.objects.get(document=document,
- metadata_type=metadata_type)
+ document_metadata = DocumentMetadata.objects.get(
+ document=document,
+ metadata_type=metadata_type
+ )
document_metadata.delete()
except ObjectDoesNotExist:
pass
def save_metadata(metadata_dict, document):
+ '''save metadata_dict
+ '''
#Use matched metadata now to create document metadata
document_metadata, created = DocumentMetadata.objects.get_or_create(
document=document,
- metadata_type=get_object_or_404(MetadataType, pk=metadata_dict['id']),
+ metadata_type=get_object_or_404(
+ MetadataType,
+ pk=metadata_dict['id']
+ ),
)
#Handle 'plus sign as space' in the url
#unquote_plus handles utf-8?!?
#http://stackoverflow.com/questions/4382875/handling-iri-in-django
- document_metadata.value = unquote_plus(metadata_dict['value'])#.decode('utf-8')
+ #.decode('utf-8')
+ document_metadata.value = unquote_plus(metadata_dict['value'])
document_metadata.save()
def metadata_repr(metadata_list):
+ '''Return a printable representation of a metadata list
+ '''
return ', '.join(metadata_repr_as_list(metadata_list))
def metadata_repr_as_list(metadata_list):
+ '''Turn a list of metadata into a list of printable representations
+ '''
output = []
for metadata_dict in metadata_list:
try:
- output.append('%s - %s' % (MetadataType.objects.get(pk=metadata_dict['id']), metadata_dict.get('value', '')))
+ output.append('%s - %s' % (MetadataType.objects.get(
+ pk=metadata_dict['id']), metadata_dict.get('value', '')))
except:
pass
diff --git a/apps/documents/models.py b/apps/documents/models.py
index 540ae9a091..be7e4266e2 100644
--- a/apps/documents/models.py
+++ b/apps/documents/models.py
@@ -22,6 +22,7 @@ from documents.conf.settings import STORAGE_BACKEND
from documents.conf.settings import AVAILABLE_TRANSFORMATIONS
from documents.conf.settings import DEFAULT_TRANSFORMATIONS
+
def get_filename_from_uuid(instance, filename):
filename, extension = os.path.splitext(filename)
instance.file_filename = filename
@@ -30,19 +31,18 @@ def get_filename_from_uuid(instance, filename):
uuid = UUID_FUNCTION()
instance.uuid = uuid
return uuid
-
+
class DocumentType(models.Model):
- name = models.CharField(max_length=32, verbose_name=_(u'name'))
-
+ name = models.CharField(max_length=32, verbose_name=_(u'name'))
+
def __unicode__(self):
return self.name
class Document(models.Model):
- """ Minimum fields for a document entry.
- Inherit this model to customise document metadata, see BasicDocument for an example.
- """
+ ''' Minimum fields for a document entry.
+ '''
document_type = models.ForeignKey(DocumentType, verbose_name=_(u'document type'))
file = models.FileField(upload_to=get_filename_from_uuid, storage=STORAGE_BACKEND(), verbose_name=_(u'file'))
uuid = models.CharField(max_length=48, default=UUID_FUNCTION(), blank=True, editable=False)
@@ -55,16 +55,14 @@ class Document(models.Model):
date_updated = models.DateTimeField(verbose_name=_(u'updated'), auto_now=True)
checksum = models.TextField(blank=True, null=True, verbose_name=_(u'checksum'), editable=False)
description = models.TextField(blank=True, null=True, verbose_name=_(u'description'), db_index=True)
-
+
class Meta:
verbose_name = _(u'document')
verbose_name_plural = _(u'documents')
ordering = ['-date_added']
-
def __unicode__(self):
return '%s.%s' % (self.file_filename, self.file_extension)
-
def save(self, *args, **kwargs):
new_document = not self.pk
@@ -79,11 +77,9 @@ class Document(models.Model):
self.update_page_count(save=False)
self.apply_default_transformations()
-
def get_fullname(self):
return os.extsep.join([self.file_filename, self.file_extension])
-
def update_mimetype(self, save=True):
if self.exists():
try:
@@ -102,17 +98,14 @@ class Document(models.Model):
source.close()
if save:
self.save()
-
-
+
def open(self):
return self.file.storage.open(self.file.path)
-
@models.permalink
def get_absolute_url(self):
return ('document_view_simple', [self.id])
-
def update_checksum(self, save=True):
if self.exists():
source = self.open()
@@ -121,15 +114,14 @@ class Document(models.Model):
if save:
self.save()
-
def update_page_count(self, save=True):
handle, filepath = tempfile.mkstemp()
self.save_to_file(filepath)
total_pages = get_page_count(filepath)
-
+
for page_number in range(total_pages):
DocumentPage.objects.get_or_create(
- document=self, page_number=page_number+1)
+ document=self, page_number=page_number + 1)
os.close(handle)
try:
@@ -140,8 +132,7 @@ class Document(models.Model):
if save:
self.save()
-
- def save_to_file(self, filepath, buffer_size=1024*1024):
+ def save_to_file(self, filepath, buffer_size=1024 * 1024):
input_descriptor = self.open()
output_descriptor = open(filepath, 'wb')
while True:
@@ -150,16 +141,14 @@ class Document(models.Model):
output_descriptor.write(copy_buffer)
else:
break
-
+
output_descriptor.close()
input_descriptor.close()
- return filepath
-
-
+ return filepath
+
def exists(self):
return self.file.storage.exists(self.file.path)
-
def get_metadata_groups(self):
errors = []
metadata_groups = {}
@@ -167,7 +156,7 @@ class Document(models.Model):
metadata_dict = {}
for document_metadata in self.documentmetadata_set.all():
metadata_dict['metadata_%s' % document_metadata.metadata_type.name] = document_metadata.value
-
+
for group in MetadataGroup.objects.filter((Q(document_type=self.document_type) | Q(document_type=None)) & Q(enabled=True)):
total_query = Q()
for item in group.metadatagroupitem_set.filter(enabled=True):
@@ -194,26 +183,25 @@ class Document(models.Model):
metadata_groups[group] = Document.objects.filter(Q(id__in=document_id_list)).order_by('file_filename') or []
return metadata_groups, errors
-
def apply_default_transformations(self):
#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:
if 'name' in transformation:
for document_page in self.documentpage_set.all():
page_transformation = DocumentPageTransformation(
document_page=document_page,
- order=0,
+ order=0,
transformation=transformation['name'])
if 'arguments' in transformation:
page_transformation.arguments = transformation['arguments']
-
+
page_transformation.save()
-
-
+
available_functions_string = (_(u' Available functions: %s') % ','.join(['%s()' % name for name, function in AVAILABLE_FUNCTIONS.items()])) if AVAILABLE_FUNCTIONS else ''
available_models_string = (_(u' Available models: %s') % ','.join([name for name, model in AVAILABLE_MODELS.items()])) if AVAILABLE_MODELS else ''
+
class MetadataType(models.Model):
name = models.CharField(max_length=48, verbose_name=_(u'name'), help_text=_(u'Do not use python reserved words.'))
title = models.CharField(max_length=48, verbose_name=_(u'title'), blank=True, null=True)
@@ -224,10 +212,10 @@ class MetadataType(models.Model):
verbose_name=_(u'lookup'),
help_text=_(u'Enter a string to be evaluated. Example: [user.get_full_name() for user in User.objects.all()].%s') % available_models_string)
#TODO: datatype?
-
+
def __unicode__(self):
return self.title if self.title else self.name
-
+
class Meta:
verbose_name = _(u'metadata type')
verbose_name_plural = _(u'metadata types')
@@ -238,7 +226,7 @@ class DocumentTypeMetadataType(models.Model):
metadata_type = models.ForeignKey(MetadataType, verbose_name=_(u'metadata type'))
required = models.BooleanField(default=True, verbose_name=_(u'required'))
#TODO: override default for this document type
-
+
def __unicode__(self):
return unicode(self.metadata_type)
@@ -247,19 +235,19 @@ class DocumentTypeMetadataType(models.Model):
verbose_name_plural = _(u'document type metadata type connectors')
-
available_indexing_functions_string = (_(u' Available functions: %s') % ','.join(['%s()' % name for name, function in AVAILABLE_INDEXING_FUNCTIONS.items()])) if AVAILABLE_INDEXING_FUNCTIONS else ''
+
class MetadataIndex(models.Model):
document_type = models.ForeignKey(DocumentType, verbose_name=_(u'document type'))
expression = models.CharField(max_length=128,
verbose_name=_(u'indexing expression'),
help_text=_(u'Enter a python string expression to be evaluated. The slash caracter "/" acts as a directory delimiter.%s') % available_indexing_functions_string)
enabled = models.BooleanField(default=True, verbose_name=_(u'enabled'))
-
+
def __unicode__(self):
return unicode(self.expression)
-
+
class Meta:
verbose_name = _(u'metadata index')
verbose_name_plural = _(u'metadata indexes')
@@ -269,7 +257,7 @@ class DocumentMetadata(models.Model):
document = models.ForeignKey(Document, verbose_name=_(u'document'))
metadata_type = models.ForeignKey(MetadataType, verbose_name=_(u'metadata type'))
value = models.TextField(blank=True, null=True, verbose_name=_(u'metadata value'), db_index=True)
-
+
def __unicode__(self):
return unicode(self.metadata_type)
@@ -282,7 +270,7 @@ class DocumentTypeFilename(models.Model):
document_type = models.ForeignKey(DocumentType, verbose_name=_(u'document type'))
filename = models.CharField(max_length=128, verbose_name=_(u'filename'), db_index=True)
enabled = models.BooleanField(default=True, verbose_name=_(u'enabled'))
-
+
def __unicode__(self):
return self.filename
@@ -297,7 +285,7 @@ class DocumentPage(models.Model):
content = models.TextField(blank=True, null=True, verbose_name=_(u'content'), db_index=True)
page_label = models.CharField(max_length=32, blank=True, null=True, verbose_name=_(u'page label'))
page_number = models.PositiveIntegerField(default=1, editable=False, verbose_name=_(u'page number'))
-
+
def __unicode__(self):
return '%s - %d - %s' % (unicode(self.document), self.page_number, self.page_label)
@@ -312,13 +300,13 @@ class MetadataGroup(models.Model):
name = models.CharField(max_length=32, verbose_name=_(u'name'))
label = models.CharField(max_length=32, verbose_name=_(u'label'))
enabled = models.BooleanField(default=True, verbose_name=_(u'enabled'))
-
+
def __unicode__(self):
return self.label if self.label else self.name
class Meta:
verbose_name = _(u'metadata document group')
- verbose_name_plural = _(u'metadata document groups')
+ verbose_name_plural = _(u'metadata document groups')
INCLUSION_AND = '&'
@@ -346,7 +334,8 @@ OPERATOR_CHOICES = (
('regex', _(u'is in regular expression')),
('iregex', _(u'is in regular expression (case insensitive)')),
)
-
+
+
class MetadataGroupItem(models.Model):
metadata_group = models.ForeignKey(MetadataGroup, verbose_name=_(u'metadata group'))
inclusion = models.CharField(default=INCLUSION_AND, max_length=16, choices=INCLUSION_CHOICES, help_text=_(u'The inclusion is ignored for the first item.'))
@@ -356,7 +345,7 @@ class MetadataGroupItem(models.Model):
verbose_name=_(u'expression'), help_text=_(u'This expression will be evaluated against the current selected document. The document metadata is available as variables of the same name but with the "metadata_" prefix added their name.'))
negated = models.BooleanField(default=False, verbose_name=_(u'negated'), help_text=_(u'Inverts the logic of the operator.'))
enabled = models.BooleanField(default=True, verbose_name=_(u'enabled'))
-
+
def __unicode__(self):
return '[%s] %s %s %s %s %s' % ('x' if self.enabled else ' ', self.get_inclusion_display(), self.metadata_type, _(u'not') if self.negated else '', self.get_operator_display(), self.expression)
@@ -367,7 +356,7 @@ class MetadataGroupItem(models.Model):
available_transformations = ([(name, data['label']) for name, data in AVAILABLE_TRANSFORMATIONS.items()]) if AVAILABLE_MODELS else []
-
+
class DocumentPageTransformation(models.Model):
document_page = models.ForeignKey(DocumentPage, verbose_name=_(u'document page'))
order = models.PositiveIntegerField(default=0, blank=True, null=True, verbose_name=_(u'order'), db_index=True)
@@ -381,7 +370,7 @@ class DocumentPageTransformation(models.Model):
ordering = ('order',)
verbose_name = _(u'document page transformation')
verbose_name_plural = _(u'document page transformations')
-
-
+
+
register(Document, _(u'document'), ['document_type__name', 'file_mimetype', 'file_filename', 'file_extension', 'documentmetadata__value', 'documentpage__content', 'description'])
#register(Document, _(u'document'), ['document_type__name', 'file_mimetype', 'file_extension', 'documentmetadata__value', 'documentpage__content', 'description', {'field_name':'file_filename', 'comparison':'iexact'}])
diff --git a/apps/documents/views.py b/apps/documents/views.py
index 2dcc3f8c15..10e230e8f8 100644
--- a/apps/documents/views.py
+++ b/apps/documents/views.py
@@ -12,7 +12,7 @@ from django.core.files.base import File
from django.conf import settings
from django.utils.http import urlencode
from django.core.exceptions import ObjectDoesNotExist
-from django.core.files.uploadedfile import SimpleUploadedFile
+from django.core.files.uploadedfile import SimpleUploadedFile
import sendfile
from common.utils import pretty_size
@@ -48,7 +48,7 @@ from forms import DocumentTypeSelectForm, DocumentCreateWizard, \
StagingDocumentForm, DocumentTypeMetadataType, DocumentPreviewForm, \
MetadataFormSet, DocumentPageForm, DocumentPageTransformationForm, \
DocumentContentForm
-
+
from metadata import save_metadata_list, \
decode_metadata_from_url, metadata_repr_as_list
from models import Document, DocumentMetadata, DocumentType, MetadataType, \
@@ -65,17 +65,18 @@ PICTURE_UNKNOWN_MEDIUM = u'1299549805_unknown.png'
def document_list(request):
check_permissions(request.user, 'documents', [PERMISSION_DOCUMENT_VIEW])
-
+
return object_list(
request,
queryset=Document.objects.only('file_filename', 'file_extension').all(),
template_name='generic_list.html',
extra_context={
- 'title':_(u'documents'),
- 'multi_select_as_buttons':True,
+ 'title': _(u'documents'),
+ 'multi_select_as_buttons': True,
},
)
+
def document_create(request, multiple=True):
check_permissions(request.user, 'documents', [PERMISSION_DOCUMENT_CREATE])
@@ -83,29 +84,30 @@ def document_create(request, multiple=True):
wizard = DocumentCreateWizard(
document_type=DocumentType.objects.all()[0],
form_list=[MetadataFormSet], multiple=multiple,
- step_titles = [
+ step_titles=[
_(u'document metadata'),
])
else:
wizard = DocumentCreateWizard(form_list=[DocumentTypeSelectForm, MetadataFormSet], multiple=multiple)
-
+
return wizard(request)
+
def document_create_sibling(request, document_id, multiple=True):
check_permissions(request.user, 'documents', [PERMISSION_DOCUMENT_CREATE])
-
+
document = get_object_or_404(Document, pk=document_id)
urldata = []
for id, metadata in enumerate(document.documentmetadata_set.all()):
if hasattr(metadata, 'value'):
- urldata.append(('metadata%s_id' % id, metadata.metadata_type_id))
+ urldata.append(('metadata%s_id' % id, metadata.metadata_type_id))
urldata.append(('metadata%s_value' % id, metadata.value))
-
+
if multiple:
view = 'upload_multiple_documents_with_type'
else:
view = 'upload_document_with_type'
-
+
url = reverse(view, args=[document.document_type_id])
return HttpResponseRedirect('%s?%s' % (url, urlencode(urldata)))
@@ -121,7 +123,7 @@ def _handle_save_document(request, document, form=None):
warnings = document_create_fs_links(document)
if request.user.is_staff or request.user.is_superuser:
for warning in warnings:
- messages.warning(request, warning)
+ messages.warning(request, warning)
except Exception, e:
messages.error(request, e)
@@ -143,21 +145,21 @@ def _handle_zip_file(request, uploaded_file, document_type):
else:
#Otherwise tell parent to handle file
return False
-
+
def upload_document_with_type(request, document_type_id, multiple=True):
check_permissions(request.user, 'documents', [PERMISSION_DOCUMENT_CREATE])
-
+
document_type = get_object_or_404(DocumentType, pk=document_type_id)
- local_form = DocumentForm(prefix='local', initial={'document_type':document_type})
+ local_form = DocumentForm(prefix='local', initial={'document_type': document_type})
if USE_STAGING_DIRECTORY:
- staging_form = StagingDocumentForm(prefix='staging',
- initial={'document_type':document_type})
-
+ staging_form = StagingDocumentForm(prefix='staging',
+ initial={'document_type': document_type})
+
if request.method == 'POST':
if 'local-submit' in request.POST.keys():
local_form = DocumentForm(request.POST, request.FILES,
- prefix='local', initial={'document_type':document_type})
+ prefix='local', initial={'document_type': document_type})
if local_form.is_valid():
try:
if (not UNCOMPRESS_COMPRESSED_LOCAL_FILES) or (UNCOMPRESS_COMPRESSED_LOCAL_FILES and not _handle_zip_file(request, request.FILES['local-file'], document_type)):
@@ -173,7 +175,7 @@ def upload_document_with_type(request, document_type_id, multiple=True):
return HttpResponseRedirect(reverse('document_list'))
elif 'staging-submit' in request.POST.keys() and USE_STAGING_DIRECTORY:
staging_form = StagingDocumentForm(request.POST, request.FILES,
- prefix='staging', initial={'document_type':document_type})
+ prefix='staging', initial={'document_type': document_type})
if staging_form.is_valid():
try:
staging_file = StagingFile.get(staging_form.cleaned_data['staging_file_id'])
@@ -182,7 +184,7 @@ def upload_document_with_type(request, document_type_id, multiple=True):
document.save()
_handle_save_document(request, document, staging_form)
messages.success(request, _(u'Staging file: %s, uploaded successfully.') % staging_file.filename)
-
+
if DELETE_STAGING_FILE_AFTER_UPLOAD:
staging_file.delete()
messages.success(request, _(u'Staging file: %s, deleted successfully.') % staging_file.filename)
@@ -192,21 +194,20 @@ def upload_document_with_type(request, document_type_id, multiple=True):
if multiple:
return HttpResponseRedirect(request.META['HTTP_REFERER'])
else:
- return HttpResponseRedirect(reverse('document_list'))
-
+ return HttpResponseRedirect(reverse('document_list'))
context = {
- 'document_type_id':document_type_id,
- 'form_list':[
+ 'document_type_id': document_type_id,
+ 'form_list': [
{
- 'form':local_form,
- 'title':_(u'upload a local document'),
- 'grid':6,
- 'grid_clear':False if USE_STAGING_DIRECTORY else True,
+ 'form': local_form,
+ 'title': _(u'upload a local document'),
+ 'grid': 6,
+ 'grid_clear': False if USE_STAGING_DIRECTORY else True,
},
],
}
-
+
if USE_STAGING_DIRECTORY:
try:
filelist = StagingFile.get_all()
@@ -215,56 +216,56 @@ def upload_document_with_type(request, document_type_id, multiple=True):
filelist = []
finally:
context.update({
- 'subtemplates_dict':[
+ 'subtemplates_dict': [
{
- 'name':'generic_list_subtemplate.html',
- 'title':_(u'files in staging'),
- 'object_list':filelist,
- 'hide_link':True,
+ 'name': 'generic_list_subtemplate.html',
+ 'title': _(u'files in staging'),
+ 'object_list': filelist,
+ 'hide_link': True,
},
],
})
context['form_list'].append(
{
- 'form':staging_form,
- 'title':_(u'upload a document from staging'),
- 'grid':6,
- 'grid_clear':True,
+ 'form': staging_form,
+ 'title': _(u'upload a document from staging'),
+ 'grid': 6,
+ 'grid_clear': True,
},
)
-
+
context.update({
- 'sidebar_subtemplates_list':[
+ 'sidebar_subtemplates_list': [
{
- 'title':_(u'Current metadata'),
- 'name':'generic_subtemplate.html',
- #'content':metadata_repr(decode_metadata_from_url(request.GET)),
- 'paragraphs':metadata_repr_as_list(decode_metadata_from_url(request.GET))
+ 'title': _(u'Current metadata'),
+ 'name': 'generic_subtemplate.html',
+ #'content': metadata_repr(decode_metadata_from_url(request.GET)),
+ 'paragraphs': metadata_repr_as_list(decode_metadata_from_url(request.GET))
}]
})
return render_to_response('generic_form.html', context,
context_instance=RequestContext(request))
-
+
+
def document_view(request, document_id):
check_permissions(request.user, 'documents', [PERMISSION_DOCUMENT_VIEW])
-
+
document = get_object_or_404(Document.objects.select_related(), pk=document_id)
form = DocumentForm_view(instance=document, extra_fields=[
- {'label':_(u'Filename'), 'field':'file_filename'},
- {'label':_(u'File extension'), 'field':'file_extension'},
- {'label':_(u'File mimetype'), 'field':'file_mimetype'},
- {'label':_(u'File mime encoding'), 'field':'file_mime_encoding'},
- {'label':_(u'File size'), 'field':lambda x: pretty_size(x.file.storage.size(x.file.path)) if x.exists() else '-'},
- {'label':_(u'Exists in storage'), 'field':'exists'},
- {'label':_(u'File path in storage'), 'field':'file'},
- {'label':_(u'Date added'), 'field':lambda x: x.date_added.date()},
- {'label':_(u'Time added'), 'field':lambda x: unicode(x.date_added.time()).split('.')[0]},
- {'label':_(u'Checksum'), 'field':'checksum'},
- {'label':_(u'UUID'), 'field':'uuid'},
- {'label':_(u'Pages'), 'field':lambda x: x.documentpage_set.count()},
+ {'label': _(u'Filename'), 'field': 'file_filename'},
+ {'label': _(u'File extension'), 'field': 'file_extension'},
+ {'label': _(u'File mimetype'), 'field': 'file_mimetype'},
+ {'label': _(u'File mime encoding'), 'field': 'file_mime_encoding'},
+ {'label': _(u'File size'), 'field':lambda x: pretty_size(x.file.storage.size(x.file.path)) if x.exists() else '-'},
+ {'label': _(u'Exists in storage'), 'field': 'exists'},
+ {'label': _(u'File path in storage'), 'field': 'file'},
+ {'label': _(u'Date added'), 'field':lambda x: x.date_added.date()},
+ {'label': _(u'Time added'), 'field':lambda x: unicode(x.date_added.time()).split('.')[0]},
+ {'label': _(u'Checksum'), 'field': 'checksum'},
+ {'label': _(u'UUID'), 'field': 'uuid'},
+ {'label': _(u'Pages'), 'field': lambda x: x.documentpage_set.count()},
])
-
metadata_groups, errors = document.get_metadata_groups()
if (request.user.is_staff or request.user.is_superuser) and errors:
for error in errors:
@@ -294,13 +295,13 @@ def document_view(request, document_id):
'hide_link':True,
},
]
-
+
if FILESERVING_ENABLE:
subtemplates_dict.append({
- 'name':'generic_list_subtemplate.html',
- 'title':_(u'index links'),
- 'object_list':document.documentmetadataindex_set.all(),
- 'hide_link':True})
+ 'name': 'generic_list_subtemplate.html',
+ 'title': _(u'index links'),
+ 'object_list': document.documentmetadataindex_set.all(),
+ 'hide_link': True})
sidebar_groups = []
for group, data in metadata_groups.items():
@@ -312,36 +313,36 @@ def document_view(request, document_id):
total_string = '(%s)' % len(data)
else:
total_string = ''
-
+
extra_columns = [{'name':'current', 'attribute':lambda x:
'' if x == document else ''}]
-
+
if GROUP_SHOW_THUMBNAIL:
- extra_columns.append({'name':_(u'thumbnail'), 'attribute':
+ extra_columns.append({'name': _(u'thumbnail'), 'attribute':
lambda x: '
' % (reverse('document_preview', args=[x.id]),
reverse('document_thumbnail', args=[x.id]))})
-
+
sidebar_groups.append({
- 'title':'%s %s' % (group.label, total_string),
- 'name':'generic_list_subtemplate.html',
- 'object_list':data[:GROUP_MAX_RESULTS],
- 'hide_columns':True,
- 'hide_header':True,
- 'extra_columns':extra_columns,
+ 'title': '%s %s' % (group.label, total_string),
+ 'name': 'generic_list_subtemplate.html',
+ 'object_list': data[:GROUP_MAX_RESULTS],
+ 'hide_columns': True,
+ 'hide_header': True,
+ 'extra_columns': extra_columns,
})
-
+
return render_to_response('generic_detail.html', {
- 'form_list':form_list,
- 'object':document,
- 'subtemplates_dict':subtemplates_dict,
- 'sidebar_subtemplates_dict':sidebar_groups,
+ 'form_list': form_list,
+ 'object': document,
+ 'subtemplates_dict': subtemplates_dict,
+ 'sidebar_subtemplates_dict': sidebar_groups,
}, context_instance=RequestContext(request))
-
+
def document_delete(request, document_id=None, document_id_list=None):
check_permissions(request.user, 'documents', [PERMISSION_DOCUMENT_DELETE])
post_action_redirect = None
-
+
if document_id:
documents = [get_object_or_404(Document, pk=document_id)]
post_action_redirect = reverse('document_list')
@@ -349,8 +350,8 @@ def document_delete(request, document_id=None, document_id_list=None):
documents = [get_object_or_404(Document, pk=document_id) for document_id in document_id_list.split(',')]
else:
messages.error(request, _(u'Must provide at least one document.'))
- return HttpResponseRedirect(request.META.get('HTTP_REFERER', '/'))
-
+ return HttpResponseRedirect(request.META.get('HTTP_REFERER', '/'))
+
previous = request.POST.get('previous', request.GET.get('previous', request.META.get('HTTP_REFERER', '/')))
next = request.POST.get('next', request.GET.get('next', post_action_redirect if post_action_redirect else request.META.get('HTTP_REFERER', '/')))
@@ -362,22 +363,21 @@ def document_delete(request, document_id=None, document_id_list=None):
messages.success(request, _(u'Document: %s deleted successfully.') % document)
except Exception, e:
messages.error(request, _(u'Document: %(document)s delete error: %(error)s') % {
- 'document':document, 'error':e})
+ 'document': document, 'error': e})
return HttpResponseRedirect(next)
-
+
context = {
- 'object_name':_(u'document'),
- 'delete_view':True,
- 'previous':previous,
- 'next':next,
+ 'object_name': _(u'document'),
+ 'delete_view': True,
+ 'previous': previous,
+ 'next': next,
}
if len(documents) == 1:
- context['object'] = documents[0]
+ context['object'] = documents[0]
context['title'] = _(u'Are you sure you with to delete the document: %s?') % ', '.join([unicode(d) for d in documents])
elif len(documents) > 1:
context['title'] = _(u'Are you sure you with to delete the documents: %s?') % ', '.join([unicode(d) for d in documents])
-
return render_to_response('generic_confirm.html', context,
context_instance=RequestContext(request))
@@ -385,14 +385,14 @@ def document_delete(request, document_id=None, document_id_list=None):
def document_multiple_delete(request):
return document_delete(request, document_id_list=request.GET.get('id_list', []))
-
-
+
+
def document_edit(request, document_id):
check_permissions(request.user, 'documents', [PERMISSION_DOCUMENT_PROPERTIES_EDIT])
-
+
document = get_object_or_404(Document, pk=document_id)
if request.method == 'POST':
- form = DocumentForm_edit(request.POST, initial={'document_type':document.document_type})
+ form = DocumentForm_edit(request.POST, initial={'document_type': document.document_type})
if form.is_valid():
try:
document_delete_fs_links(document)
@@ -405,11 +405,11 @@ def document_edit(request, document_id):
if 'document_type_available_filenames' in form.cleaned_data:
if form.cleaned_data['document_type_available_filenames']:
document.file_filename = form.cleaned_data['document_type_available_filenames'].filename
-
+
document.save()
-
+
messages.success(request, _(u'Document %s edited successfully.') % document)
-
+
try:
warnings = document_create_fs_links(document)
@@ -417,38 +417,37 @@ def document_edit(request, document_id):
for warning in warnings:
messages.warning(request, warning)
- messages.success(request, _(u'Document filesystem links updated successfully.'))
+ messages.success(request, _(u'Document filesystem links updated successfully.'))
except Exception, e:
messages.error(request, e)
return HttpResponseRedirect(document.get_absolute_url())
-
+
return HttpResponseRedirect(document.get_absolute_url())
else:
form = DocumentForm_edit(instance=document, initial={
- 'new_filename':document.file_filename, 'document_type':document.document_type})
+ 'new_filename': document.file_filename, 'document_type': document.document_type})
return render_to_response('generic_form.html', {
- 'form':form,
- 'object':document,
-
+ 'form': form,
+ 'object': document,
}, context_instance=RequestContext(request))
def document_edit_metadata(request, document_id=None, document_id_list=None):
check_permissions(request.user, 'documents', [PERMISSION_DOCUMENT_METADATA_EDIT])
-
+
if document_id:
documents = [get_object_or_404(Document, pk=document_id)]
elif document_id_list:
documents = [get_object_or_404(Document, pk=document_id) for document_id in document_id_list.split(',')]
if len(set([document.document_type for document in documents])) > 1:
messages.error(request, _(u'All documents must be from the same type.'))
- return HttpResponseRedirect(request.META.get('HTTP_REFERER', '/'))
+ return HttpResponseRedirect(request.META.get('HTTP_REFERER', '/'))
else:
messages.error(request, _(u'Must provide at least one document.'))
- return HttpResponseRedirect(request.META.get('HTTP_REFERER', '/'))
+ return HttpResponseRedirect(request.META.get('HTTP_REFERER', '/'))
- metadata={}
+ metadata = {}
for document in documents:
for item in DocumentTypeMetadataType.objects.filter(document_type=document.document_type):
value = document.documentmetadata_set.get(metadata_type=item.metadata_type).value if document.documentmetadata_set.filter(metadata_type=item.metadata_type) else u''
@@ -457,12 +456,12 @@ def document_edit_metadata(request, document_id=None, document_id_list=None):
metadata[item.metadata_type].append(value)
else:
metadata[item.metadata_type] = [value]
-
- initial=[]
+
+ initial = []
for key, value in metadata.items():
initial.append({
- 'metadata_type':key,
- 'document_type':document.document_type,
+ 'metadata_type': key,
+ 'document_type': document.document_type,
'value': u', '.join(value)
})
@@ -476,47 +475,48 @@ def document_edit_metadata(request, document_id=None, document_id_list=None):
document_delete_fs_links(document)
except Exception, e:
messages.error(request, _(u'Error deleting filesystem links for document: %(document)s; %(error)s') % {
- 'document':document, 'error':e})
-
+ 'document': document, 'error': e})
+
messages.success(request, _(u'Metadata for document %s edited successfully.') % document)
-
+
try:
warnings = document_create_fs_links(document)
if request.user.is_staff or request.user.is_superuser:
for warning in warnings:
- messages.warning(request, warning)
+ messages.warning(request, warning)
messages.success(request, _(u'Filesystem links updated successfully for document: %s.') % document)
except Exception, e:
messages.error(request, _('Error creating filesystem links for document: %(document)s; %(error)s') % {
- 'document':document, 'error':e})
-
+ 'document': document, 'error': e})
+
if len(documents) == 1:
return HttpResponseRedirect(document.get_absolute_url())
elif len(documents) > 1:
return HttpResponseRedirect(reverse('document_list'))
-
+
context = {
- 'form_display_mode_table':True,
- 'form':formset,
+ 'form_display_mode_table': True,
+ 'form': formset,
}
if len(documents) == 1:
- context['object'] = documents[0]
+ context['object'] = documents[0]
context['title'] = _(u'Edit metadata for document: %s') % ', '.join([unicode(d) for d in documents])
elif len(documents) > 1:
context['title'] = _(u'Edit metadata for documents: %s') % ', '.join([unicode(d) for d in documents])
-
-
+
return render_to_response('generic_form.html', context,
context_instance=RequestContext(request))
-
+
+
def document_multiple_edit_metadata(request):
return document_edit_metadata(request, document_id_list=request.GET.get('id_list', []))
-
+
+
def get_document_image(request, document_id, size=PREVIEW_SIZE, quality=QUALITY_DEFAULT):
check_permissions(request.user, 'documents', [PERMISSION_DOCUMENT_VIEW])
-
+
document = get_object_or_404(Document, pk=document_id)
page = int(request.GET.get('page', 1))
@@ -531,22 +531,22 @@ def get_document_image(request, document_id, size=PREVIEW_SIZE, quality=QUALITY_
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})
+ messages.warning(request, _(u'Error for transformation %(transformation)s:, %(error)s') %
+ {'transformation': page_transformation.get_transformation_display(),
+ 'error': e})
else:
pass
except ObjectDoesNotExist:
pass
-
+
tranformation_string = ' '.join(transformation_list)
try:
- filepath = in_image_cache(document.checksum, size=size, quality=quality, extra_options=tranformation_string, page=page-1)
+ filepath = in_image_cache(document.checksum, size=size, quality=quality, extra_options=tranformation_string, page=page - 1)
if filepath:
return sendfile.sendfile(request, filename=filepath)
#Save to a temporary location
filepath = document_save_to_temp_dir(document, filename=document.checksum)
- output_file = convert(filepath, size=size, format='jpg', quality=quality, extra_options=tranformation_string, page=page-1)
+ output_file = convert(filepath, size=size, format='jpg', quality=quality, extra_options=tranformation_string, page=page - 1)
return sendfile.sendfile(request, filename=output_file)
except UnkownConvertError, e:
if request.user.is_staff or request.user.is_superuser:
@@ -568,10 +568,10 @@ def get_document_image(request, document_id, size=PREVIEW_SIZE, quality=QUALITY_
else:
return sendfile.sendfile(request, filename='%simages/%s' % (settings.MEDIA_ROOT, PICTURE_ERROR_MEDIUM))
-
+
def document_download(request, document_id):
check_permissions(request.user, 'documents', [PERMISSION_DOCUMENT_DOWNLOAD])
-
+
document = get_object_or_404(Document, pk=document_id)
try:
#Test permissions and trigger exception
@@ -592,9 +592,9 @@ def staging_file_preview(request, staging_file_id):
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})
+ messages.warning(request, _(u'Error for transformation %(transformation)s:, %(error)s') %
+ {'transformation': page_transformation.get_transformation_display(),
+ 'error': e})
else:
pass
tranformation_string = ' '.join(transformation_list)
@@ -612,10 +612,10 @@ def staging_file_preview(request, staging_file_id):
except Exception, e:
if request.user.is_staff or request.user.is_superuser:
messages.error(request, e)
- return serve_file(request, File(file=open(u'%simages/%s' % (settings.MEDIA_ROOT, PICTURE_ERROR_MEDIUM), 'r')))
+ return serve_file(request, File(file=open(u'%simages/%s' % (settings.MEDIA_ROOT, PICTURE_ERROR_MEDIUM), 'r')))
-#TODO: Need permission
+#TODO: Need permission
def staging_file_delete(request, staging_file_id):
staging_file = StagingFile.get(staging_file_id)
next = request.POST.get('next', request.GET.get('next', request.META.get('HTTP_REFERER', None)))
@@ -628,89 +628,89 @@ def staging_file_delete(request, staging_file_id):
except Exception, e:
messages.error(request, e)
return HttpResponseRedirect(next)
-
+
return render_to_response('generic_confirm.html', {
- 'delete_view':True,
- 'object':staging_file,
- 'next':next,
- 'previous':previous,
+ 'delete_view': True,
+ 'object': staging_file,
+ 'next': next,
+ 'previous': previous,
}, context_instance=RequestContext(request))
def document_page_view(request, document_page_id):
check_permissions(request.user, 'documents', [PERMISSION_DOCUMENT_VIEW])
-
+
document_page = get_object_or_404(DocumentPage, pk=document_page_id)
document_page_form = DocumentPageForm(instance=document_page)
form_list = [
{
- 'form':document_page_form,
- 'title':_(u'details for document page: %s') % document_page.page_number,
- 'object':document_page,
- 'grid':6,
+ 'form': document_page_form,
+ 'title': _(u'details for document page: %s') % document_page.page_number,
+ 'object': document_page,
+ 'grid': 6,
},
]
subtemplates_dict = [
{
- 'name':'generic_list_subtemplate.html',
- 'title':_(u'transformations'),
- 'object_list':document_page.documentpagetransformation_set.all(),
- 'extra_columns':[
- {'name':_(u'order'), 'attribute':'order'},
- {'name':_(u'transformation'), 'attribute':lambda x: x.get_transformation_display()},
- {'name':_(u'arguments'), 'attribute':'arguments'}
+ 'name': 'generic_list_subtemplate.html',
+ 'title': _(u'transformations'),
+ 'object_list': document_page.documentpagetransformation_set.all(),
+ 'extra_columns': [
+ {'name': _(u'order'), 'attribute': 'order'},
+ {'name': _(u'transformation'), 'attribute': lambda x: x.get_transformation_display()},
+ {'name': _(u'arguments'), 'attribute': 'arguments'}
],
- 'hide_link':True,
- 'hide_object':True,
- 'grid':6,
- 'grid_clear':True,
- 'hide_header':True,
+ 'hide_link': True,
+ 'hide_object': True,
+ 'grid': 6,
+ 'grid_clear': True,
+ 'hide_header': True,
},
]
-
+
return render_to_response('generic_detail.html', {
- 'form_list':form_list,
- 'object':document_page,
- 'subtemplates_dict':subtemplates_dict,
+ 'form_list': form_list,
+ 'object': document_page,
+ 'subtemplates_dict': subtemplates_dict,
}, context_instance=RequestContext(request))
-
-
+
+
def document_page_transformation_create(request, document_page_id):
check_permissions(request.user, 'documents', [PERMISSION_DOCUMENT_TRANSFORM])
document_page = get_object_or_404(DocumentPage, pk=document_page_id)
-
+
if request.method == 'POST':
- form = DocumentPageTransformationForm(request.POST, initial={'document_page':document_page})
+ form = DocumentPageTransformationForm(request.POST, initial={'document_page': document_page})
if form.is_valid():
form.save()
return HttpResponseRedirect(reverse('document_page_view', args=[document_page_id]))
else:
- form = DocumentPageTransformationForm(initial={'document_page':document_page})
+ form = DocumentPageTransformationForm(initial={'document_page': document_page})
return render_to_response('generic_form.html', {
- 'form':form,
- 'object':document_page,
- 'title':_(u'Create new transformation for page: %(page)s of document: %(document)s') % {
- 'page':document_page.page_number, 'document':document_page.document},
- }, context_instance=RequestContext(request))
+ 'form': form,
+ 'object': document_page,
+ 'title': _(u'Create new transformation for page: %(page)s of document: %(document)s') % {
+ 'page': document_page.page_number, 'document': document_page.document},
+ }, context_instance=RequestContext(request))
def document_page_transformation_edit(request, document_page_transformation_id):
check_permissions(request.user, 'documents', [PERMISSION_DOCUMENT_TRANSFORM])
document_page_transformation = get_object_or_404(DocumentPageTransformation, pk=document_page_transformation_id)
- return update_object(request, template_name='generic_form.html',
- form_class=DocumentPageTransformationForm,
+ return update_object(request, template_name='generic_form.html',
+ form_class=DocumentPageTransformationForm,
object_id=document_page_transformation_id,
post_save_redirect=reverse('document_page_view', args=[document_page_transformation.document_page_id]),
extra_context={
- '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},
+ '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},
}
)
@@ -719,40 +719,40 @@ def document_page_transformation_delete(request, document_page_transformation_id
check_permissions(request.user, 'documents', [PERMISSION_DOCUMENT_TRANSFORM])
previous = request.POST.get('previous', request.GET.get('previous', request.META.get('HTTP_REFERER', None)))
-
+
document_page_transformation = get_object_or_404(DocumentPageTransformation, pk=document_page_transformation_id)
-
- return delete_object(request, model=DocumentPageTransformation, object_id=document_page_transformation_id,
- template_name='generic_confirm.html',
+
+ return delete_object(request, model=DocumentPageTransformation, object_id=document_page_transformation_id,
+ template_name='generic_confirm.html',
post_delete_redirect=reverse('document_page_view', args=[document_page_transformation.document_page_id]),
extra_context={
- 'delete_view':True,
- 'object':document_page_transformation,
- 'object_name':_(u'document transformation'),
- 'title':_(u'Are you sure you wish to delete 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},
- 'previous':previous,
+ 'delete_view': True,
+ 'object': document_page_transformation,
+ 'object_name': _(u'document transformation'),
+ 'title': _(u'Are you sure you wish to delete 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},
+ 'previous': previous,
})
def document_find_duplicates(request, document_id):
check_permissions(request.user, 'documents', [PERMISSION_DOCUMENT_VIEW])
-
+
document = get_object_or_404(Document, pk=document_id)
- return _find_duplicate_list(request, [document], include_source=True, confirmation=False)
+ return _find_duplicate_list(request, [document], include_source=True, confirmation=False)
def _find_duplicate_list(request, source_document_list=Document.objects.all(), include_source=False, confirmation=True):
previous = request.POST.get('previous', request.GET.get('previous', request.META.get('HTTP_REFERER', None)))
-
+
if confirmation and request.method != 'POST':
return render_to_response('generic_confirm.html', {
- 'previous':previous,
- 'message':_(u'On large databases this operation may take some time to execute.'),
+ 'previous': previous,
+ 'message': _(u'On large databases this operation may take some time to execute.'),
}, context_instance=RequestContext(request))
- else:
+ else:
duplicated = []
for document in source_document_list:
if document.pk not in duplicated:
@@ -763,9 +763,9 @@ def _find_duplicate_list(request, source_document_list=Document.objects.all(), i
duplicated.append(document.pk)
return render_to_response('generic_list.html', {
- 'object_list':Document.objects.filter(pk__in=duplicated),
- 'title':_(u'duplicated documents'),
- }, context_instance=RequestContext(request))
+ 'object_list': Document.objects.filter(pk__in=duplicated),
+ 'title': _(u'duplicated documents'),
+ }, context_instance=RequestContext(request))
def document_find_all_duplicates(request):
@@ -786,10 +786,10 @@ def document_clear_transformations(request, document_id=None, document_id_list=N
else:
messages.error(request, _(u'Must provide at least one document.'))
return HttpResponseRedirect(request.META.get('HTTP_REFERER', '/'))
-
+
previous = request.POST.get('previous', request.GET.get('previous', request.META.get('HTTP_REFERER', post_redirect or reverse('document_list'))))
next = request.POST.get('next', request.GET.get('next', request.META.get('HTTP_REFERER', post_redirect or reverse('document_list'))))
-
+
if request.method == 'POST':
for document in documents:
try:
@@ -799,23 +799,22 @@ def document_clear_transformations(request, document_id=None, document_id_list=N
messages.success(request, _(u'All the page transformations for document: %s, have been deleted successfully.') % document)
except Exception, e:
messages.error(request, _(u'Error deleting the page transformations for document: %(document)s; %(error)s.') % {
- 'document':document, 'error':e})
+ 'document': document, 'error': e})
return HttpResponseRedirect(next)
-
+
context = {
- 'object_name':_(u'document transformation'),
- 'delete_view':True,
- 'previous':previous,
- 'next':next,
+ 'object_name': _(u'document transformation'),
+ 'delete_view': True,
+ 'previous': previous,
+ 'next': next,
}
if len(documents) == 1:
- context['object'] = documents[0]
+ context['object'] = documents[0]
context['title'] = _(u'Are you sure you with to clear all the page transformations for document: %s?') % ', '.join([unicode(d) for d in documents])
elif len(documents) > 1:
context['title'] = _(u'Are you sure you with to clear all the page transformations for documents: %s?') % ', '.join([unicode(d) for d in documents])
-
return render_to_response('generic_confirm.html', context,
context_instance=RequestContext(request))
@@ -827,11 +826,11 @@ def document_multiple_clear_transformations(request):
def document_view_simple(request, document_id):
check_permissions(request.user, 'documents', [PERMISSION_DOCUMENT_VIEW])
-
+
document = get_object_or_404(Document.objects.select_related(), pk=document_id)
-
+
content_form = DocumentContentForm(document=document)
-
+
metadata_groups, errors = document.get_metadata_groups()
if (request.user.is_staff or request.user.is_superuser) and errors:
for error in errors:
@@ -840,25 +839,25 @@ def document_view_simple(request, document_id):
preview_form = DocumentPreviewForm(document=document, hide_detail_link=True)
form_list = [
{
- 'form':content_form,
- 'object':document,
- 'grid':6,
+ 'form': content_form,
+ 'object': document,
+ 'grid': 6,
},
{
- 'form':preview_form,
- 'title':_(u'document preview'),
- 'object':document,
- 'grid':6,
- 'grid_clear':True,
+ 'form': preview_form,
+ 'title': _(u'document preview'),
+ 'object': document,
+ 'grid': 6,
+ 'grid_clear': True,
},
]
subtemplates_dict = [
{
- 'name':'generic_list_subtemplate.html',
- 'title':_(u'metadata'),
- 'object_list':document.documentmetadata_set.all(),
- 'extra_columns':[{'name':_(u'value'), 'attribute':'value'}],
- 'hide_link':True,
+ 'name': 'generic_list_subtemplate.html',
+ 'title': _(u'metadata'),
+ 'object_list': document.documentmetadata_set.all(),
+ 'extra_columns': [{'name': _(u'value'), 'attribute': 'value'}],
+ 'hide_link': True,
},
]
@@ -872,29 +871,29 @@ def document_view_simple(request, document_id):
total_string = '(%s)' % len(data)
else:
total_string = ''
-
- extra_columns = [{'name':'current', 'attribute':lambda x:
+
+ extra_columns = [{'name': 'current', 'attribute': lambda x:
'' if x == document else ''}]
-
+
if GROUP_SHOW_THUMBNAIL:
- extra_columns.append({'name':_(u'thumbnail'), 'attribute':
+ extra_columns.append({'name': _(u'thumbnail'), 'attribute':
lambda x: '
' % (reverse('document_preview', args=[x.id]),
reverse('document_thumbnail', args=[x.id]))})
-
+
sidebar_groups.append({
- 'title':'%s %s' % (group.label, total_string),
- 'name':'generic_list_subtemplate.html',
- 'object_list':data[:GROUP_MAX_RESULTS],
- 'hide_columns':True,
- 'hide_header':True,
- 'extra_columns':extra_columns,
+ 'title': '%s %s' % (group.label, total_string),
+ 'name': 'generic_list_subtemplate.html',
+ 'object_list': data[:GROUP_MAX_RESULTS],
+ 'hide_columns': True,
+ 'hide_header': True,
+ 'extra_columns': extra_columns,
})
-
+
return render_to_response('generic_detail.html', {
- 'form_list':form_list,
- 'object':document,
- 'subtemplates_dict':subtemplates_dict,
- 'sidebar_subtemplates_dict':sidebar_groups,
+ 'form_list': form_list,
+ 'object': document,
+ 'subtemplates_dict': subtemplates_dict,
+ 'sidebar_subtemplates_dict': sidebar_groups,
}, context_instance=RequestContext(request))
@@ -907,6 +906,6 @@ def document_missing_list(request):
missing_id_list.append(document.pk)
return render_to_response('generic_list.html', {
- 'object_list':Document.objects.in_bulk(missing_id_list).values(),
- 'title':_(u'missing documents'),
+ 'object_list': Document.objects.in_bulk(missing_id_list).values(),
+ 'title': _(u'missing documents'),
}, context_instance=RequestContext(request))