Add Upload_file for known data_type in ManageService View

Change-Id: Ia7cf163a8df52f41596ea87cad67ed0f73f2005d
This commit is contained in:
Ekaterina Fedorova 2013-11-28 17:06:57 +04:00
parent 8d7403edb2
commit b1e38556f9
7 changed files with 107 additions and 17 deletions

View File

@ -53,28 +53,37 @@ class UploadFileKnownTypeForm(SelfHandlingForm):
error_messages=
{'required': _('There is no file to upload')})
def __init__(self, request, data_type=None, *args, **kwargs):
def __init__(self, request,
data_type=None,
full_service_name=None,
*args, **kwargs):
self.data_type = data_type
self.service_id = full_service_name
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'])
log.debug('Uploading file to metadata repository {0} and assiging'
' it to {1} service'.format(filename, self.service_id))
try:
result = metadataclient(request).metadata_admin.upload_file(
data_type, data['file'], filename)
result = metadataclient(request).metadata_admin.\
upload_file_to_service(self.data_type,
data['file'],
filename,
self.service_id)
messages.success(request,
_("File '{filename}' uploaded".format(
filename=filename)))
return result
except HTTPException as e:
redirect = reverse('horizon:murano:service_catalog:manage_files')
redirect = reverse('horizon:murano:service_catalog:manage_service',
args=(self.service_id,))
log.exception(e)
exceptions.handle(request,
_("Unable to upload {0} file of '{1}' "
"type".format(filename, data['data_type'])),
redirect=redirect)
msg = _("Unable to upload {0} file of '{1}' type."
" Error code: {2}".format(filename,
self.data_type,
e.code))
exceptions.handle(request, msg, redirect=redirect)
def clean_file(self):
file = self.cleaned_data.get('file')
@ -96,3 +105,23 @@ class UploadFileForm(UploadFileKnownTypeForm):
data_type = forms.ChoiceField(label=_('File data type'),
choices=(supported_data_types.items()))
def handle(self, request, data):
log.debug('Uploading file to metadata repository {0}'.format(data))
filename = data['file'].name
data_type = data['data_type']
try:
result = metadataclient(request).metadata_admin.\
upload_file(data_type, data['file'], filename)
messages.success(request,
_("File '{filename}' uploaded".format(
filename=filename)))
return result
except HTTPException as e:
redirect = reverse('horizon:murano:service_catalog:manage_files')
log.exception(e)
msg = _("Unable to upload {0} file of '{1}' type."
" Error code: {2}".format(filename,
self.data_type,
e.code))
exceptions.handle(request, msg, redirect=redirect)

View File

@ -30,14 +30,14 @@ urlpatterns = patterns(
url(r'^upload_service$', UploadServiceView.as_view(),
name='upload_service'),
url(r'^upload_file/(?P<data_type>[^/]+)$',
url(r'^upload_file/(?P<data_type>[^/]+)/(?P<full_service_name>[^/]+)$',
UploadFileView2.as_view(),
name='upload_file2'),
url(r'^manage_files/upload_file$', UploadFileView.as_view(),
name='upload_file'),
#This should goes first
url(r'^manage_files/(?P<full_service_name>[^/]+)?$',
url(r'^manage_service/(?P<full_service_name>[^/]+)?$',
ManageServiceView.as_view(),
name='manage_service'),

View File

@ -43,8 +43,7 @@ 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,))
url = None
classes = ('ajax-modal', 'btn-create')
class ObjectsTable(tables.DataTable):

View File

@ -137,15 +137,25 @@ class ComposeServiceView(WorkflowView):
class UploadFileView2(ModalFormView):
template_name = 'service_catalog/upload_file.html'
template_name = 'service_catalog/upload_file2.html'
form_class = UploadFileKnownTypeForm
success_url = reverse_lazy('horizon:murano:service_catalog:index')
success_url = 'horizon:murano:service_catalog:manage_service'
def get_success_url(self):
return reverse(self.success_url,
args=(self.kwargs['full_service_name'],))
def get_form_kwargs(self):
kwargs = super(UploadFileView2, self).get_form_kwargs()
kwargs.update(self.kwargs)
return kwargs
def get_context_data(self, **kwargs):
context = super(UploadFileView2, self).get_context_data(**kwargs)
context['data_type'] = self.kwargs['data_type']
context['service_id'] = self.kwargs['full_service_name']
return context
class UploadFileView(ModalFormView):
form_class = UploadFileForm
@ -158,6 +168,17 @@ class ManageServiceView(tables.MultiTableView):
template_name = 'service_catalog/service_files.html'
failure_url = reverse_lazy('horizon:murano:service_catalog:index')
def dispatch(self, request, *args, **kwargs):
service_id = kwargs['full_service_name']
for table in self.table_classes:
data_type = table._meta.name
table.base_actions['upload_file2'].url = \
reverse('horizon:murano:service_catalog:upload_file2',
args=(data_type, service_id,))
return super(ManageServiceView, self).dispatch(request,
*args,
**kwargs)
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

View File

@ -17,8 +17,9 @@
</div>
<div class='right'>
<h3>{% trans 'Description:' %}</h3>
<p>{% blocktrans %} Select one of supported metadata type{% endblocktrans %}</p>
<p>{% blocktrans %} Choose file to upload{% endblocktrans %}</p>
<p>{% blocktrans %} Select one of supported metadata type{% endblocktrans %}</p>
</div>
{% endblock %}

View File

@ -0,0 +1,29 @@
{% extends 'common/_modal_form.html' %}
{% load i18n %}
{% load url from future %}
{% block form_id %}upload_file_form2{% endblock %}
{% block form_attrs %}enctype='multipart/form-data'{% endblock %}
{% block form_action %}{% url 'horizon:murano:service_catalog:upload_file2' data_type service_id%}{% endblock %}
{% block modal-header %}{% trans 'Upload File To Metadata Repository' %}{% endblock %}
{% block modal_id %}upload_file_modal{% endblock %}
{% block modal-body %}
<div class='left'>
<fieldset>
{% include 'horizon/common/_form_fields.html' %}
</fieldset>
</div>
<div class='right'>
<h3>{% trans 'Description:' %}</h3>
<p>{% blocktrans %} Choose file to upload. {% endblocktrans %}</p>
<p>It will be added to {{ data_type }} files to the particular service</p>
</div>
{% endblock %}
{% block modal-footer %}
<input class='btn btn-primary pull-right' type='submit' value='{% trans 'Upload' %}' />
<a href="{% url 'horizon:murano:service_catalog:upload_file2' data_type service_id%}" class="btn secondary cancel close">{% trans "Cancel" %}</a>
{% endblock %}

View File

@ -0,0 +1,11 @@
{% extends 'base.html' %}
{% load i18n %}
{% block title %}{% trans 'Upload File To Murano Repository' %}{% endblock %}
{% block page_header %}
{% include 'horizon/common/_page_header.html' with title=_('Upload File To Murano Repository') %}
{% endblock page_header %}
{% block main %}
{% include 'service_catalog/_upload_file2.html' %}
{% endblock %}