aboutsummaryrefslogtreecommitdiffstats
path: root/src/workflow/forms.py
diff options
context:
space:
mode:
authorGergely Csatari <gergely.csatari@nokia.com>2023-10-26 10:33:28 +0300
committerGergely Csatari <gergely.csatari@nokia.com>2023-10-26 10:34:28 +0300
commit2ec0d7b9f5c1354977b821c6b06c24a3ffa13142 (patch)
tree6e449d92ddfc880ed007e9d8a8f25bda8fc7cb0f /src/workflow/forms.py
parent0d3dd290aa6e7f39e7b0b3cbe448b6622f924240 (diff)
Removing project content and adding a noteHEADmaster
that the development continues in GitHub Change-Id: I25c58a679dbf92b2367d826429b7cda936bf9f0e Signed-off-by: Gergely Csatari <gergely.csatari@nokia.com>
Diffstat (limited to 'src/workflow/forms.py')
-rw-r--r--src/workflow/forms.py489
1 files changed, 0 insertions, 489 deletions
diff --git a/src/workflow/forms.py b/src/workflow/forms.py
deleted file mode 100644
index 62abad6..0000000
--- a/src/workflow/forms.py
+++ /dev/null
@@ -1,489 +0,0 @@
-##############################################################################
-# Copyright (c) 2018 Sawyer Bergeron, Parker Berberian, and others.
-# Copyright (c) 2020 Sawyer Bergeron, Sean Smith, and others.
-#
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Apache License, Version 2.0
-# which accompanies this distribution, and is available at
-# http://www.apache.org/licenses/LICENSE-2.0
-##############################################################################
-
-
-import django.forms as forms
-from django.forms import widgets, ValidationError
-from django.utils.safestring import mark_safe
-from django.template.loader import render_to_string
-from django.forms.widgets import NumberInput
-
-import json
-import urllib
-
-from account.models import Lab
-from account.models import UserProfile
-from resource_inventory.models import (
- OPNFVRole,
- Installer,
- Scenario
-)
-from resource_inventory.resource_manager import ResourceManager
-from booking.lib import get_user_items, get_user_field_opts
-
-
-class SearchableSelectMultipleWidget(widgets.SelectMultiple):
- template_name = 'dashboard/searchable_select_multiple.html'
-
- def __init__(self, attrs=None):
- self.items = attrs['items']
- self.show_from_noentry = attrs['show_from_noentry']
- self.show_x_results = attrs['show_x_results']
- self.results_scrollable = attrs['results_scrollable']
- self.selectable_limit = attrs['selectable_limit']
- self.placeholder = attrs['placeholder']
- self.name = attrs['name']
- self.initial = attrs.get("initial", [])
-
- super(SearchableSelectMultipleWidget, self).__init__()
-
- def render(self, name, value, attrs=None, renderer=None):
-
- context = self.get_context(attrs)
- return mark_safe(render_to_string(self.template_name, context))
-
- def get_context(self, attrs):
- return {
- 'items': self.items,
- 'name': self.name,
- 'show_from_noentry': self.show_from_noentry,
- 'show_x_results': self.show_x_results,
- 'results_scrollable': self.results_scrollable,
- 'selectable_limit': self.selectable_limit,
- 'placeholder': self.placeholder,
- 'initial': self.initial,
- }
-
-
-class SearchableSelectMultipleField(forms.Field):
- def __init__(self, *args, required=True, widget=None, label=None, disabled=False,
- items=None, queryset=None, show_from_noentry=True, show_x_results=-1,
- results_scrollable=False, selectable_limit=-1, placeholder="search here",
- name="searchable_select", initial=[], **kwargs):
- """
- From the documentation.
-
- # required -- Boolean that specifies whether the field is required.
- # True by default.
- # widget -- A Widget class, or instance of a Widget class, that should
- # be used for this Field when displaying it. Each Field has a
- # default Widget that it'll use if you don't specify this. In
- # most cases, the default widget is TextInput.
- # label -- A verbose name for this field, for use in displaying this
- # field in a form. By default, Django will use a "pretty"
- # version of the form field name, if the Field is part of a
- # Form.
- # initial -- A value to use in this Field's initial display. This value
- # is *not* used as a fallback if data isn't given.
- # help_text -- An optional string to use as "help text" for this Field.
- # error_messages -- An optional dictionary to override the default
- # messages that the field will raise.
- # show_hidden_initial -- Boolean that specifies if it is needed to render a
- # hidden widget with initial value after widget.
- # validators -- List of additional validators to use
- # localize -- Boolean that specifies if the field should be localized.
- # disabled -- Boolean that specifies whether the field is disabled, that
- # is its widget is shown in the form but not editable.
- # label_suffix -- Suffix to be added to the label. Overrides
- # form's label_suffix.
- """
- self.widget = widget
- if self.widget is None:
- self.widget = SearchableSelectMultipleWidget(
- attrs={
- 'items': items,
- 'initial': [obj.id for obj in initial],
- 'show_from_noentry': show_from_noentry,
- 'show_x_results': show_x_results,
- 'results_scrollable': results_scrollable,
- 'selectable_limit': selectable_limit,
- 'placeholder': placeholder,
- 'name': name,
- 'disabled': disabled
- }
- )
- self.disabled = disabled
- self.queryset = queryset
- self.selectable_limit = selectable_limit
-
- super().__init__(disabled=disabled, **kwargs)
-
- self.required = required
-
- def clean(self, data):
- data = data[0]
- if not data:
- if self.required:
- raise ValidationError("Nothing was selected")
- else:
- return []
- try:
- data_as_list = json.loads(data)
- except json.decoder.JSONDecodeError:
- data_as_list = None
- if not data_as_list:
- raise ValidationError("Contents Not JSON")
- if self.selectable_limit != -1:
- if len(data_as_list) > self.selectable_limit:
- raise ValidationError("Too many items were selected")
-
- items = []
- for elem in data_as_list:
- items.append(self.queryset.get(id=elem))
-
- return items
-
-
-class SearchableSelectAbstractForm(forms.Form):
- def __init__(self, *args, queryset=None, initial=[], **kwargs):
- self.queryset = queryset
- items = self.generate_items(self.queryset)
- options = self.generate_options()
-
- super(SearchableSelectAbstractForm, self).__init__(*args, **kwargs)
- self.fields['searchable_select'] = SearchableSelectMultipleField(
- initial=initial,
- items=items,
- queryset=self.queryset,
- **options
- )
-
- def get_validated_bundle(self):
- bundles = self.cleaned_data['searchable_select']
- if len(bundles) < 1: # don't need to check for >1, as field does that for us
- raise ValidationError("No bundle was selected")
- return bundles[0]
-
- def generate_items(self, queryset):
- raise Exception("SearchableSelectAbstractForm does not implement concrete generate_items()")
-
- def generate_options(self, disabled=False):
- return {
- 'show_from_noentry': True,
- 'show_x_results': -1,
- 'results_scrollable': True,
- 'selectable_limit': 1,
- 'placeholder': 'Search for a Bundle',
- 'name': 'searchable_select',
- 'disabled': False
- }
-
-
-class SWConfigSelectorForm(SearchableSelectAbstractForm):
- def generate_items(self, queryset):
- items = {}
-
- for bundle in queryset:
- items[bundle.id] = {
- 'expanded_name': bundle.name,
- 'small_name': bundle.owner.username,
- 'string': bundle.description,
- 'id': bundle.id
- }
-
- return items
-
-
-class OPNFVSelectForm(SearchableSelectAbstractForm):
- def generate_items(self, queryset):
- items = {}
-
- for config in queryset:
- items[config.id] = {
- 'expanded_name': config.name,
- 'small_name': config.bundle.owner.username,
- 'string': config.description,
- 'id': config.id
- }
-
- return items
-
-
-class ResourceSelectorForm(SearchableSelectAbstractForm):
- def generate_items(self, queryset):
- items = {}
-
- for bundle in queryset:
- items[bundle.id] = {
- 'expanded_name': bundle.name,
- 'small_name': bundle.owner.username,
- 'string': bundle.description,
- 'id': bundle.id
- }
-
- return items
-
-
-class BookingMetaForm(forms.Form):
- # Django Form class for Book a Pod
- length = forms.IntegerField(
- widget=NumberInput(
- attrs={
- "type": "range",
- 'min': "1",
- "max": "21",
- "value": "1"
- }
- )
- )
- purpose = forms.CharField(max_length=1000)
- project = forms.CharField(max_length=400)
- info_file = forms.CharField(max_length=1000, required=False)
- deploy_opnfv = forms.BooleanField(required=False)
-
- def __init__(self, *args, user_initial=[], owner=None, **kwargs):
- super(BookingMetaForm, self).__init__(**kwargs)
-
- self.fields['users'] = SearchableSelectMultipleField(
- queryset=UserProfile.objects.select_related('user').exclude(user=owner),
- initial=user_initial,
- items=get_user_items(exclude=owner),
- required=False,
- **get_user_field_opts()
- )
-
-
-class MultipleSelectFilterWidget(forms.Widget):
- def __init__(self, *args, display_objects=None, filter_items=None, neighbors=None, **kwargs):
- super(MultipleSelectFilterWidget, self).__init__(*args, **kwargs)
- self.display_objects = display_objects
- self.filter_items = filter_items
- self.neighbors = neighbors
- self.template_name = "dashboard/multiple_select_filter_widget.html"
-
- def render(self, name, value, attrs=None, renderer=None):
- context = self.get_context(name, value, attrs)
- html = render_to_string(self.template_name, context=context)
- return mark_safe(html)
-
- def get_context(self, name, value, attrs):
- return {
- 'display_objects': self.display_objects,
- 'neighbors': self.neighbors,
- 'filter_items': self.filter_items,
- 'initial_value': value
- }
-
-
-class MultipleSelectFilterField(forms.Field):
-
- def __init__(self, **kwargs):
- self.initial = kwargs.get("initial")
- super().__init__(**kwargs)
-
- def to_python(self, value):
- try:
- return json.loads(value)
- except json.decoder.JSONDecodeError:
- pass
- raise ValidationError("content is not valid JSON")
-
-
-class FormUtils:
- @staticmethod
- def getLabData(multiple_hosts=False, user=None):
- """
- Get all labs and thier host profiles, returns a serialized version the form can understand.
-
- Could be rewritten with a related query to make it faster
- """
- # javascript truthy variables
- true = 1
- false = 0
- if multiple_hosts:
- multiple_hosts = true
- else:
- multiple_hosts = false
- labs = {}
- resources = {}
- items = {}
- neighbors = {}
- for lab in Lab.objects.all():
- lab_node = {
- 'id': "lab_" + str(lab.lab_user.id),
- 'model_id': lab.lab_user.id,
- 'name': lab.name,
- 'description': lab.description,
- 'selected': false,
- 'selectable': true,
- 'follow': multiple_hosts,
- 'multiple': false,
- 'class': 'lab',
- 'available_resources': json.dumps(lab.get_available_resources())
- }
-
- items[lab_node['id']] = lab_node
- neighbors[lab_node['id']] = []
- labs[lab_node['id']] = lab_node
-
- for template in ResourceManager.getInstance().getAvailableResourceTemplates(lab, user):
- resource_node = {
- 'form': {"name": "host_name", "type": "text", "placeholder": "hostname"},
- 'id': "resource_" + str(template.id),
- 'model_id': template.id,
- 'name': template.name,
- 'description': template.description,
- 'selected': false,
- 'selectable': true,
- 'follow': false,
- 'multiple': multiple_hosts,
- 'class': 'resource',
- 'required_resources': json.dumps(template.get_required_resources())
- }
-
- if multiple_hosts:
- resource_node['values'] = [] # place to store multiple values
-
- items[resource_node['id']] = resource_node
- neighbors[lab_node['id']].append(resource_node['id'])
-
- if resource_node['id'] not in neighbors:
- neighbors[resource_node['id']] = []
-
- neighbors[resource_node['id']].append(lab_node['id'])
- resources[resource_node['id']] = resource_node
-
- display_objects = [("lab", labs.values()), ("resource", resources.values())]
-
- context = {
- 'display_objects': display_objects,
- 'neighbors': neighbors,
- 'filter_items': items
- }
-
- return context
-
-
-class HardwareDefinitionForm(forms.Form):
-
- def __init__(self, user, *args, **kwargs):
- super(HardwareDefinitionForm, self).__init__(*args, **kwargs)
- attrs = FormUtils.getLabData(multiple_hosts=True, user=user)
- self.fields['filter_field'] = MultipleSelectFilterField(
- widget=MultipleSelectFilterWidget(**attrs)
- )
-
-
-class PodDefinitionForm(forms.Form):
-
- fields = ["xml"]
- xml = forms.CharField()
-
-
-class ResourceMetaForm(forms.Form):
-
- bundle_name = forms.CharField(label="POD Name")
- bundle_description = forms.CharField(label="POD Description", widget=forms.Textarea, max_length=1000)
-
-
-class GenericHostMetaForm(forms.Form):
-
- host_profile = forms.CharField(label="Host Type", disabled=True, required=False)
- host_name = forms.CharField(label="Host Name")
-
-
-class NetworkDefinitionForm(forms.Form):
- def __init__(self, *args, **kwargs):
- super(NetworkDefinitionForm, self).__init__(**kwargs)
-
-
-class NetworkConfigurationForm(forms.Form):
- def __init__(self, *args, **kwargs):
- super(NetworkConfigurationForm).__init__(**kwargs)
-
-
-class HostSoftwareDefinitionForm(forms.Form):
- # Django Form class for Design a Pod
- host_name = forms.CharField(
- max_length=200,
- disabled=False,
- required=True
- )
- headnode = forms.BooleanField(required=False, widget=forms.HiddenInput)
-
- def __init__(self, *args, **kwargs):
- imageQS = kwargs.pop("imageQS")
- super(HostSoftwareDefinitionForm, self).__init__(*args, **kwargs)
- self.fields['image'] = forms.ModelChoiceField(queryset=imageQS)
-
-
-class WorkflowSelectionForm(forms.Form):
- fields = ['workflow']
-
- empty_permitted = False
-
- workflow = forms.ChoiceField(
- choices=(
- (0, 'Booking'),
- (1, 'Resource Bundle'),
- (2, 'Software Configuration')
- ),
- label="Choose Workflow",
- initial='booking',
- required=True
- )
-
-
-class SnapshotHostSelectForm(forms.Form):
- host = forms.CharField()
-
-
-class BasicMetaForm(forms.Form):
- name = forms.CharField()
- description = forms.CharField(widget=forms.Textarea)
-
-
-class ConfirmationForm(forms.Form):
- fields = ['confirm']
-
- confirm = forms.ChoiceField(
- choices=(
- (False, "Cancel"),
- (True, "Confirm")
- )
- )
-
-
-def validate_step(value):
- if value not in ["prev", "next", "current"]:
- raise ValidationError(str(value) + " is not allowed")
-
-
-def validate_step_form(value):
- try:
- urllib.parse.unquote_plus(value)
- except Exception:
- raise ValidationError("Value is not url encoded data")
-
-
-class ManagerForm(forms.Form):
- step = forms.CharField(widget=forms.widgets.HiddenInput, validators=[validate_step])
- step_form = forms.CharField(widget=forms.widgets.HiddenInput, validators=[validate_step_form])
- # other fields?
-
-
-class OPNFVSelectionForm(forms.Form):
- installer = forms.ModelChoiceField(queryset=Installer.objects.all(), required=True)
- scenario = forms.ModelChoiceField(queryset=Scenario.objects.all(), required=True)
-
-
-class OPNFVNetworkRoleForm(forms.Form):
- role = forms.CharField(max_length=200, disabled=True, required=False)
-
- def __init__(self, *args, config_bundle, **kwargs):
- super(OPNFVNetworkRoleForm, self).__init__(*args, **kwargs)
- self.fields['network'] = forms.ModelChoiceField(
- queryset=config_bundle.bundle.networks.all()
- )
-
-
-class OPNFVHostRoleForm(forms.Form):
- host_name = forms.CharField(max_length=200, disabled=True, required=False)
- role = forms.ModelChoiceField(queryset=OPNFVRole.objects.all().order_by("name").distinct("name"))