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/12/15 14:46:04 UTC
[airavata-django-portal] 02/02: AIRAVATA-2598 Load queues for
deployment with deployment default values
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
commit 373cb6146e8ff4b313cfe395cada4f044669197a
Author: Marcus Christie <ma...@iu.edu>
AuthorDate: Fri Dec 15 09:45:55 2017 -0500
AIRAVATA-2598 Load queues for deployment with deployment default values
---
django_airavata/apps/api/serializers.py | 35 ++++++++--------------------
django_airavata/apps/api/urls.py | 1 +
django_airavata/apps/api/views.py | 41 +++++++++++++++++++++++++++++++++
thrift_django_serializer.py | 5 +++-
4 files changed, 56 insertions(+), 26 deletions(-)
diff --git a/django_airavata/apps/api/serializers.py b/django_airavata/apps/api/serializers.py
index cf9c2b2..9f7a583 100644
--- a/django_airavata/apps/api/serializers.py
+++ b/django_airavata/apps/api/serializers.py
@@ -7,6 +7,9 @@ from airavata.model.application.io.ttypes import InputDataObjectType, OutputData
from airavata.model.experiment.ttypes import ExperimentModel
from airavata.model.workspace.ttypes import Project
from airavata.model.appcatalog.appdeployment.ttypes import ApplicationModule
+from airavata.model.appcatalog.computeresource.ttypes import BatchQueue
+import thrift_django_serializer
+
from django.conf import settings
from rest_framework import serializers
@@ -224,31 +227,10 @@ class SetEnvPathsSerializer(CustomSerializer):
raise Exception("Not implemented")
-class ApplicationDeploymentDescriptionSerializer(CustomSerializer):
- appModuleId = serializers.CharField(required=False)
- computeHostId = serializers.CharField(required=False)
- executablePath = serializers.CharField(required=False)
- parallelism = serializers.IntegerField(required=False)
- appDeploymentDescription = serializers.CharField(required=False)
- moduleLoadCmds = serializers.ListSerializer(child=CommandObjectSerializer())
- libPrependPaths = serializers.ListSerializer(child=SetEnvPathsSerializer())
- libAppendPaths = serializers.ListSerializer(child=SetEnvPathsSerializer())
- setEnvironment = serializers.ListSerializer(child=SetEnvPathsSerializer())
- preJobCommands = serializers.ListSerializer(child=CommandObjectSerializer())
- postJobCommands = serializers.ListSerializer(child=CommandObjectSerializer())
- defaultQueueName = serializers.CharField(required=False)
- defaultNodeCount = serializers.IntegerField(required=False)
- defaultCPUCount = serializers.IntegerField(required=False)
- defaultWalltime = serializers.IntegerField(required=False)
- editableByUser = serializers.BooleanField(required=False)
-
- def create(self, validated_data):
- params=self.process_list_fields(validated_data)
- return ApplicationDeploymentDescription(**params)
-
- def update(self, instance, validated_data):
- raise Exception("Not Implemented")
-
+class ApplicationDeploymentDescriptionSerializer(thrift_django_serializer.create_serializer_class(ApplicationDeploymentDescription)):
+ url = FullyEncodedHyperlinkedIdentityField(view_name='django_airavata_api:application-deployment-detail', lookup_field='appDeploymentId', lookup_url_kwarg='app_deployment_id')
+ # Default values returned in these results have been overridden with app deployment defaults for any that exist
+ queues = FullyEncodedHyperlinkedIdentityField(view_name='django_airavata_api:application-deployment-queues', lookup_field='appDeploymentId', lookup_url_kwarg='app_deployment_id')
class ComputeResourceDescriptionSerializer(CustomSerializer):
@@ -257,3 +239,6 @@ class ComputeResourceDescriptionSerializer(CustomSerializer):
ipAddresses=serializers.ListField(child=serializers.CharField())
resourceDescription=serializers.CharField()
enabled=serializers.BooleanField()
+
+class BatchQueueSerializer(thrift_django_serializer.create_serializer_class(BatchQueue)):
+ pass
diff --git a/django_airavata/apps/api/urls.py b/django_airavata/apps/api/urls.py
index 1edc10d..f9c6e4d 100644
--- a/django_airavata/apps/api/urls.py
+++ b/django_airavata/apps/api/urls.py
@@ -13,6 +13,7 @@ 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'application-interfaces', views.ApplicationInterfaceViewSet, base_name='application-interface')
router.register(r'applications', views.ApplicationModuleViewSet, base_name='application')
+router.register(r'application-deployments', views.ApplicationDeploymentViewSet, base_name='application-deployment')
app_name = 'django_airavata_api'
urlpatterns = [
diff --git a/django_airavata/apps/api/views.py b/django_airavata/apps/api/views.py
index 25cf730..fc79e70 100644
--- a/django_airavata/apps/api/views.py
+++ b/django_airavata/apps/api/views.py
@@ -341,6 +341,47 @@ class ApplicationInterfaceViewSet(APIBackedViewSet):
compute_resources = request.airavata_client.getAvailableAppInterfaceComputeResources(self.authz_token, app_interface_id)
return Response(compute_resources)
+class ApplicationDeploymentViewSet(APIBackedViewSet):
+
+ serializer_class = serializers.ApplicationDeploymentDescriptionSerializer
+ lookup_field = 'app_deployment_id'
+ lookup_value_regex = '[^/]+'
+
+ def get_list(self):
+ return self.request.airavata_client.getAllApplicationDeployments(self.authz_token, self.gateway_id)
+
+ def get_instance(self, lookup_value):
+ return self.request.airavata_client.getApplicationDeployment(self.authz_token, lookup_value)
+
+ def perform_create(self, serializer):
+ application_deployment = serializer.save()
+ app_deployment_id = self.request.airavata_client.registerApplicationDeployment(self.authz_token, self.gateway_id, application_deployment)
+ application_deployment.appDeploymentId = app_deployment_id
+
+ def perform_update(self, serializer):
+ application_deployment = serializer.save()
+ self.request.airavata_client.updateApplicationDeployment(self.authz_token, application_deployment.appDeploymentId, application_deployment)
+
+ @detail_route()
+ def queues(self, request, app_deployment_id):
+ """Return queues for this deployment with defaults overridden by deployment defaults if they exist"""
+ app_deployment = self.request.airavata_client.getApplicationDeployment(self.authz_token, app_deployment_id)
+ compute_resource = request.airavata_client.getComputeResource(request.authz_token, app_deployment.computeHostId)
+ # Override defaults with app deployment defaults
+ batch_queues = []
+ for batch_queue in compute_resource.batchQueues:
+ if app_deployment.defaultQueueName:
+ batch_queue.isDefaultQueue = (app_deployment.defaultQueueName == batch_queue.queueName)
+ if app_deployment.defaultNodeCount:
+ batch_queue.defaultNodeCount = app_deployment.defaultNodeCount
+ if app_deployment.defaultCPUCount:
+ batch_queue.defaultCPUCount = app_deployment.defaultCPUCount
+ if app_deployment.defaultWalltime:
+ batch_queue.defaultWalltime = app_deployment.defaultWalltime
+ batch_queues.append(batch_queue)
+ serializer = serializers.BatchQueueSerializer(batch_queues, many=True, context={'request': request})
+ return Response(serializer.data)
+
class ComputeResourceList(APIView):
renderer_classes = (JSONRenderer,)
diff --git a/thrift_django_serializer.py b/thrift_django_serializer.py
index f3cb713..e23671e 100644
--- a/thrift_django_serializer.py
+++ b/thrift_django_serializer.py
@@ -27,6 +27,9 @@ def create_serializer(thrift_data_type, **kwargs):
:param kwargs: Other Django Framework Serializer initialization parameters
:return: instance of custom serializer for the given thrift data type
"""
+ return create_serializer_class(thrift_data_type)(**kwargs)
+
+def create_serializer_class(thrift_data_type):
class CustomSerializerMeta(SerializerMetaclass):
def __new__(cls, name, bases, attrs):
@@ -58,7 +61,7 @@ def create_serializer(thrift_data_type, **kwargs):
def update(self, instance, validated_data):
raise Exception("Not implemented")
- return CustomSerializer(**kwargs)
+ return CustomSerializer
def process_field(field):
--
To stop receiving notification emails like this one, please contact
"commits@airavata.apache.org" <co...@airavata.apache.org>.