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 2019/06/28 21:09:38 UTC
[airavata-django-portal] 01/03: AIRAVATA-3029 Add in any output
view providers added to the app interface
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 f2b68c7c8576e36d0e038df2cb90ee823e381ec7
Author: Marcus Christie <ma...@apache.org>
AuthorDate: Fri Jun 28 14:59:43 2019 -0400
AIRAVATA-3029 Add in any output view providers added to the app interface
---
django_airavata/apps/api/output_views.py | 36 +++++++++++++++++++++++++-------
django_airavata/apps/api/views.py | 22 ++++++++++++-------
2 files changed, 44 insertions(+), 14 deletions(-)
diff --git a/django_airavata/apps/api/output_views.py b/django_airavata/apps/api/output_views.py
index bae671f..2640dab 100644
--- a/django_airavata/apps/api/output_views.py
+++ b/django_airavata/apps/api/output_views.py
@@ -21,11 +21,12 @@ DEFAULT_VIEW_PROVIDERS = {
}
-def get_output_views(experiment):
+def get_output_views(experiment, application_interface):
output_views = {}
for output in experiment.experimentOutputs:
output_views[output.name] = []
- output_view_provider_ids = _get_output_view_providers(output)
+ output_view_provider_ids = _get_output_view_providers(
+ output, application_interface)
for output_view_provider_id in output_view_provider_ids:
output_view_provider = None
if output_view_provider_id in DEFAULT_VIEW_PROVIDERS:
@@ -59,21 +60,42 @@ def get_output_views(experiment):
return output_views
-def _get_output_view_providers(experiment_output):
+def _get_output_view_providers(experiment_output, application_interface):
output_view_providers = []
logger.debug("experiment_output={}".format(experiment_output))
if experiment_output.metaData:
try:
output_metadata = json.loads(experiment_output.metaData)
- output_view_providers.extend(
- output_metadata['output-view-providers'])
logger.debug("output_metadata={}".format(output_metadata))
+ if 'output-view-providers' in output_metadata:
+ output_view_providers.extend(
+ output_metadata['output-view-providers'])
except Exception as e:
logger.exception(
"Failed to parse metadata for output {}".format(
experiment_output.name))
if 'default' not in output_view_providers:
output_view_providers.insert(0, 'default')
- # if len(output_view_providers) == 0:
- # output_view_providers.extend(_get_default_view_providers())
+ # Add in any output view providers defined on the application interface
+ app_output_view_providers = _get_application_output_view_providers(
+ application_interface, experiment_output.name)
+ for view_provider in app_output_view_providers:
+ if view_provider not in output_view_providers:
+ output_view_providers.append(view_provider)
return output_view_providers
+
+
+def _get_application_output_view_providers(application_interface, output_name):
+ app_output = [o for o in application_interface.applicationOutputs if o.name == output_name]
+ if len(app_output) == 1:
+ app_output = app_output[0]
+ if app_output.metaData:
+ try:
+ output_metadata = json.loads(app_output.metaData)
+ if 'output-view-providers' in output_metadata:
+ return output_metadata['output-view-providers']
+ except Exception as e:
+ logger.exception(
+ "Failed to parse metadata for output {}".format(
+ app_output.name))
+ return []
diff --git a/django_airavata/apps/api/views.py b/django_airavata/apps/api/views.py
index 73b5f02..3c71f1f 100644
--- a/django_airavata/apps/api/views.py
+++ b/django_airavata/apps/api/views.py
@@ -431,7 +431,15 @@ class FullExperimentViewSet(mixins.RetrieveModelMixin,
output.type == DataType.URI_COLLECTION)
for dp in output.value.split(',')
if output.value.startswith('airavata-dp')]
- exp_output_views = output_views.get_output_views(experimentModel)
+ appInterfaceId = experimentModel.executionId
+ try:
+ applicationInterface = self.request.airavata_client \
+ .getApplicationInterface(self.authz_token, appInterfaceId)
+ except Exception as e:
+ log.exception("Failed to load app interface")
+ applicationInterface = None
+ exp_output_views = output_views.get_output_views(
+ experimentModel, applicationInterface)
inputDataProducts = [
self.request.airavata_client.getDataProduct(self.authz_token,
inp.value)
@@ -448,13 +456,13 @@ class FullExperimentViewSet(mixins.RetrieveModelMixin,
inp.type == DataType.URI_COLLECTION)
for dp in inp.value.split(',')
if inp.value.startswith('airavata-dp')]
- appInterfaceId = experimentModel.executionId
try:
- applicationInterface = self.request.airavata_client \
- .getApplicationInterface(self.authz_token, appInterfaceId)
- appModuleId = applicationInterface.applicationModules[0]
- applicationModule = self.request.airavata_client \
- .getApplicationModule(self.authz_token, appModuleId)
+ if applicationInterface is not None:
+ appModuleId = applicationInterface.applicationModules[0]
+ applicationModule = self.request.airavata_client \
+ .getApplicationModule(self.authz_token, appModuleId)
+ else:
+ log.warning("Cannot log application model since app interface failed to load")
except Exception as e:
log.exception("Failed to load app interface/module")
applicationModule = None