Improve sources app model sub classes and inheritance handling

This commit is contained in:
Roberto Rosario
2014-10-03 14:37:01 -04:00
parent 3b03af9295
commit 060c7a4175
11 changed files with 404 additions and 283 deletions

View File

@@ -10,14 +10,16 @@ from rest_api.classes import APIEndPoint
from .classes import StagingFile
from .links import (document_create_multiple, document_create_siblings,
staging_file_delete, setup_sources, setup_web_form_list,
setup_staging_folder_list, setup_watch_folder_list,
setup_source_edit, setup_source_delete, setup_source_create,
setup_source_transformation_list, setup_source_transformation_create,
setup_source_transformation_edit, setup_source_transformation_delete,
upload_version)
from .models import (WebForm, StagingFolder, SourceTransformation,
WatchFolder)
setup_sources, setup_web_form_list, setup_source_create,
setup_source_delete, setup_source_edit,
setup_source_transformation_create,
setup_source_transformation_delete,
setup_source_transformation_edit,
setup_source_transformation_list,
setup_staging_folder_list, setup_watch_folder_list,
staging_file_delete, upload_version)
from .models import (SourceTransformation, StagingFolderSource,
WatchFolderSource, WebFormSource)
from .urls import api_urls
from .widgets import staging_file_thumbnail
@@ -27,16 +29,16 @@ register_links(SourceTransformation, [setup_source_transformation_edit, setup_so
register_links(['sources:setup_web_form_list', 'sources:setup_staging_folder_list', 'sources:setup_watch_folder_list', 'sources:setup_source_create'], [setup_web_form_list, setup_staging_folder_list], menu_name='form_header')
register_links(WebForm, [setup_web_form_list, setup_staging_folder_list], menu_name='form_header')
register_links(WebForm, [setup_source_transformation_list, setup_source_edit, setup_source_delete])
register_links(WebFormSource, [setup_web_form_list, setup_staging_folder_list], menu_name='form_header')
register_links(WebFormSource, [setup_source_transformation_list, setup_source_edit, setup_source_delete])
register_links(['sources:setup_web_form_list', 'sources:setup_staging_folder_list', 'sources:setup_watch_folder_list', 'sources:setup_source_edit', 'sources:setup_source_delete', 'sources:setup_source_create'], [setup_sources, setup_source_create], menu_name='sidebar')
register_links(StagingFolder, [setup_web_form_list, setup_staging_folder_list], menu_name='form_header')
register_links(StagingFolder, [setup_source_transformation_list, setup_source_edit, setup_source_delete])
register_links(StagingFolderSource, [setup_web_form_list, setup_staging_folder_list], menu_name='form_header')
register_links(StagingFolderSource, [setup_source_transformation_list, setup_source_edit, setup_source_delete])
register_links(WatchFolder, [setup_web_form_list, setup_staging_folder_list, setup_watch_folder_list], menu_name='form_header')
register_links(WatchFolder, [setup_source_transformation_list, setup_source_edit, setup_source_delete])
register_links(WatchFolderSource, [setup_web_form_list, setup_staging_folder_list, setup_watch_folder_list], menu_name='form_header')
register_links(WatchFolderSource, [setup_source_transformation_list, setup_source_edit, setup_source_delete])
# Document version
register_links(['documents:document_version_list', 'documents:upload_version', 'documents:document_version_revert'], [upload_version], menu_name='sidebar')

View File

@@ -2,8 +2,8 @@ from __future__ import absolute_import
from django.contrib import admin
from .models import StagingFolder, SourceTransformation, WebForm
from .models import StagingFolderSource, SourceTransformation, WebFormSource
admin.site.register(StagingFolder)
admin.site.register(StagingFolderSource)
admin.site.register(SourceTransformation)
admin.site.register(WebForm)
admin.site.register(WebFormSource)

View File

@@ -11,7 +11,7 @@ from rest_framework.response import Response
from documents.settings import (DISPLAY_SIZE, ZOOM_MAX_LEVEL,
ZOOM_MIN_LEVEL)
from .models import StagingFolder
from .models import StagingFolderSource
from .serializers import (StagingFolderFileSerializer, StagingFolderSerializer,
StagingSourceFileImageSerializer)
@@ -23,7 +23,7 @@ class APIStagingSourceFileView(generics.GenericAPIView):
serializer_class = StagingFolderFileSerializer
def get(self, request, staging_folder_pk, encoded_filename):
staging_folder = get_object_or_404(StagingFolder, pk=staging_folder_pk)
staging_folder = get_object_or_404(StagingFolderSource, pk=staging_folder_pk)
return Response(StagingFolderFileSerializer(staging_folder.get_file(encoded_filename=encoded_filename), context={'request': request}).data)
@@ -33,7 +33,7 @@ class APIStagingSourceListView(generics.ListAPIView):
"""
serializer_class = StagingFolderSerializer
queryset = StagingFolder.objects.all()
queryset = StagingFolderSource.objects.all()
class APIStagingSourceView(generics.RetrieveAPIView):
@@ -41,7 +41,7 @@ class APIStagingSourceView(generics.RetrieveAPIView):
Details of the selected staging folders and the files it contains.
"""
serializer_class = StagingFolderSerializer
queryset = StagingFolder.objects.all()
queryset = StagingFolderSource.objects.all()
class APIStagingSourceFileImageView(generics.GenericAPIView):
@@ -55,7 +55,7 @@ class APIStagingSourceFileImageView(generics.GenericAPIView):
serializer_class = StagingSourceFileImageSerializer
def get(self, request, staging_folder_pk, encoded_filename):
staging_folder = get_object_or_404(StagingFolder, pk=staging_folder_pk)
staging_folder = get_object_or_404(StagingFolderSource, pk=staging_folder_pk)
staging_file = staging_folder.get_file(encoded_filename=encoded_filename)
size = request.GET.get('size', DISPLAY_SIZE)

View File

@@ -8,9 +8,9 @@ from django.utils.translation import ugettext_lazy as _
from documents.forms import DocumentForm
from .models import SourceTransformation, StagingFolder, WebForm, WatchFolder
from .models import (SourceTransformation, StagingFolderSource, WebFormSource,
WatchFolderSource)
from .utils import validate_whitelist_blacklist
from .widgets import FamFamRadioSelect
logger = logging.getLogger(__name__)
@@ -77,17 +77,17 @@ class WebFormForm(DocumentForm):
class WebFormSetupForm(forms.ModelForm):
class Meta:
model = WebForm
model = WebFormSource
class StagingFolderSetupForm(forms.ModelForm):
class Meta:
model = StagingFolder
model = StagingFolderSource
class WatchFolderSetupForm(forms.ModelForm):
class Meta:
model = WatchFolder
model = WatchFolderSource
class SourceTransformationForm(forms.ModelForm):

View File

@@ -5,7 +5,7 @@ from django.utils.translation import ugettext_lazy as _
from documents.permissions import (PERMISSION_DOCUMENT_CREATE,
PERMISSION_DOCUMENT_NEW_VERSION)
from .models import (StagingFolder, WatchFolder, WebForm)
from .models import StagingFolderSource, WatchFolderSource, WebFormSource
from .permissions import (PERMISSION_SOURCES_SETUP_CREATE,
PERMISSION_SOURCES_SETUP_DELETE,
PERMISSION_SOURCES_SETUP_EDIT,
@@ -16,17 +16,17 @@ document_create_siblings = {'text': _(u'Clone metadata'), 'view': 'sources:docum
staging_file_delete = {'text': _(u'Delete'), 'view': 'sources:staging_file_delete', 'args': ['source.pk', 'object.encoded_filename'], 'famfam': 'delete', 'keep_query': True, 'permissions': [PERMISSION_DOCUMENT_NEW_VERSION, PERMISSION_DOCUMENT_CREATE]}
setup_sources = {'text': _(u'Sources'), 'view': 'sources:setup_web_form_list', 'famfam': 'application_form', 'icon': 'application_form.png', 'children_classes': [WebForm], 'permissions': [PERMISSION_SOURCES_SETUP_VIEW], 'children_view_regex': [r'setup_web_form', r'setup_staging_folder', r'setup_source_']}
setup_web_form_list = {'text': _(u'Web forms'), 'view': 'sources:setup_web_form_list', 'famfam': 'application_form', 'icon': 'application_form.png', 'children_classes': [WebForm], 'permissions': [PERMISSION_SOURCES_SETUP_VIEW]}
setup_staging_folder_list = {'text': _(u'Staging folders'), 'view': 'sources:setup_staging_folder_list', 'famfam': 'folder_camera', 'children_classes': [StagingFolder], 'permissions': [PERMISSION_SOURCES_SETUP_VIEW]}
setup_watch_folder_list = {'text': _(u'Watch folders'), 'view': 'sources:setup_watch_folder_list', 'famfam': 'folder_magnify', 'children_classes': [WatchFolder], 'permissions': [PERMISSION_SOURCES_SETUP_VIEW]}
setup_sources = {'text': _(u'Sources'), 'view': 'sources:setup_web_form_list', 'famfam': 'application_form', 'icon': 'application_form.png', 'children_classes': [WebFormSource], 'permissions': [PERMISSION_SOURCES_SETUP_VIEW], 'children_view_regex': [r'setup_web_form', r'setup_staging_folder', r'setup_source_']}
setup_web_form_list = {'text': _(u'Web forms'), 'view': 'sources:setup_web_form_list', 'famfam': 'application_form', 'icon': 'application_form.png', 'children_classes': [WebFormSource], 'permissions': [PERMISSION_SOURCES_SETUP_VIEW]}
setup_staging_folder_list = {'text': _(u'Staging folders'), 'view': 'sources:setup_staging_folder_list', 'famfam': 'folder_camera', 'children_classes': [StagingFolderSource], 'permissions': [PERMISSION_SOURCES_SETUP_VIEW]}
setup_watch_folder_list = {'text': _(u'Watch folders'), 'view': 'sources:setup_watch_folder_list', 'famfam': 'folder_magnify', 'children_classes': [WatchFolderSource], 'permissions': [PERMISSION_SOURCES_SETUP_VIEW]}
setup_source_edit = {'text': _(u'Edit'), 'view': 'sources:setup_source_edit', 'args': ['source.source_type', 'source.pk'], 'famfam': 'application_form_edit', 'permissions': [PERMISSION_SOURCES_SETUP_EDIT]}
setup_source_delete = {'text': _(u'Delete'), 'view': 'sources:setup_source_delete', 'args': ['source.source_type', 'source.pk'], 'famfam': 'application_form_delete', 'permissions': [PERMISSION_SOURCES_SETUP_DELETE]}
setup_source_edit = {'text': _(u'Edit'), 'view': 'sources:setup_source_edit', 'args': ['source.pk'], 'famfam': 'application_form_edit', 'permissions': [PERMISSION_SOURCES_SETUP_EDIT]}
setup_source_delete = {'text': _(u'Delete'), 'view': 'sources:setup_source_delete', 'args': ['source.pk'], 'famfam': 'application_form_delete', 'permissions': [PERMISSION_SOURCES_SETUP_DELETE]}
setup_source_create = {'text': _(u'Add new source'), 'view': 'sources:setup_source_create', 'args': 'source_type', 'famfam': 'application_form_add', 'permissions': [PERMISSION_SOURCES_SETUP_CREATE]}
setup_source_transformation_list = {'text': _(u'Transformations'), 'view': 'sources:setup_source_transformation_list', 'args': ['source.source_type', 'source.pk'], 'famfam': 'shape_move_front', 'permissions': [PERMISSION_SOURCES_SETUP_EDIT]}
setup_source_transformation_create = {'text': _(u'Add transformation'), 'view': 'sources:setup_source_transformation_create', 'args': ['source.source_type', 'source.pk'], 'famfam': 'shape_square_add', 'permissions': [PERMISSION_SOURCES_SETUP_EDIT]}
setup_source_transformation_list = {'text': _(u'Transformations'), 'view': 'sources:setup_source_transformation_list', 'args': ['source.pk'], 'famfam': 'shape_move_front', 'permissions': [PERMISSION_SOURCES_SETUP_EDIT]}
setup_source_transformation_create = {'text': _(u'Add transformation'), 'view': 'sources:setup_source_transformation_create', 'args': ['source.pk'], 'famfam': 'shape_square_add', 'permissions': [PERMISSION_SOURCES_SETUP_EDIT]}
setup_source_transformation_edit = {'text': _(u'Edit'), 'view': 'sources:setup_source_transformation_edit', 'args': 'transformation.pk', 'famfam': 'shape_square_edit', 'permissions': [PERMISSION_SOURCES_SETUP_EDIT]}
setup_source_transformation_delete = {'text': _(u'Delete'), 'view': 'sources:setup_source_transformation_delete', 'args': 'transformation.pk', 'famfam': 'shape_square_delete', 'permissions': [PERMISSION_SOURCES_SETUP_EDIT]}

View File

@@ -0,0 +1,201 @@
# -*- coding: utf-8 -*-
from south.utils import datetime_utils as datetime
from south.db import db
from south.v2 import SchemaMigration
from django.db import models
class Migration(SchemaMigration):
def forwards(self, orm):
# Deleting model 'StagingFolder'
db.delete_table(u'sources_stagingfolder')
# Deleting model 'WebForm'
db.delete_table(u'sources_webform')
# Deleting model 'WatchFolder'
db.delete_table(u'sources_watchfolder')
# Deleting model 'OutOfProcess'
db.delete_table(u'sources_outofprocess')
# Adding model 'Source'
db.create_table(u'sources_source', (
(u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
('title', self.gf('django.db.models.fields.CharField')(max_length=64)),
('enabled', self.gf('django.db.models.fields.BooleanField')(default=True)),
('whitelist', self.gf('django.db.models.fields.TextField')(blank=True)),
('blacklist', self.gf('django.db.models.fields.TextField')(blank=True)),
))
db.send_create_signal(u'sources', ['Source'])
# Adding model 'InteractiveSource'
db.create_table(u'sources_interactivesource', (
(u'source_ptr', self.gf('django.db.models.fields.related.OneToOneField')(to=orm['sources.Source'], unique=True, primary_key=True)),
))
db.send_create_signal(u'sources', ['InteractiveSource'])
# Adding model 'WatchFolderSource'
db.create_table(u'sources_watchfoldersource', (
(u'outofprocesssource_ptr', self.gf('django.db.models.fields.related.OneToOneField')(to=orm['sources.OutOfProcessSource'], unique=True, primary_key=True)),
('folder_path', self.gf('django.db.models.fields.CharField')(max_length=255)),
('uncompress', self.gf('django.db.models.fields.CharField')(max_length=1)),
('delete_after_upload', self.gf('django.db.models.fields.BooleanField')(default=True)),
('interval', self.gf('django.db.models.fields.PositiveIntegerField')()),
))
db.send_create_signal(u'sources', ['WatchFolderSource'])
# Adding model 'WebFormSource'
db.create_table(u'sources_webformsource', (
(u'interactivesource_ptr', self.gf('django.db.models.fields.related.OneToOneField')(to=orm['sources.InteractiveSource'], unique=True, primary_key=True)),
('uncompress', self.gf('django.db.models.fields.CharField')(max_length=1)),
))
db.send_create_signal(u'sources', ['WebFormSource'])
# Adding model 'OutOfProcessSource'
db.create_table(u'sources_outofprocesssource', (
(u'source_ptr', self.gf('django.db.models.fields.related.OneToOneField')(to=orm['sources.Source'], unique=True, primary_key=True)),
))
db.send_create_signal(u'sources', ['OutOfProcessSource'])
# Adding model 'StagingFolderSource'
db.create_table(u'sources_stagingfoldersource', (
(u'interactivesource_ptr', self.gf('django.db.models.fields.related.OneToOneField')(to=orm['sources.InteractiveSource'], unique=True, primary_key=True)),
('folder_path', self.gf('django.db.models.fields.CharField')(max_length=255)),
('preview_width', self.gf('django.db.models.fields.IntegerField')()),
('preview_height', self.gf('django.db.models.fields.IntegerField')(null=True, blank=True)),
('uncompress', self.gf('django.db.models.fields.CharField')(max_length=1)),
('delete_after_upload', self.gf('django.db.models.fields.BooleanField')(default=True)),
))
db.send_create_signal(u'sources', ['StagingFolderSource'])
def backwards(self, orm):
# Adding model 'StagingFolder'
db.create_table(u'sources_stagingfolder', (
('folder_path', self.gf('django.db.models.fields.CharField')(max_length=255)),
('uncompress', self.gf('django.db.models.fields.CharField')(max_length=1)),
('delete_after_upload', self.gf('django.db.models.fields.BooleanField')(default=True)),
('whitelist', self.gf('django.db.models.fields.TextField')(blank=True)),
('preview_height', self.gf('django.db.models.fields.IntegerField')(null=True, blank=True)),
('blacklist', self.gf('django.db.models.fields.TextField')(blank=True)),
('preview_width', self.gf('django.db.models.fields.IntegerField')()),
(u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
('title', self.gf('django.db.models.fields.CharField')(max_length=64)),
('enabled', self.gf('django.db.models.fields.BooleanField')(default=True)),
))
db.send_create_signal(u'sources', ['StagingFolder'])
# Adding model 'WebForm'
db.create_table(u'sources_webform', (
('uncompress', self.gf('django.db.models.fields.CharField')(max_length=1)),
('whitelist', self.gf('django.db.models.fields.TextField')(blank=True)),
('title', self.gf('django.db.models.fields.CharField')(max_length=64)),
('enabled', self.gf('django.db.models.fields.BooleanField')(default=True)),
('blacklist', self.gf('django.db.models.fields.TextField')(blank=True)),
(u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
))
db.send_create_signal(u'sources', ['WebForm'])
# Adding model 'WatchFolder'
db.create_table(u'sources_watchfolder', (
('blacklist', self.gf('django.db.models.fields.TextField')(blank=True)),
('folder_path', self.gf('django.db.models.fields.CharField')(max_length=255)),
('title', self.gf('django.db.models.fields.CharField')(max_length=64)),
('delete_after_upload', self.gf('django.db.models.fields.BooleanField')(default=True)),
('whitelist', self.gf('django.db.models.fields.TextField')(blank=True)),
('interval', self.gf('django.db.models.fields.PositiveIntegerField')()),
('enabled', self.gf('django.db.models.fields.BooleanField')(default=True)),
(u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
('uncompress', self.gf('django.db.models.fields.CharField')(max_length=1)),
))
db.send_create_signal(u'sources', ['WatchFolder'])
# Adding model 'OutOfProcess'
db.create_table(u'sources_outofprocess', (
('title', self.gf('django.db.models.fields.CharField')(max_length=64)),
('whitelist', self.gf('django.db.models.fields.TextField')(blank=True)),
('enabled', self.gf('django.db.models.fields.BooleanField')(default=True)),
('blacklist', self.gf('django.db.models.fields.TextField')(blank=True)),
(u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
))
db.send_create_signal(u'sources', ['OutOfProcess'])
# Deleting model 'Source'
db.delete_table(u'sources_source')
# Deleting model 'InteractiveSource'
db.delete_table(u'sources_interactivesource')
# Deleting model 'WatchFolderSource'
db.delete_table(u'sources_watchfoldersource')
# Deleting model 'WebFormSource'
db.delete_table(u'sources_webformsource')
# Deleting model 'OutOfProcessSource'
db.delete_table(u'sources_outofprocesssource')
# Deleting model 'StagingFolderSource'
db.delete_table(u'sources_stagingfoldersource')
models = {
u'contenttypes.contenttype': {
'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
},
u'sources.interactivesource': {
'Meta': {'ordering': "('title',)", 'object_name': 'InteractiveSource', '_ormbases': [u'sources.Source']},
u'source_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': u"orm['sources.Source']", 'unique': 'True', 'primary_key': 'True'})
},
u'sources.outofprocesssource': {
'Meta': {'ordering': "('title',)", 'object_name': 'OutOfProcessSource', '_ormbases': [u'sources.Source']},
u'source_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': u"orm['sources.Source']", 'unique': 'True', 'primary_key': 'True'})
},
u'sources.source': {
'Meta': {'ordering': "('title',)", 'object_name': 'Source'},
'blacklist': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'title': ('django.db.models.fields.CharField', [], {'max_length': '64'}),
'whitelist': ('django.db.models.fields.TextField', [], {'blank': 'True'})
},
u'sources.sourcetransformation': {
'Meta': {'ordering': "('order',)", 'object_name': 'SourceTransformation'},
'arguments': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}),
'order': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0', 'null': 'True', 'db_index': 'True', 'blank': 'True'}),
'transformation': ('django.db.models.fields.CharField', [], {'max_length': '128'})
},
u'sources.stagingfoldersource': {
'Meta': {'ordering': "('title',)", 'object_name': 'StagingFolderSource', '_ormbases': [u'sources.InteractiveSource']},
'delete_after_upload': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'folder_path': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
u'interactivesource_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': u"orm['sources.InteractiveSource']", 'unique': 'True', 'primary_key': 'True'}),
'preview_height': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
'preview_width': ('django.db.models.fields.IntegerField', [], {}),
'uncompress': ('django.db.models.fields.CharField', [], {'max_length': '1'})
},
u'sources.watchfoldersource': {
'Meta': {'ordering': "('title',)", 'object_name': 'WatchFolderSource', '_ormbases': [u'sources.OutOfProcessSource']},
'delete_after_upload': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'folder_path': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
'interval': ('django.db.models.fields.PositiveIntegerField', [], {}),
u'outofprocesssource_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': u"orm['sources.OutOfProcessSource']", 'unique': 'True', 'primary_key': 'True'}),
'uncompress': ('django.db.models.fields.CharField', [], {'max_length': '1'})
},
u'sources.webformsource': {
'Meta': {'ordering': "('title',)", 'object_name': 'WebFormSource', '_ormbases': [u'sources.InteractiveSource']},
u'interactivesource_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': u"orm['sources.InteractiveSource']", 'unique': 'True', 'primary_key': 'True'}),
'uncompress': ('django.db.models.fields.CharField', [], {'max_length': '1'})
}
}
complete_apps = ['sources']

View File

@@ -10,6 +10,8 @@ from django.core.exceptions import ValidationError
from django.db import models, transaction
from django.utils.translation import ugettext_lazy as _
from model_utils.managers import InheritanceManager
from acls.utils import apply_default_acls
from common.compressed_files import CompressedFile, NotACompressedFile
from converter.api import get_available_transformations_choices
@@ -31,12 +33,14 @@ from .managers import SourceTransformationManager
logger = logging.getLogger(__name__)
class BaseModel(models.Model):
class Source(models.Model):
title = models.CharField(max_length=64, verbose_name=_(u'Title'))
enabled = models.BooleanField(default=True, verbose_name=_(u'Enabled'))
whitelist = models.TextField(blank=True, verbose_name=_(u'Whitelist'), editable=False)
blacklist = models.TextField(blank=True, verbose_name=_(u'Blacklist'), editable=False)
objects = InheritanceManager()
@classmethod
def class_fullname(cls):
return unicode(dict(SOURCE_CHOICES).get(cls.source_type))
@@ -136,15 +140,17 @@ class BaseModel(models.Model):
class Meta:
ordering = ('title',)
abstract = True
verbose_name = _(u'Source')
verbose_name_plural = _(u'Sources')
class InteractiveBaseModel(BaseModel):
class Meta(BaseModel.Meta):
abstract = True
class InteractiveSource(Source):
class Meta:
verbose_name = _(u'Interactive source')
verbose_name_plural = _(u'Interactive sources')
class StagingFolder(InteractiveBaseModel):
class StagingFolderSource(InteractiveSource):
is_interactive = True
source_type = SOURCE_CHOICE_STAGING
@@ -172,24 +178,32 @@ class StagingFolder(InteractiveBaseModel):
except OSError as exception:
raise Exception(_(u'Unable get list of staging files: %s') % exception)
class Meta(InteractiveBaseModel.Meta):
class Meta:
verbose_name = _(u'Staging folder')
verbose_name_plural = _(u'Staging folders')
class WebForm(InteractiveBaseModel):
class WebFormSource(InteractiveSource):
is_interactive = True
source_type = SOURCE_CHOICE_WEB_FORM
uncompress = models.CharField(max_length=1, choices=SOURCE_INTERACTIVE_UNCOMPRESS_CHOICES, verbose_name=_(u'Uncompress'), help_text=_(u'Whether to expand or not compressed archives.'))
# Default path
class Meta(InteractiveBaseModel.Meta):
class Meta:
verbose_name = _(u'Web form')
verbose_name_plural = _(u'Web forms')
class WatchFolder(BaseModel):
class OutOfProcessSource(Source):
is_interactive = False
class Meta:
verbose_name = _(u'Out of process')
verbose_name_plural = _(u'Out of process')
class WatchFolderSource(OutOfProcessSource):
is_interactive = False
source_type = SOURCE_CHOICE_WATCH
@@ -198,28 +212,14 @@ class WatchFolder(BaseModel):
delete_after_upload = models.BooleanField(default=True, verbose_name=_(u'Delete after upload'), help_text=_(u'Delete the file after is has been successfully uploaded.'))
interval = models.PositiveIntegerField(verbose_name=_(u'Interval'), help_text=_(u'Inverval in seconds where the watch folder path is checked for new documents.'))
def save(self, *args, **kwargs):
if self.pk:
remove_job(self.internal_name())
super(WatchFolder, self).save(*args, **kwargs)
self.schedule()
def schedule(self):
if self.enabled:
register_interval_job(self.internal_name(),
title=self.fullname(), func=self.execute,
kwargs={'source_id': self.pk}, seconds=self.interval
)
def execute(self, source_id):
source = WatchFolder.objects.get(pk=source_id)
if source.uncompress == SOURCE_UNCOMPRESS_CHOICE_Y:
if self.uncompress == SOURCE_UNCOMPRESS_CHOICE_Y:
expand = True
else:
expand = False
print 'execute: %s' % self.internal_name()
class Meta(BaseModel.Meta):
class Meta:
verbose_name = _(u'Watch folder')
verbose_name_plural = _(u'Watch folders')
@@ -267,11 +267,3 @@ class SourceTransformation(models.Model):
ordering = ('order',)
verbose_name = _(u'Document source transformation')
verbose_name_plural = _(u'Document source transformations')
class OutOfProcess(BaseModel):
is_interactive = False
class Meta(BaseModel.Meta):
verbose_name = _(u'Out of process')
verbose_name_plural = _(u'Out of process')

View File

@@ -5,7 +5,7 @@ import logging
from rest_framework import serializers
from rest_framework.reverse import reverse
from .models import StagingFolder
from .models import StagingFolderSource
logger = logging.getLogger(__name__)
@@ -33,7 +33,7 @@ class StagingFolderSerializer(serializers.HyperlinkedModelSerializer):
return []
class Meta:
model = StagingFolder
model = StagingFolderSource
class StagingSourceFileImageSerializer(serializers.Serializer):

View File

@@ -11,7 +11,7 @@ from .wizards import DocumentCreateWizard
urlpatterns = patterns('sources.views',
url(r'^staging_file/(?P<staging_folder_pk>\d+)/(?P<encoded_filename>.+)/delete/$', 'staging_file_delete', name='staging_file_delete'),
url(r'^upload/document/new/interactive/(?P<source_type>\w+)/(?P<source_id>\d+)/$', 'upload_interactive', (), 'upload_interactive'),
url(r'^upload/document/new/interactive/(?P<source_id>\d+)/$', 'upload_interactive', (), 'upload_interactive'),
url(r'^upload/document/new/interactive/$', 'upload_interactive', (), 'upload_interactive'),
url(r'^upload/document/(?P<document_pk>\d+)/version/interactive/(?P<source_type>\w+)/(?P<source_id>\d+)/$', 'upload_interactive', (), 'upload_version'),
@@ -24,12 +24,12 @@ urlpatterns = patterns('sources.views',
url(r'^setup/interactive/%s/list/$' % SOURCE_CHOICE_WATCH, 'setup_source_list', {'source_type': SOURCE_CHOICE_WATCH}, 'setup_watch_folder_list'),
url(r'^setup/interactive/(?P<source_type>\w+)/list/$', 'setup_source_list', (), 'setup_source_list'),
url(r'^setup/interactive/(?P<source_type>\w+)/(?P<source_id>\d+)/edit/$', 'setup_source_edit', (), 'setup_source_edit'),
url(r'^setup/interactive/(?P<source_type>\w+)/(?P<source_id>\d+)/delete/$', 'setup_source_delete', (), 'setup_source_delete'),
url(r'^setup/interactive/(?P<source_id>\d+)/edit/$', 'setup_source_edit', (), 'setup_source_edit'),
url(r'^setup/interactive/(?P<source_id>\d+)/delete/$', 'setup_source_delete', (), 'setup_source_delete'),
url(r'^setup/interactive/(?P<source_type>\w+)/create/$', 'setup_source_create', (), 'setup_source_create'),
url(r'^setup/interactive/(?P<source_type>\w+)/(?P<source_id>\d+)/transformation/list/$', 'setup_source_transformation_list', (), 'setup_source_transformation_list'),
url(r'^setup/interactive/(?P<source_type>\w+)/(?P<source_id>\d+)/transformation/create/$', 'setup_source_transformation_create', (), 'setup_source_transformation_create'),
url(r'^setup/interactive/(?P<source_id>\d+)/transformation/list/$', 'setup_source_transformation_list', (), 'setup_source_transformation_list'),
url(r'^setup/interactive/(?P<source_id>\d+)/transformation/create/$', 'setup_source_transformation_create', (), 'setup_source_transformation_create'),
url(r'^setup/interactive/source/transformation/(?P<transformation_id>\d+)/edit/$', 'setup_source_transformation_edit', (), 'setup_source_transformation_edit'),
url(r'^setup/interactive/source/transformation/(?P<transformation_id>\d+)/delete/$', 'setup_source_transformation_delete', (), 'setup_source_transformation_delete'),

View File

@@ -4,7 +4,6 @@ from django.conf import settings
from django.contrib import messages
from django.core.exceptions import PermissionDenied
from django.core.urlresolvers import reverse
from django.conf import settings
from django.http import HttpResponseRedirect
from django.shortcuts import render_to_response, get_object_or_404
from django.template import RequestContext
@@ -28,7 +27,8 @@ from .forms import (StagingDocumentForm, StagingFolderSetupForm,
from .literals import (SOURCE_CHOICE_STAGING, SOURCE_CHOICE_WATCH,
SOURCE_CHOICE_WEB_FORM, SOURCE_UNCOMPRESS_CHOICE_ASK,
SOURCE_UNCOMPRESS_CHOICE_Y)
from .models import StagingFolder, SourceTransformation, WatchFolder, WebForm
from .models import (Source, StagingFolderSource, SourceTransformation,
WatchFolderSource, WebFormSource)
from .permissions import (PERMISSION_SOURCES_SETUP_CREATE,
PERMISSION_SOURCES_SETUP_DELETE,
PERMISSION_SOURCES_SETUP_EDIT,
@@ -57,11 +57,11 @@ def return_function(obj):
def get_tab_link_for_source(source, document=None):
if document:
view = u'upload_version'
args = [document.pk, u'"%s"' % source.source_type, source.pk]
view = u'sources:upload_version'
args = [document.pk, source.pk]
else:
view = u'sources:upload_interactive'
args = [u'"%s"' % source.source_type, source.pk]
args = [source.pk]
return {
'text': source.title,
@@ -75,11 +75,11 @@ def get_tab_link_for_source(source, document=None):
def get_active_tab_links(document=None):
tab_links = []
web_forms = WebForm.objects.filter(enabled=True)
web_forms = WebFormSource.objects.filter(enabled=True)
for web_form in web_forms:
tab_links.append(get_tab_link_for_source(web_form, document))
staging_folders = StagingFolder.objects.filter(enabled=True)
staging_folders = StagingFolderSource.objects.filter(enabled=True)
for staging_folder in staging_folders:
tab_links.append(get_tab_link_for_source(staging_folder, document))
@@ -90,7 +90,7 @@ def get_active_tab_links(document=None):
}
def upload_interactive(request, source_type=None, source_id=None, document_pk=None):
def upload_interactive(request, source_id=None, document_pk=None):
subtemplates_list = []
if document_pk:
@@ -109,7 +109,7 @@ def upload_interactive(request, source_type=None, source_id=None, document_pk=No
context = {}
if results[SOURCE_CHOICE_WEB_FORM].count() == 0 and results[SOURCE_CHOICE_STAGING].count() == 0:
source_setup_link = mark_safe('<a href="%s">%s</a>' % (reverse('setup_web_form_list'), ugettext(u'Here')))
source_setup_link = mark_safe('<a href="%s">%s</a>' % (reverse('sources:setup_web_form_list'), ugettext(u'Here')))
subtemplates_list.append(
{
'name': 'main/generic_subtemplate.html',
@@ -130,170 +130,115 @@ def upload_interactive(request, source_type=None, source_id=None, document_pk=No
else:
document_type = None
if source_type is None and source_id is None:
if source_id is None:
if results[SOURCE_CHOICE_WEB_FORM].count():
source_type = results[SOURCE_CHOICE_WEB_FORM][0].source_type
source_id = results[SOURCE_CHOICE_WEB_FORM][0].pk
elif results[SOURCE_CHOICE_STAGING].count():
source_type = results[SOURCE_CHOICE_STAGING][0].source_type
source_id = results[SOURCE_CHOICE_STAGING][0].pk
if source_type and source_id:
if source_type == SOURCE_CHOICE_WEB_FORM:
web_form = get_object_or_404(WebForm, pk=source_id)
context['source'] = web_form
if request.method == 'POST':
form = WebFormForm(request.POST, request.FILES,
document_type=document_type,
show_expand=(web_form.uncompress == SOURCE_UNCOMPRESS_CHOICE_ASK) and not document,
source=web_form,
instance=document
)
if form.is_valid():
try:
if document:
expand = False
if source_id:
source = get_object_or_404(Source.objects.select_subclasses(), pk=source_id)
if isinstance(source, WebFormSource):
form_class = WebFormForm
else:
form_class = StagingDocumentForm
context['source'] = source
if request.method == 'POST':
form = form_class(request.POST, request.FILES,
document_type=document_type,
show_expand=(source.uncompress == SOURCE_UNCOMPRESS_CHOICE_ASK) and not document,
source=source,
instance=document
)
if form.is_valid():
try:
if document:
expand = False
else:
if source.uncompress == SOURCE_UNCOMPRESS_CHOICE_ASK:
expand = form.cleaned_data.get('expand')
else:
if web_form.uncompress == SOURCE_UNCOMPRESS_CHOICE_ASK:
expand = form.cleaned_data.get('expand')
if source.uncompress == SOURCE_UNCOMPRESS_CHOICE_Y:
expand = True
else:
if web_form.uncompress == SOURCE_UNCOMPRESS_CHOICE_Y:
expand = True
else:
expand = False
expand = False
new_filename = get_form_filename(form)
new_filename = get_form_filename(form)
result = web_form.upload_file(
request.FILES['file'],
new_filename, use_file_name=form.cleaned_data.get('use_file_name', False),
document_type=document_type,
expand=expand,
metadata_dict_list=decode_metadata_from_url(request.GET),
user=request.user,
document=document,
new_version_data=form.cleaned_data.get('new_version_data'),
description=form.cleaned_data.get('description')
)
if document:
messages.success(request, _(u'New document version uploaded successfully.'))
return HttpResponseRedirect(reverse('document_version_list', args=[document.pk]))
else:
if result['is_compressed'] is None:
messages.success(request, _(u'File uploaded successfully.'))
if isinstance(source, WebFormSource):
file_object = request.FILES['file']
else:
staging_file = source.get_file(encoded_filename=form.cleaned_data['staging_file_id'])
file_object = staging_file.as_file()
if result['is_compressed'] is True:
messages.success(request, _(u'File uncompressed successfully and uploaded as individual files.'))
result = source.upload_file(
file_object,
new_filename, use_file_name=form.cleaned_data.get('use_file_name', False),
document_type=document_type,
expand=expand,
metadata_dict_list=decode_metadata_from_url(request.GET),
user=request.user,
document=document,
new_version_data=form.cleaned_data.get('new_version_data'),
description=form.cleaned_data.get('description')
)
if result['is_compressed'] is False:
messages.warning(request, _(u'File was not a compressed file, uploaded as it was.'))
return HttpResponseRedirect(request.get_full_path())
except NewDocumentVersionNotAllowed:
messages.error(request, _(u'New version uploads are not allowed for this document.'))
except Exception as exception:
if settings.DEBUG:
raise
messages.error(request, _(u'Unhandled exception: %s') % exception)
else:
form = WebFormForm(
show_expand=(web_form.uncompress == SOURCE_UNCOMPRESS_CHOICE_ASK) and not document,
document_type=document_type,
source=web_form,
instance=document
)
if document:
title = _(u'Upload a new version from source: %s') % web_form.title
else:
title = _(u'Upload a local document from source: %s') % web_form.title
subtemplates_list.append({
'name': 'main/generic_form_subtemplate.html',
'context': {
'form': form,
'title': title,
},
})
elif source_type == SOURCE_CHOICE_STAGING:
staging_folder = get_object_or_404(StagingFolder, pk=source_id)
context['source'] = staging_folder
if request.method == 'POST':
form = StagingDocumentForm(request.POST, request.FILES,
document_type=document_type,
show_expand=(staging_folder.uncompress == SOURCE_UNCOMPRESS_CHOICE_ASK) and not document,
source=staging_folder,
instance=document
)
if form.is_valid():
try:
staging_file = staging_folder.get_file(encoded_filename=form.cleaned_data['staging_file_id'])
if document:
expand = False
else:
if staging_folder.uncompress == SOURCE_UNCOMPRESS_CHOICE_ASK:
expand = form.cleaned_data.get('expand')
else:
if staging_folder.uncompress == SOURCE_UNCOMPRESS_CHOICE_Y:
expand = True
else:
expand = False
new_filename = get_form_filename(form)
result = staging_folder.upload_file(
staging_file.as_file(),
new_filename, use_file_name=form.cleaned_data.get('use_file_name', False),
document_type=document_type,
expand=expand,
metadata_dict_list=decode_metadata_from_url(request.GET),
user=request.user,
document=document,
new_version_data=form.cleaned_data.get('new_version_data'),
description=form.cleaned_data.get('description')
)
if document:
messages.success(request, _(u'Document version from staging file: %s, uploaded successfully.') % staging_file.filename)
else:
if result['is_compressed'] is None:
messages.success(request, _(u'Staging file: %s, uploaded successfully.') % staging_file.filename)
if result['is_compressed'] is True:
messages.success(request, _(u'Staging file: %s, uncompressed successfully and uploaded as individual files.') % staging_file.filename)
if result['is_compressed'] is False:
messages.warning(request, _(u'Staging file: %s, was not compressed, uploaded as a single file.') % staging_file.filename)
if staging_folder.delete_after_upload:
if isinstance(source, StagingFolderSource):
if source.delete_after_upload:
staging_file.delete()
messages.success(request, _(u'Staging file: %s, deleted successfully.') % staging_file.filename)
if document:
return HttpResponseRedirect(reverse('documents:document_view_simple', args=[document.pk]))
else:
return HttpResponseRedirect(request.get_full_path())
except NewDocumentVersionNotAllowed:
messages.error(request, _(u'New version uploads are not allowed for this document.'))
except Exception as exception:
if settings.DEBUG:
raise
messages.error(request, _(u'Unhandled exception: %s') % exception)
else:
form = StagingDocumentForm(document_type=document_type,
show_expand=(staging_folder.uncompress == SOURCE_UNCOMPRESS_CHOICE_ASK) and not document,
source=staging_folder,
instance=document
)
if document:
messages.success(request, _(u'New document version uploaded successfully.'))
return HttpResponseRedirect(reverse('documents:document_version_list', args=[document.pk]))
else:
if result['is_compressed'] is None:
messages.success(request, _(u'File uploaded successfully.'))
if result['is_compressed'] is True:
messages.success(request, _(u'File uncompressed successfully and uploaded as individual files.'))
if result['is_compressed'] is False:
messages.warning(request, _(u'File was not a compressed file, uploaded as it was.'))
return HttpResponseRedirect(request.get_full_path())
except NewDocumentVersionNotAllowed:
messages.error(request, _(u'New version uploads are not allowed for this document.'))
except Exception as exception:
if settings.DEBUG:
raise
messages.error(request, _(u'Unhandled exception: %s') % exception)
else:
form = form_class(
show_expand=(source.uncompress == SOURCE_UNCOMPRESS_CHOICE_ASK) and not document,
document_type=document_type,
source=source,
instance=document
)
if document:
title = _(u'Upload a new version from source: %s') % source.title
else:
title = _(u'Upload a local document from source: %s') % source.title
subtemplates_list.append({
'name': 'main/generic_form_subtemplate.html',
'context': {
'form': form,
'title': title,
},
})
if isinstance(source, StagingFolderSource):
try:
staging_filelist = list(staging_folder.get_files())
staging_filelist = list(source.get_files())
except Exception as exception:
messages.error(request, exception)
staging_filelist = []
finally:
if document:
title = _(u'Upload a new version from staging source: %s') % staging_folder.title
else:
title = _(u'Upload a document from staging source: %s') % staging_folder.title
subtemplates_list = [
{
'name': 'main/generic_form_subtemplate.html',
@@ -373,7 +318,7 @@ def get_form_filename(form):
def staging_file_delete(request, staging_folder_pk, encoded_filename):
Permission.objects.check_permissions(request.user, [PERMISSION_DOCUMENT_CREATE, PERMISSION_DOCUMENT_NEW_VERSION])
staging_folder = get_object_or_404(StagingFolder, pk=staging_folder_pk)
staging_folder = get_object_or_404(StagingFolderSource, pk=staging_folder_pk)
staging_file = staging_folder.get_file(encoded_filename=encoded_filename)
next = request.POST.get('next', request.GET.get('next', request.META.get('HTTP_REFERER', reverse(settings.LOGIN_REDIRECT_URL))))
@@ -405,11 +350,11 @@ def setup_source_list(request, source_type):
Permission.objects.check_permissions(request.user, [PERMISSION_SOURCES_SETUP_VIEW])
if source_type == SOURCE_CHOICE_WEB_FORM:
cls = WebForm
cls = WebFormSource
elif source_type == SOURCE_CHOICE_STAGING:
cls = StagingFolder
cls = StagingFolderSource
elif source_type == SOURCE_CHOICE_WATCH:
cls = WatchFolder
cls = WatchFolderSource
context = {
'object_list': cls.objects.all(),
@@ -423,20 +368,17 @@ def setup_source_list(request, source_type):
context_instance=RequestContext(request))
def setup_source_edit(request, source_type, source_id):
def setup_source_edit(request, source_id):
Permission.objects.check_permissions(request.user, [PERMISSION_SOURCES_SETUP_EDIT])
if source_type == SOURCE_CHOICE_WEB_FORM:
cls = WebForm
source = get_object_or_404(Source.objects.select_subclasses(), pk=source_id)
if isinstance(source, WebFormSource):
form_class = WebFormSetupForm
elif source_type == SOURCE_CHOICE_STAGING:
cls = StagingFolder
elif isinstance(source, StagingFolderSource):
form_class = StagingFolderSetupForm
elif source_type == SOURCE_CHOICE_WATCH:
cls = WatchFolder
elif isinstance(source, WatchFolderSource):
form_class = WatchFolderSetupForm
source = get_object_or_404(cls, pk=source_id)
next = request.POST.get('next', request.GET.get('next', request.META.get('HTTP_REFERER', reverse(settings.LOGIN_REDIRECT_URL))))
if request.method == 'POST':
@@ -458,31 +400,28 @@ def setup_source_edit(request, source_type, source_id):
'navigation_object_name': 'source',
'next': next,
'object_name': _(u'Source'),
'source_type': source_type,
'source_type': source.source_type,
},
context_instance=RequestContext(request))
def setup_source_delete(request, source_type, source_id):
def setup_source_delete(request, source_id):
Permission.objects.check_permissions(request.user, [PERMISSION_SOURCES_SETUP_DELETE])
if source_type == SOURCE_CHOICE_WEB_FORM:
cls = WebForm
source = get_object_or_404(Source.objects.select_subclasses(), pk=source_id)
redirect_view = reverse('sources:setup_source_list', args=[source.source_type])
if isinstance(source, WebFormSource):
form_icon = u'application_form_delete.png'
redirect_view = 'setup_web_form_list'
elif source_type == SOURCE_CHOICE_STAGING:
cls = StagingFolder
redirect_view = 'sources:setup_web_form_list'
elif isinstance(source, StagingFolderSource):
form_icon = u'folder_delete.png'
redirect_view = 'setup_staging_folder_list'
elif source_type == SOURCE_CHOICE_WATCH:
cls = WatchFolder
redirect_view = 'sources:setup_staging_folder_list'
elif isinstance(source, WatchFolderSource):
form_icon = u'folder_delete.png'
redirect_view = 'setup_watch_folder_list'
redirect_view = 'sources:setup_watch_folder_list'
redirect_view = reverse('sources:setup_source_list', args=[source_type])
previous = request.POST.get('previous', request.GET.get('previous', request.META.get('HTTP_REFERER', redirect_view)))
source = get_object_or_404(cls, pk=source_id)
if request.method == 'POST':
try:
source.delete()
@@ -502,7 +441,7 @@ def setup_source_delete(request, source_type, source_id):
'delete_view': True,
'previous': previous,
'form_icon': form_icon,
'source_type': source_type,
'source_type': source.source_type,
}
return render_to_response('main/generic_confirm.html', context,
@@ -513,13 +452,13 @@ def setup_source_create(request, source_type):
Permission.objects.check_permissions(request.user, [PERMISSION_SOURCES_SETUP_CREATE])
if source_type == SOURCE_CHOICE_WEB_FORM:
cls = WebForm
cls = WebFormSource
form_class = WebFormSetupForm
elif source_type == SOURCE_CHOICE_STAGING:
cls = StagingFolder
cls = WebFormSource
form_class = StagingFolderSetupForm
elif source_type == SOURCE_CHOICE_WATCH:
cls = WatchFolder
cls = WebFormSource
form_class = WatchFolderSetupForm
if request.method == 'POST':
@@ -543,17 +482,10 @@ def setup_source_create(request, source_type):
context_instance=RequestContext(request))
def setup_source_transformation_list(request, source_type, source_id):
def setup_source_transformation_list(request, source_id):
Permission.objects.check_permissions(request.user, [PERMISSION_SOURCES_SETUP_EDIT])
if source_type == SOURCE_CHOICE_WEB_FORM:
cls = WebForm
elif source_type == SOURCE_CHOICE_STAGING:
cls = StagingFolder
elif source_type == SOURCE_CHOICE_WATCH:
cls = WatchFolder
source = get_object_or_404(cls, pk=source_id)
source = get_object_or_404(Source.objects.select_subclasses(), pk=source_id)
context = {
'object_list': SourceTransformation.transformations.get_for_object(source),
@@ -579,7 +511,7 @@ def setup_source_transformation_edit(request, transformation_id):
Permission.objects.check_permissions(request.user, [PERMISSION_SOURCES_SETUP_EDIT])
source_transformation = get_object_or_404(SourceTransformation, pk=transformation_id)
redirect_view = reverse('sources:setup_source_transformation_list', args=[source_transformation.content_object.source_type, source_transformation.content_object.pk])
redirect_view = reverse('sources:setup_source_transformation_list', args=[source_transformation.content_object.pk])
next = request.POST.get('next', request.GET.get('next', request.META.get('HTTP_REFERER', redirect_view)))
if request.method == 'POST':
@@ -612,7 +544,7 @@ def setup_source_transformation_delete(request, transformation_id):
Permission.objects.check_permissions(request.user, [PERMISSION_SOURCES_SETUP_EDIT])
source_transformation = get_object_or_404(SourceTransformation, pk=transformation_id)
redirect_view = reverse('sources:setup_source_transformation_list', args=[source_transformation.content_object.source_type, source_transformation.content_object.pk])
redirect_view = reverse('sources:setup_source_transformation_list', args=[source_transformation.content_object.pk])
previous = request.POST.get('previous', request.GET.get('previous', request.META.get('HTTP_REFERER', redirect_view)))
if request.method == 'POST':
@@ -642,19 +574,12 @@ def setup_source_transformation_delete(request, transformation_id):
context_instance=RequestContext(request))
def setup_source_transformation_create(request, source_type, source_id):
def setup_source_transformation_create(request, source_id):
Permission.objects.check_permissions(request.user, [PERMISSION_SOURCES_SETUP_EDIT])
if source_type == SOURCE_CHOICE_WEB_FORM:
cls = WebForm
elif source_type == SOURCE_CHOICE_STAGING:
cls = StagingFolder
elif source_type == SOURCE_CHOICE_WATCH:
cls = WatchFolder
source = get_object_or_404(Source.objects.select_subclasses(), pk=source_id)
source = get_object_or_404(cls, pk=source_id)
redirect_view = reverse('sources:setup_source_transformation_list', args=[source.source_type, source.pk])
redirect_view = reverse('sources:setup_source_transformation_list', args=[source.pk])
if request.method == 'POST':
form = SourceTransformationForm_create(request.POST)

View File

@@ -10,6 +10,7 @@ django-pagination==1.0.7
django-compressor==1.4
django-cors-headers==0.13
django-taggit==0.12
django-model-utils==2.2
django-mptt==0.6.1
django-rest-swagger==0.1.14
django-sendfile==0.3.6