Rework 'Upload File' form for a specific data_type.

Change-Id: If38acc7cd4cb6115637aea867398910a052d8c60
This commit is contained in:
Timur Sufiev 2013-11-27 18:20:02 +04:00
parent 363d3ec4c1
commit 89ad6a0f89
4 changed files with 59 additions and 19 deletions

View File

@ -47,28 +47,23 @@ class UploadServiceForm(SelfHandlingForm):
redirect=redirect)
class UploadFileForm(SelfHandlingForm):
supported_data_types = {
'ui': 'UI Definition (*.yaml)',
'workflows': 'Murano Conductor Workflow (*xml)',
'heat': 'Heat template',
'agent': 'Murano Agent template',
'scripts': 'Script for agent execution'
}
data_type = forms.ChoiceField(label=_('File data type'),
choices=(supported_data_types.items()))
class UploadFileKnownTypeForm(SelfHandlingForm):
file = forms.FileField(label=_('Murano Repository File'),
required=True,
error_messages=
{'required': _('There is no file to upload')})
def __init__(self, request, data_type=None, *args, **kwargs):
self.data_type = data_type
super(UploadFileKnownTypeForm, self).__init__(request, *args, **kwargs)
def handle(self, request, data):
log.debug('Uploading file to metadata repository {0}'.format(data))
filename = data['file'].name
data_type = getattr(self, 'data_type', data['data_type'])
try:
filename = data['file'].name
result = metadataclient(request).metadata_admin.upload_file(
data['data_type'], data['file'], filename)
data_type, data['file'], filename)
messages.success(request,
_("File '{filename}' uploaded".format(
filename=filename)))
@ -88,3 +83,16 @@ class UploadFileForm(SelfHandlingForm):
raise forms.ValidationError(_('It is restricted to '
'upload files larger than 5MB.'))
return file
class UploadFileForm(UploadFileKnownTypeForm):
supported_data_types = {
'ui': 'UI Definition (*.yaml)',
'workflows': 'Murano Conductor Workflow (*xml)',
'heat': 'Heat template',
'agent': 'Murano Agent template',
'scripts': 'Script for agent execution'
}
data_type = forms.ChoiceField(label=_('File data type'),
choices=(supported_data_types.items()))

View File

@ -19,7 +19,7 @@ from .views import UploadServiceView
from .views import ComposeServiceView
from .views import ManageServiceView
from .views import ManageFilesView
from .views import UploadFileView
from .views import UploadFileView, UploadFileView2
urlpatterns = patterns(
@ -30,6 +30,10 @@ urlpatterns = patterns(
url(r'^upload_service$', UploadServiceView.as_view(),
name='upload_service'),
url(r'^upload_file/(?P<data_type>[^/]+)$',
UploadFileView2.as_view(),
name='upload_file2'),
url(r'^manage_files/upload_file$', UploadFileView.as_view(),
name='upload_file'),
#This should goes first

View File

@ -13,7 +13,9 @@
# under the License.
import logging
from django.utils.translation import ugettext as _
from django.core.urlresolvers import reverse, reverse_lazy
from .tables import DeleteFile, DownloadFile
from .forms import UploadFileKnownTypeForm
from horizon import tables, workflows, forms
from muranodashboard.environments.services.forms import UpdatableFieldsForm
from muranodashboard.environments.services.fields import TableField
@ -38,6 +40,13 @@ class Action(workflows.Action, UpdatableFieldsForm):
def define_tables(table_name, step_verbose_name):
class UploadFileDataType(tables.LinkAction):
name = 'upload_file2'
verbose_name = step_verbose_name
url = reverse('horizon:murano:service_catalog:upload_file2',
args=(table_name,))
classes = ('ajax-modal', 'btn-create')
class ObjectsTable(tables.DataTable):
file_name = tables.Column('filename', verbose_name=_('File Name'))
path = tables.Column('path', verbose_name=_('Nested Path'))
@ -48,7 +57,8 @@ def define_tables(table_name, step_verbose_name):
class Meta:
name = table_name
verbose_name = step_verbose_name
table_actions = (DeleteFile,
table_actions = (UploadFileDataType,
DeleteFile,
)
row_actions = (DownloadFile,

View File

@ -15,7 +15,7 @@
import logging
from functools import wraps
from django.core.urlresolvers import reverse_lazy
from django.core.urlresolvers import reverse_lazy, reverse
from django.utils.translation import ugettext_lazy as _
from django.utils.datastructures import SortedDict
from horizon import exceptions
@ -26,7 +26,7 @@ from horizon.forms.views import ModalFormView
from .tables import ServiceCatalogTable, MetadataObjectsTable
from .utils import define_tables
from .utils import STEP_NAMES
from .forms import UploadServiceForm, UploadFileForm
from .forms import UploadServiceForm, UploadFileForm, UploadFileKnownTypeForm
from .workflows import ComposeService
from muranodashboard.environments.services.metadata import metadataclient
from metadataclient.common.exceptions import CommunicationError, Unauthorized
@ -136,6 +136,17 @@ class ComposeServiceView(WorkflowView):
exceptions.handle(self.request, msg, redirect)
class UploadFileView2(ModalFormView):
template_name = 'service_catalog/upload_file.html'
form_class = UploadFileKnownTypeForm
success_url = reverse_lazy('horizon:murano:service_catalog:index')
def get_form_kwargs(self):
kwargs = super(UploadFileView2, self).get_form_kwargs()
kwargs.update(self.kwargs)
return kwargs
class UploadFileView(ModalFormView):
form_class = UploadFileForm
template_name = 'service_catalog/upload_file.html'
@ -144,11 +155,18 @@ class UploadFileView(ModalFormView):
class ManageServiceView(tables.MultiTableView):
table_classes = tuple([define_tables(name, step_verbose_name)
for (name, step_verbose_name) in STEP_NAMES])
template_name = 'service_catalog/service_files.html'
failure_url = reverse_lazy('horizon:murano:service_catalog:index')
def __init__(self, *args, **kwargs):
# here we should move table_classes assignment into __init__ method
# because otherwise reverse() call inside define_tables() won't work
# (cannot query URL while they are being populated)
self.table_classes = tuple(
[define_tables(name, step_verbose_name)
for (name, step_verbose_name) in STEP_NAMES])
super(ManageServiceView, self).__init__(*args, **kwargs)
def _get_data(self, full_service_name):
result = []
try: