WIP: applications: add possibility to define parameters (#76463) #32
|
@ -0,0 +1,38 @@
|
|||
# Generated by Django 3.2.16 on 2023-04-10 08:12
|
||||
|
||||
import django.db.models.deletion
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
dependencies = [
|
||||
('applications', '0011_element_type'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='Parameter',
|
||||
fields=[
|
||||
(
|
||||
'id',
|
||||
models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
|
||||
),
|
||||
('label', models.CharField(max_length=100, verbose_name='Label')),
|
||||
(
|
||||
'name',
|
||||
models.CharField(
|
||||
help_text='Variable name, it is useful to prefix it with an unique application identifier.',
|
||||
max_length=100,
|
||||
verbose_name='Identifier',
|
||||
),
|
||||
),
|
||||
('default_value', models.CharField(blank=True, max_length=100, verbose_name='Default value')),
|
||||
(
|
||||
'application',
|
||||
models.ForeignKey(
|
||||
on_delete=django.db.models.deletion.CASCADE, to='applications.application'
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
]
|
|
@ -181,6 +181,20 @@ class Application(models.Model):
|
|||
return elements
|
||||
|
||||
|
||||
class Parameter(models.Model):
|
||||
application = models.ForeignKey(Application, on_delete=models.CASCADE)
|
||||
label = models.CharField(max_length=100, verbose_name=_('Label'))
|
||||
name = models.CharField(
|
||||
max_length=100,
|
||||
verbose_name=_('Identifier'),
|
||||
help_text=_('Variable name, it is useful to prefix it with an unique application identifier.'),
|
||||
)
|
||||
default_value = models.CharField(max_length=100, verbose_name=_('Default value'), blank=True)
|
||||
|
||||
def as_dict(self):
|
||||
return {'label': self.label, 'name': self.name, 'default_value': self.default_value}
|
||||
|
||||
|
||||
class Element(models.Model):
|
||||
type = models.CharField(max_length=100, verbose_name=_('Type'))
|
||||
slug = models.SlugField(max_length=500, verbose_name=_('Slug'))
|
||||
|
@ -255,6 +269,7 @@ class Version(models.Model):
|
|||
'version_number': self.number,
|
||||
'version_notes': self.notes,
|
||||
'elements': [],
|
||||
'parameters': [x.as_dict() for x in self.application.parameter_set.all()],
|
||||
}
|
||||
|
||||
for element, relation in elements.values():
|
||||
|
|
|
@ -75,6 +75,22 @@
|
|||
<a class="button button-paragraph" rel="popup" href="{% url 'application-add-element' app_slug=app.slug type=type.id %}">{{ type.text }}</a>
|
||||
{% endfor %}
|
||||
{% endfor %}
|
||||
<h3>{% trans "Parameters" %}
|
||||
{% if app.editable %}
|
||||
<a rel="popup" href="{% url 'application-add-parameter' app_slug=app.slug %}">({% trans "add" %})</a>
|
||||
{% endif %}
|
||||
</h3>
|
||||
{% if app.parameter_set.exists %}
|
||||
<ul class="objects-list single-links">
|
||||
{% for parameter in app.parameter_set.all %}
|
||||
<li><a rel="popup" href="{% url 'application-edit-parameter' app_slug=app.slug pk=parameter.id %}">{{ parameter.label }}</a>
|
||||
<a rel="popup" class="delete" href="{% url 'application-delete-parameter' app_slug=app.slug pk=parameter.id %}">{% trans "remove" %}</a>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% else %}
|
||||
<p>{% trans "No parameters defined." %}</p>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
</aside>
|
||||
{% endblock %}
|
||||
|
|
|
@ -0,0 +1,17 @@
|
|||
{% extends "hobo/applications/home.html" %}
|
||||
{% load gadjo i18n %}
|
||||
|
||||
{% block appbar %}
|
||||
<h2>{% trans "New Parameter" %}</h2>
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<form method="post">
|
||||
{% csrf_token %}
|
||||
{{ form|with_template }}
|
||||
<div class="buttons">
|
||||
<button class="submit-button">{% trans "Add" %}</button>
|
||||
<a class="cancel" href="..">{% trans "Cancel" %}</a>
|
||||
</div>
|
||||
</form>
|
||||
{% endblock %}
|
|
@ -0,0 +1,20 @@
|
|||
{% extends "hobo/applications/home.html" %}
|
||||
{% load gadjo i18n %}
|
||||
|
||||
{% block appbar %}
|
||||
<h2>{% trans "Delete Parameter" %}</h2>
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<form method="post">
|
||||
{% csrf_token %}
|
||||
<p>
|
||||
{% trans 'Are you sure you want to remove this parameter?' %}
|
||||
</p>
|
||||
<div class="buttons">
|
||||
<button class="delete-button">{% trans "Delete" %}</button>
|
||||
<a class="cancel" href="..">{% trans "Cancel" %}</a>
|
||||
</div>
|
||||
</form>
|
||||
{% endblock %}
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
{% extends "hobo/applications/home.html" %}
|
||||
{% load gadjo i18n %}
|
||||
|
||||
{% block appbar %}
|
||||
<h2>{% trans "Edit Parameter" %}</h2>
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<form method="post">
|
||||
{% csrf_token %}
|
||||
{{ form|with_template }}
|
||||
<div class="buttons">
|
||||
<button class="submit-button">{% trans "Save" %}</button>
|
||||
<a class="cancel" href="..">{% trans "Cancel" %}</a>
|
||||
</div>
|
||||
</form>
|
||||
{% endblock %}
|
|
@ -45,6 +45,21 @@ urlpatterns = [
|
|||
views.delete_element,
|
||||
name='application-delete-element',
|
||||
),
|
||||
re_path(
|
||||
r'^manifest/(?P<app_slug>[\w-]+)/add-parameter/$',
|
||||
views.add_parameter,
|
||||
name='application-add-parameter',
|
||||
),
|
||||
re_path(
|
||||
r'^manifest/(?P<app_slug>[\w-]+)/edit-parameter/(?P<pk>\d+)/$',
|
||||
views.edit_parameter,
|
||||
name='application-edit-parameter',
|
||||
),
|
||||
re_path(
|
||||
r'^manifest/(?P<app_slug>[\w-]+)/delete-parameter/(?P<pk>\d+)/$',
|
||||
views.delete_parameter,
|
||||
name='application-delete-parameter',
|
||||
),
|
||||
re_path(
|
||||
r'^manifest/(?P<app_slug>[\w-]+)/job/(?P<pk>\d+)/$',
|
||||
views.async_job,
|
||||
|
|
|
@ -31,7 +31,16 @@ from django.views.generic import DetailView, FormView, ListView, TemplateView
|
|||
from django.views.generic.edit import CreateView, DeleteView, UpdateView
|
||||
|
||||
from .forms import GenerateForm, InstallForm, MetadataForm
|
||||
from .models import STATUS_CHOICES, Application, AsyncJob, Element, Relation, Version, get_object_types
|
||||
from .models import (
|
||||
STATUS_CHOICES,
|
||||
Application,
|
||||
AsyncJob,
|
||||
Element,
|
||||
Parameter,
|
||||
Relation,
|
||||
Version,
|
||||
get_object_types,
|
||||
)
|
||||
from .utils import Requests
|
||||
|
||||
requests = Requests()
|
||||
|
@ -428,3 +437,42 @@ class AsyncJobView(DetailView):
|
|||
|
||||
|
||||
async_job = AsyncJobView.as_view()
|
||||
|
||||
|
||||
class AddParameterView(CreateView):
|
||||
template_name = 'hobo/applications/parameter-add.html'
|
||||
model = Parameter
|
||||
fields = ['label', 'name', 'default_value']
|
||||
|
||||
def form_valid(self, form):
|
||||
form.instance.application = Application.objects.get(slug=self.kwargs['app_slug'])
|
||||
return super().form_valid(form)
|
||||
|
||||
def get_success_url(self):
|
||||
return reverse('application-manifest', kwargs={'app_slug': self.kwargs['app_slug']})
|
||||
|
||||
|
||||
add_parameter = AddParameterView.as_view()
|
||||
|
||||
|
||||
class EditParameterView(UpdateView):
|
||||
template_name = 'hobo/applications/parameter-edit.html'
|
||||
model = Parameter
|
||||
fields = ['label', 'name', 'default_value']
|
||||
|
||||
def get_success_url(self):
|
||||
return reverse('application-manifest', kwargs={'app_slug': self.kwargs['app_slug']})
|
||||
|
||||
|
||||
edit_parameter = EditParameterView.as_view()
|
||||
|
||||
|
||||
class DeleteParameterView(DeleteView):
|
||||
template_name = 'hobo/applications/parameter-confirm-delete.html'
|
||||
model = Parameter
|
||||
|
||||
def get_success_url(self):
|
||||
return reverse('application-manifest', kwargs={'app_slug': self.kwargs['app_slug']})
|
||||
|
||||
|
||||
delete_parameter = DeleteParameterView.as_view()
|
||||
|
|
Loading…
Reference in New Issue