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 2017/11/02 20:05:56 UTC

[airavata-django-portal] branch master updated: AIRAVATA-2568 App Interface serializer w/ nested inputs/outputs

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

machristie pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/airavata-django-portal.git


The following commit(s) were added to refs/heads/master by this push:
     new d833423  AIRAVATA-2568 App Interface serializer w/ nested inputs/outputs
d833423 is described below

commit d8334235e72c439ee0c7db516d272bea5f416ab2
Author: Marcus Christie <ma...@iu.edu>
AuthorDate: Thu Nov 2 16:05:49 2017 -0400

    AIRAVATA-2568 App Interface serializer w/ nested inputs/outputs
---
 django_airavata/apps/api/serializers.py | 18 +++++++++++++++---
 django_airavata/apps/api/urls.py        |  1 +
 django_airavata/apps/api/views.py       | 20 ++++++++++++++++++++
 3 files changed, 36 insertions(+), 3 deletions(-)

diff --git a/django_airavata/apps/api/serializers.py b/django_airavata/apps/api/serializers.py
index 99c08c8..45af1f1 100644
--- a/django_airavata/apps/api/serializers.py
+++ b/django_airavata/apps/api/serializers.py
@@ -155,16 +155,28 @@ class OutputDataObjectTypeSerializer(serializers.Serializer):
 
 
 class ApplicationInterfaceDescriptionSerializer(serializers.Serializer):
+    applicationInterfaceId = serializers.CharField(required=False)
     applicationName = serializers.CharField(required=False)
     applicationDescription = serializers.CharField(required=False)
     archiveWorkingDirectory = serializers.BooleanField(required=False)
     hasOptionalFileInputs = serializers.BooleanField(required=False)
-    applicationOutputs = serializers.ListField(child=OutputDataObjectTypeSerializer())
-    applicationInputs = serializers.ListField(child=InputDataObjectTypeSerializer())
+    applicationOutputs = OutputDataObjectTypeSerializer(many=True)
+    applicationInputs = InputDataObjectTypeSerializer(many=True)
     applicationModules = serializers.ListField(child=serializers.CharField())
 
     def create(self, validated_data):
-        return ApplicationInterfaceDescription(**validated_data)
+        app_interface = ApplicationInterfaceDescription(**validated_data)
+        app_interface.applicationOutputs = []
+        for app_output in validated_data["applicationOutputs"]:
+            output_serializer = OutputDataObjectTypeSerializer(data=app_output)
+            output_serializer.is_valid(raise_exception=True)
+            app_interface.applicationOutputs.append(output_serializer.create(output_serializer.validated_data))
+        app_interface.applicationInputs = []
+        for app_input in validated_data["applicationInputs"]:
+            input_serializer = InputDataObjectTypeSerializer(data=app_input)
+            input_serializer.is_valid(raise_exception=True)
+            app_interface.applicationInputs.append(input_serializer.create(input_serializer.validated_data))
+        return app_interface
 
     def update(self, instance, validated_data):
         raise Exception("Not implemented")
diff --git a/django_airavata/apps/api/urls.py b/django_airavata/apps/api/urls.py
index 8237b91..bc95836 100644
--- a/django_airavata/apps/api/urls.py
+++ b/django_airavata/apps/api/urls.py
@@ -12,6 +12,7 @@ router = routers.DefaultRouter()
 router.register(r'projects', views.ProjectViewSet, base_name='project')
 router.register(r'new/application/module', views.RegisterApplicationModule, base_name='register_app_module')
 router.register(r'experiments', views.ApplicationList, base_name='experiments')
+router.register(r'application-interface', views.ApplicationInterfaceViewSet, base_name='application-interface')
 
 app_name = 'django_airavata_api'
 urlpatterns = [
diff --git a/django_airavata/apps/api/views.py b/django_airavata/apps/api/views.py
index dc25e8c..1e72668 100644
--- a/django_airavata/apps/api/views.py
+++ b/django_airavata/apps/api/views.py
@@ -274,3 +274,23 @@ class RegisterApplicationDeployments(APIView):
                                                                          app_deployment)
         return Response(response)
 
+class ApplicationInterfaceViewSet(APIBackedViewSet):
+
+    serializer_class = serializers.ApplicationInterfaceDescriptionSerializer
+    lookup_field = 'app_interface_id'
+
+    def get_list(self):
+        return self.request.airavata_client.getAllApplicationInterfaces(self.authz_token, self.gateway_id)
+
+    def get_instance(self, lookup_value):
+        return self.request.airavata_client.getApplicationInterface(self.authz_token, lookup_value)
+
+    def perform_create(self, serializer):
+        application_interface = serializer.save()
+        log.debug("application_interface: {}".format(application_interface))
+        app_interface_id = self.request.airavata_client.registerApplicationInterface(self.authz_token, self.gateway_id, application_interface)
+        application_interface.applicationInterfaceId = app_interface_id
+
+    def perform_update(self, serializer):
+        application_interface = serializer.save()
+        self.request.airavata_client.updateApplicationInterface(self.authz_token, application_interface.applicationInterfaceId, application_interface)

-- 
To stop receiving notification emails like this one, please contact
['"commits@airavata.apache.org" <co...@airavata.apache.org>'].