in django_airavata/apps/api/views.py [0:0]
def get_instance(self, lookup_value):
"""Get FullExperiment instance with resolved references."""
# TODO: move loading experiment and references to airavata_sdk?
experimentModel = self.request.airavata_client.getExperiment(
self.authz_token, lookup_value)
outputDataProducts = [
self.request.airavata_client.getDataProduct(self.authz_token,
output.value)
for output in experimentModel.experimentOutputs
if (output.value and
output.value.startswith('airavata-dp') and
output.type in (DataType.URI,
DataType.STDOUT,
DataType.STDERR))]
outputDataProducts += [
self.request.airavata_client.getDataProduct(self.authz_token, dp)
for output in experimentModel.experimentOutputs
if (output.value and
output.type == DataType.URI_COLLECTION)
for dp in output.value.split(',')
if output.value.startswith('airavata-dp')]
appInterfaceId = experimentModel.executionId
try:
applicationInterface = self.request.airavata_client \
.getApplicationInterface(self.authz_token, appInterfaceId)
except Exception as e:
log.warning(f"Failed to load app interface: {e}")
applicationInterface = None
exp_output_views = output_views.get_output_views(
self.request, experimentModel, applicationInterface)
inputDataProducts = [
self.request.airavata_client.getDataProduct(self.authz_token,
inp.value)
for inp in experimentModel.experimentInputs
if (inp.value and
inp.value.startswith('airavata-dp') and
inp.type in (DataType.URI,
DataType.STDOUT,
DataType.STDERR))]
inputDataProducts += [
self.request.airavata_client.getDataProduct(self.authz_token, dp)
for inp in experimentModel.experimentInputs
if (inp.value and
inp.type == DataType.URI_COLLECTION)
for dp in inp.value.split(',')
if inp.value.startswith('airavata-dp')]
applicationModule = None
try:
if applicationInterface is not None:
appModuleId = applicationInterface.applicationModules[0]
applicationModule = self.request.airavata_client \
.getApplicationModule(self.authz_token, appModuleId)
else:
log.warning(
"Cannot load application model since app interface failed to load")
except Exception:
log.exception("Failed to load app interface/module", extra={'request': self.request})
compute_resource_id = None
user_conf = experimentModel.userConfigurationData
if user_conf and user_conf.computationalResourceScheduling:
comp_res_sched = user_conf.computationalResourceScheduling
compute_resource_id = comp_res_sched.resourceHostId
try:
compute_resource = self.request.airavata_client.getComputeResource(
self.authz_token, compute_resource_id) \
if compute_resource_id else None
except Exception:
log.exception("Failed to load compute resource for {}".format(
compute_resource_id), extra={'request': self.request})
compute_resource = None
if self.request.airavata_client.userHasAccess(
self.authz_token,
experimentModel.projectId,
ResourcePermissionType.READ):
project = self.request.airavata_client.getProject(
self.authz_token, experimentModel.projectId)
else:
# User may not have access to project, only experiment
project = None
job_details = self.request.airavata_client.getJobDetails(
self.authz_token, lookup_value)
full_experiment = serializers.FullExperiment(
experimentModel,
project=project,
outputDataProducts=outputDataProducts,
inputDataProducts=inputDataProducts,
applicationModule=applicationModule,
computeResource=compute_resource,
jobDetails=job_details,
outputViews=exp_output_views)
return full_experiment