Initial commit of document source transformations

This commit is contained in:
Roberto Rosario
2011-07-08 15:30:52 -04:00
parent eef6400c22
commit 1e944c7130
8 changed files with 163 additions and 16 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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