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