Initial commit of document source transformations
This commit is contained in:
@@ -33,7 +33,6 @@ register_settings(
|
||||
{'name': u'STORAGE_BACKEND', 'global_name': u'DOCUMENTS_STORAGE_BACKEND', 'default': FileBasedStorage},
|
||||
# Transformations
|
||||
{'name': u'AVAILABLE_TRANSFORMATIONS', 'global_name': u'DOCUMENTS_AVAILABLE_TRANSFORMATIONS', 'default': available_transformations},
|
||||
{'name': u'DEFAULT_TRANSFORMATIONS', 'global_name': u'DOCUMENTS_DEFAULT_TRANSFORMATIONS', 'default': []},
|
||||
# Usage
|
||||
{'name': u'PREVIEW_SIZE', 'global_name': u'DOCUMENTS_PREVIEW_SIZE', 'default': u'640x480'},
|
||||
{'name': u'PRINT_SIZE', 'global_name': u'DOCUMENTS_PRINT_SIZE', 'default': u'1400'},
|
||||
|
||||
@@ -18,7 +18,6 @@ from documents.conf.settings import CHECKSUM_FUNCTION
|
||||
from documents.conf.settings import UUID_FUNCTION
|
||||
from documents.conf.settings import STORAGE_BACKEND
|
||||
from documents.conf.settings import AVAILABLE_TRANSFORMATIONS
|
||||
from documents.conf.settings import DEFAULT_TRANSFORMATIONS
|
||||
from documents.managers import RecentDocumentManager
|
||||
|
||||
available_transformations = ([(name, data['label']) for name, data in AVAILABLE_TRANSFORMATIONS.items()])
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
from django.contrib import admin
|
||||
|
||||
from sources.models import StagingFolder, WebForm
|
||||
from sources.models import StagingFolder, WebForm, SourceTransformation
|
||||
|
||||
|
||||
admin.site.register(StagingFolder)
|
||||
admin.site.register(WebForm)
|
||||
admin.site.register(SourceTransformation)
|
||||
|
||||
@@ -4,7 +4,7 @@ from django.utils.translation import ugettext
|
||||
|
||||
from documents.forms import DocumentForm
|
||||
|
||||
from sources.models import WebForm, StagingFolder
|
||||
from sources.models import WebForm, StagingFolder, SourceTransformation
|
||||
from sources.widgets import FamFamRadioSelect
|
||||
from sources.utils import validate_whitelist_blacklist
|
||||
|
||||
@@ -85,3 +85,12 @@ class StagingFolderSetupForm(forms.ModelForm):
|
||||
|
||||
class Meta:
|
||||
model = StagingFolder
|
||||
|
||||
|
||||
class SourceTransformationForm(forms.ModelForm):
|
||||
class Meta:
|
||||
model = SourceTransformation
|
||||
|
||||
#def __init__(self, *args, **kwargs):
|
||||
# super(SourceTransformationForm, self).__init__(*args, **kwargs)
|
||||
# self.fields['document_page'].widget = forms.HiddenInput()
|
||||
|
||||
8
apps/sources/managers.py
Normal file
8
apps/sources/managers.py
Normal file
@@ -0,0 +1,8 @@
|
||||
from django.db import models
|
||||
from django.contrib.contenttypes.models import ContentType
|
||||
|
||||
|
||||
class SourceTransformationManager(models.Manager):
|
||||
def get_for_object(self, obj):
|
||||
ct = ContentType.objects.get_for_model(obj)
|
||||
return self.model.objects.filter(content_type=ct).filter(object_id=obj.pk)
|
||||
@@ -1,9 +1,16 @@
|
||||
from django.db import models
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
from django.contrib.contenttypes.models import ContentType
|
||||
from django.contrib.contenttypes import generic
|
||||
|
||||
from documents.models import DocumentType
|
||||
from documents.conf.settings import AVAILABLE_TRANSFORMATIONS
|
||||
from documents.managers import RecentDocumentManager
|
||||
from metadata.models import MetadataType
|
||||
|
||||
from sources.managers import SourceTransformationManager
|
||||
|
||||
available_transformations = ([(name, data['label']) for name, data in AVAILABLE_TRANSFORMATIONS.items()])
|
||||
|
||||
SOURCE_UNCOMPRESS_CHOICE_Y = 'y'
|
||||
SOURCE_UNCOMPRESS_CHOICE_N = 'n'
|
||||
@@ -103,19 +110,21 @@ class StagingFolder(InteractiveBaseModel):
|
||||
verbose_name = _(u'staging folder')
|
||||
verbose_name_plural = _(u'staging folder')
|
||||
|
||||
'''
|
||||
class SourceMetadata(models.Model):
|
||||
content_type = models.ForeignKey(ContentType)
|
||||
object_id = models.PositiveIntegerField()
|
||||
content_object = generic.GenericForeignKey('content_type', 'object_id')
|
||||
metadata_type = models.ForeignKey(MetadataType, verbose_name=_(u'metadata type'))
|
||||
value = models.CharField(max_length=256, blank=True, verbose_name=_(u'value'))
|
||||
|
||||
#class StagingFolderMetadataValue(models.Model):
|
||||
# source = models.ForeignKey(BaseModel, verbose_name=_(u'document source'))
|
||||
# metadata_type = models.ForeignKey(MetadataType, verbose_name=_(u'metadata type'))
|
||||
# value = models.CharField(max_length=256, blank=True, verbose_name=_(u'value'))
|
||||
#
|
||||
# def __unicode__(self):
|
||||
# return self.source
|
||||
#
|
||||
# class Meta:
|
||||
# verbose_name = _(u'source metadata')
|
||||
# verbose_name_plural = _(u'sources metadata')
|
||||
def __unicode__(self):
|
||||
return self.source
|
||||
|
||||
class Meta:
|
||||
verbose_name = _(u'source metadata')
|
||||
verbose_name_plural = _(u'sources metadata')
|
||||
'''
|
||||
|
||||
class WebForm(InteractiveBaseModel):
|
||||
is_interactive = True
|
||||
@@ -128,3 +137,27 @@ class WebForm(InteractiveBaseModel):
|
||||
class Meta(InteractiveBaseModel.Meta):
|
||||
verbose_name = _(u'web form')
|
||||
verbose_name_plural = _(u'web forms')
|
||||
|
||||
|
||||
class SourceTransformation(models.Model):
|
||||
"""
|
||||
Model that stores the transformation and transformation arguments
|
||||
for a given document source
|
||||
"""
|
||||
content_type = models.ForeignKey(ContentType)
|
||||
object_id = models.PositiveIntegerField()
|
||||
content_object = generic.GenericForeignKey('content_type', 'object_id')
|
||||
order = models.PositiveIntegerField(default=0, blank=True, null=True, verbose_name=_(u'order'), db_index=True)
|
||||
transformation = models.CharField(choices=available_transformations, max_length=128, verbose_name=_(u'transformation'))
|
||||
arguments = models.TextField(blank=True, null=True, verbose_name=_(u'arguments'), help_text=_(u'Use dictionaries to indentify arguments, example: {\'degrees\':90}'))
|
||||
|
||||
objects = SourceTransformationManager()
|
||||
|
||||
def __unicode__(self):
|
||||
#return u'"%s" for %s' % (self.get_transformation_display(), unicode(self.content_object))
|
||||
return self.get_transformation_display()
|
||||
|
||||
class Meta:
|
||||
ordering = ('order',)
|
||||
verbose_name = _(u'document source transformation')
|
||||
verbose_name_plural = _(u'document source transformations')
|
||||
|
||||
@@ -15,6 +15,7 @@ urlpatterns = patterns('sources.views',
|
||||
url(r'^setup/interactive/webforms/(?P<source_id>\w+)/edit/$', 'setup_source_edit', {'source_type': SOURCE_CHOICE_WEB_FORM}, 'setup_web_form_edit'),
|
||||
url(r'^setup/interactive/webforms/(?P<source_id>\w+)/delete/$', 'setup_source_delete', {'source_type': SOURCE_CHOICE_WEB_FORM}, 'setup_web_form_delete'),
|
||||
url(r'^setup/interactive/webforms/create/$', 'setup_source_create', {'source_type': SOURCE_CHOICE_WEB_FORM}, 'setup_web_form_create'),
|
||||
url(r'^setup/interactive/webforms/(?P<source_id>\w+)/transformation/list/$', 'setup_source_transformation_list', {'source_type': SOURCE_CHOICE_WEB_FORM}, 'setup_web_form_transformation_list'),
|
||||
|
||||
url(r'^setup/interactive/staging_folder/list/$', 'setup_source_list', {'source_type': SOURCE_CHOICE_STAGING}, 'setup_staging_folder_list'),
|
||||
url(r'^setup/interactive/staging_folder/(?P<source_id>\w+)/edit/$', 'setup_source_edit', {'source_type': SOURCE_CHOICE_STAGING}, 'setup_staging_folder_edit'),
|
||||
|
||||
@@ -23,13 +23,14 @@ from metadata.api import save_metadata_list, \
|
||||
from permissions.api import check_permissions
|
||||
import sendfile
|
||||
|
||||
from sources.models import WebForm, StagingFolder
|
||||
from sources.models import WebForm, StagingFolder, SourceTransformation
|
||||
from sources.models import SOURCE_CHOICE_WEB_FORM, SOURCE_CHOICE_STAGING
|
||||
from sources.models import SOURCE_UNCOMPRESS_CHOICE_Y, \
|
||||
SOURCE_UNCOMPRESS_CHOICE_ASK
|
||||
from sources.staging import create_staging_file_class, StagingFile
|
||||
from sources.forms import StagingDocumentForm, WebFormForm
|
||||
from sources.forms import WebFormSetupForm, StagingFolderSetupForm
|
||||
from sources.forms import SourceTransformationForm
|
||||
|
||||
|
||||
def return_function(obj):
|
||||
@@ -461,3 +462,98 @@ def setup_source_create(request, source_type):
|
||||
#'object_name': _(u'source'),
|
||||
},
|
||||
context_instance=RequestContext(request))
|
||||
|
||||
|
||||
def setup_source_transformation_list(request, source_type, source_id):
|
||||
#check_permissions(request.user, [PERMISSION_SOURCES_SETUP_VIEW])
|
||||
|
||||
if source_type == SOURCE_CHOICE_WEB_FORM:
|
||||
cls = WebForm
|
||||
#title = _(u'web form sources')
|
||||
elif source_type == SOURCE_CHOICE_STAGING:
|
||||
cls = StagingFolder
|
||||
#title = _(u'staging folder sources')
|
||||
|
||||
source = get_object_or_404(cls, pk=source_id)
|
||||
|
||||
context = {
|
||||
'object_list': SourceTransformation.objects.get_for_object(source),
|
||||
'title': _(u'default transformations for: %s') % source,
|
||||
'object': source,
|
||||
'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,
|
||||
}
|
||||
|
||||
return render_to_response('generic_list.html', context,
|
||||
context_instance=RequestContext(request))
|
||||
|
||||
|
||||
def setup_source_transformation_edit(request, source_transformation_id):
|
||||
#check_permissions(request.user, [PERMISSION_DOCUMENT_TRANSFORM])
|
||||
|
||||
source_transformation = get_object_or_404(SourceTransformation, pk=source_transformation_id)
|
||||
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: %(document_page)s') % {
|
||||
'transformation': document_page_transformation.get_transformation_display(),
|
||||
'document_page': document_page_transformation.document_page},
|
||||
'web_theme_hide_menus': True,
|
||||
}
|
||||
)
|
||||
'''
|
||||
def document_page_transformation_create(request, document_page_id):
|
||||
check_permissions(request.user, [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})
|
||||
if form.is_valid():
|
||||
form.save()
|
||||
return HttpResponseRedirect(reverse('document_page_view', args=[document_page_id]))
|
||||
else:
|
||||
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},
|
||||
'web_theme_hide_menus': True,
|
||||
}, context_instance=RequestContext(request))
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
def document_page_transformation_delete(request, document_page_transformation_id):
|
||||
check_permissions(request.user, [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',
|
||||
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: %(document_page)s') % {
|
||||
'transformation': document_page_transformation.get_transformation_display(),
|
||||
'document_page': document_page_transformation.document_page},
|
||||
'previous': previous,
|
||||
'web_theme_hide_menus': True,
|
||||
'form_icon': u'pencil_delete.png',
|
||||
})
|
||||
'''
|
||||
|
||||
Reference in New Issue
Block a user