You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by ma...@apache.org on 2020/01/09 17:28:51 UTC

[airavata-django-portal] 01/01: AIRAVATA-3276 Automatically add showOptions for managing isRequired

This is an automated email from the ASF dual-hosted git repository.

machristie pushed a commit to branch AIRAVATA-3276--BUG--non-uploaded-files-argument-appears-in-command-line-in-job-script
in repository https://gitbox.apache.org/repos/asf/airavata-django-portal.git

commit 01195f091273acf862c01b6e29cd3b3c00e3cacc
Author: Marcus Christie <ma...@apache.org>
AuthorDate: Thu Jan 9 12:24:02 2020 -0500

    AIRAVATA-3276 Automatically add showOptions for managing isRequired
---
 .../js/models/InputDataObjectType.js                  |  8 ++++++++
 django_airavata/apps/api/views.py                     | 19 ++++++++++++++++++-
 2 files changed, 26 insertions(+), 1 deletion(-)

diff --git a/django_airavata/apps/api/static/django_airavata_api/js/models/InputDataObjectType.js b/django_airavata/apps/api/static/django_airavata_api/js/models/InputDataObjectType.js
index 9149d2e..d758773 100644
--- a/django_airavata/apps/api/static/django_airavata_api/js/models/InputDataObjectType.js
+++ b/django_airavata/apps/api/static/django_airavata_api/js/models/InputDataObjectType.js
@@ -242,11 +242,19 @@ export default class InputDataObjectType extends BaseModel {
           this.editorDependencies.show
         );
         if ("showOptions" in this.editorDependencies) {
+          // AIRAVATA-3276 For backwards compatibility, can be removed after
+          // data migration
           if ("toggle" in this.editorDependencies.showOptions) {
             this.editorDependencies.showOptions.toggle.forEach(prop => {
               this[prop] = this.show;
             });
           }
+          if (
+            "isRequired" in this.editorDependencies.showOptions &&
+            this.editorDependencies.showOptions.isRequired
+          ) {
+            this.isRequired = this.show;
+          }
         }
       }
     }
diff --git a/django_airavata/apps/api/views.py b/django_airavata/apps/api/views.py
index 007c4ba..174d3b1 100644
--- a/django_airavata/apps/api/views.py
+++ b/django_airavata/apps/api/views.py
@@ -664,6 +664,7 @@ class ApplicationInterfaceViewSet(APIBackedViewSet):
 
     def perform_create(self, serializer):
         application_interface = serializer.save()
+        self._update_input_metadata(application_interface)
         log.debug("application_interface: {}".format(application_interface))
         app_interface_id = self.request.airavata_client.registerApplicationInterface(
             self.authz_token, self.gateway_id, application_interface)
@@ -671,6 +672,7 @@ class ApplicationInterfaceViewSet(APIBackedViewSet):
 
     def perform_update(self, serializer):
         application_interface = serializer.save()
+        self._update_input_metadata(application_interface)
         self.request.airavata_client.updateApplicationInterface(
             self.authz_token,
             application_interface.applicationInterfaceId,
@@ -680,6 +682,21 @@ class ApplicationInterfaceViewSet(APIBackedViewSet):
         self.request.airavata_client.deleteApplicationInterface(
             self.authz_token, instance.applicationInterfaceId)
 
+    def _update_input_metadata(self, app_interface):
+        for app_input in app_interface.applicationInputs:
+            if app_input.metaData:
+                metadata = json.loads(app_input.metaData)
+                # Automatically add {showOptions: {isRequired: true/false}} to
+                # toggle isRequired on hidden/shown inputs
+                if ("editor" in metadata and
+                    "dependencies" in metadata["editor"] and
+                        "show" in metadata["editor"]["dependencies"]):
+                    if "showOptions" not in metadata["editor"]["dependencies"]:
+                        metadata["editor"]["dependencies"]["showOptions"] = {}
+                    o = metadata["editor"]["dependencies"]["showOptions"]
+                    o["isRequired"] = app_input.isRequired
+                    app_input.metaData = json.dumps(metadata)
+
     @detail_route()
     def compute_resources(self, request, app_interface_id):
         compute_resources = request.airavata_client.getAvailableAppInterfaceComputeResources(
@@ -950,7 +967,7 @@ def tus_upload_finish(request):
         serializer = serializers.DataProductSerializer(
             data_product, context={'request': request})
         return JsonResponse({'uploaded': True,
-                            'data-product': serializer.data})
+                             'data-product': serializer.data})
     except Exception as e:
         return exceptions.generic_json_exception_response(e, status=400)