This is an automated email from the ASF dual-hosted git repository.
yasithdev pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/airavata-portals.git
The following commit(s) were added to refs/heads/main by this push:
new 5ff6d5f00 refactor(portal): make per-protocol interface detail
serializers proto-native (Track D) (#200)
5ff6d5f00 is described below
commit 5ff6d5f0002655ba18b66f227be32cf9b5142d92
Author: Yasith Jayawardana <[email protected]>
AuthorDate: Tue Jun 9 04:10:15 2026 -0400
refactor(portal): make per-protocol interface detail serializers
proto-native (Track D) (#200)
Replace the inline thrift_utils.create_serializer(<ThriftType>) rendering
in the
7 admin-only per-protocol detail views with hand-written proto-native DRF
serializers reading the gRPC protobuf directly:
LOCAL/SSH/Cloud/Unicore job submission + LOCAL/SCP/GridFTP data movement,
plus
the nested ResourceJobManager.
- New ProtoEnumKeyedMapField (+ proto_enum_keyed_map_field factory) renders
a
proto map<int32,string> whose int key holds a proto enum value as the
{str(Thrift enum member): value} dict the old enum-keyed Thrift map
produced
(e.g. {'JobManagerCommand.SUBMISSION': 'sbatch'}).
- SecurityProtocol/ResourceJobManagerType/ProviderName render as Thrift
ints via
prefix-aligned proto_enum_int_field; MonitorMode via its divergent
name_map
(proto MONITOR_FORK/MONITOR_LOCAL -> Thrift FORK/LOCAL).
- Repoint the 7 views to pass protobuf straight to the new serializers,
dropping
the grpc_adapters per-protocol funcs (+ _resource_job_manager,
_enum_keyed_map,
_MONITOR_MODE) and the now-unused Thrift imports; views.py no longer
imports
thrift_utils.
Validated byte-for-byte (all 7 models incl. the two enum-keyed maps,
MonitorMode
divergence, nested ResourceJobManager, ProviderName null) vs the old
adapter+thrift_utils path. manage.py check green; api test failures
unchanged.
---
.../django_airavata/apps/api/grpc_adapters.py | 152 --------------
.../django_airavata/apps/api/serializers.py | 231 +++++++++++++++++++++
.../django_airavata/apps/api/views.py | 67 ++----
3 files changed, 252 insertions(+), 198 deletions(-)
diff --git a/airavata-django-portal/django_airavata/apps/api/grpc_adapters.py
b/airavata-django-portal/django_airavata/apps/api/grpc_adapters.py
index 8c220afec..e2780b9ba 100644
--- a/airavata-django-portal/django_airavata/apps/api/grpc_adapters.py
+++ b/airavata-django-portal/django_airavata/apps/api/grpc_adapters.py
@@ -14,11 +14,7 @@ serializers are made protobuf-native.
from types import SimpleNamespace
from airavata.model.appcatalog.computeresource.ttypes import (
- JobManagerCommand as _ThriftJobManagerCommand,
JobSubmissionProtocol as _ThriftJobSubmissionProtocol,
- MonitorMode as _ThriftMonitorMode,
- ProviderName as _ThriftProviderName,
- ResourceJobManagerType as _ThriftResourceJobManagerType,
)
from airavata.model.appcatalog.groupresourceprofile.ttypes import (
ResourceType as _ThriftResourceType,
@@ -34,7 +30,6 @@ from airavata.model.data.replica.ttypes import (
)
from airavata.model.data.movement.ttypes import (
DataMovementProtocol as _ThriftDataMovementProtocol,
- SecurityProtocol as _ThriftSecurityProtocol,
)
from airavata.model.experiment.ttypes import (
ExperimentType as _ThriftExperimentType,
@@ -685,153 +680,6 @@ def user_profile(pb):
)
-# --- Per-protocol job-submission / data-movement interface details ----------
-# These admin-only detail views render a single protocol's submission/movement
-# model via the auto-generated serializer, so the adapter exposes Thrift
attribute
-# names. SecurityProtocol/ResourceJobManagerType/ProviderName are
prefix-aligned
-# (proto *_UNKNOWN sentinel -> None). MonitorMode NAMES diverge (proto
MONITOR_FORK
-# / MONITOR_LOCAL vs Thrift FORK / LOCAL) so it needs an explicit map. The
-# ResourceJobManager carries two enum-keyed map<int32,string> fields whose int
keys
-# hold proto enum values, bridged to the Thrift enum int by name (like
_file_systems).
-
-# proto MonitorMode member name -> Thrift MonitorMode value (names diverge for
the
-# FORK/LOCAL members, which proto prefixes with MONITOR_).
-_MONITOR_MODE = {
- 'POLL_JOB_MANAGER': _ThriftMonitorMode.POLL_JOB_MANAGER,
- 'CLOUD_JOB_MONITOR': _ThriftMonitorMode.CLOUD_JOB_MONITOR,
- 'JOB_EMAIL_NOTIFICATION_MONITOR':
_ThriftMonitorMode.JOB_EMAIL_NOTIFICATION_MONITOR,
- 'XSEDE_AMQP_SUBSCRIBE': _ThriftMonitorMode.XSEDE_AMQP_SUBSCRIBE,
- 'MONITOR_FORK': _ThriftMonitorMode.FORK,
- 'MONITOR_LOCAL': _ThriftMonitorMode.LOCAL,
-}
-
-
-def _enum_keyed_map(pb_map, proto_enum, thrift_enum):
- """proto map<int32, string> whose int key holds a ``proto_enum`` value ->
- {Thrift enum member: value}, bridging the key by NAME (proto and Thrift
assign
- different ints to the same member). The Thrift model declared these as
- enum-keyed maps, so the serializer's ``DictField`` rendered ``str(member)``
- (e.g. ``'JobManagerCommand.SUBMISSION'``) -> keep the Thrift IntEnum
member as
- the key to reproduce that exact representation. Unknown keys (e.g. the zero
- sentinel) are dropped.
- """
- result = {}
- for k, v in pb_map.items():
- name = proto_enum.DESCRIPTOR.values_by_number.get(k)
- if name is None:
- continue
- thrift_member = getattr(thrift_enum, name.name, None)
- if thrift_member is not None:
- result[thrift_member] = v
- return result
-
-
-def _resource_job_manager(pb):
- """gRPC ``ResourceJobManager`` -> auto-generated serializer shape."""
- from
airavata_sdk.generated.org.apache.airavata.model.appcatalog.computeresource
import ( # noqa: E501
- compute_resource_pb2,
- )
- from airavata_sdk.generated.org.apache.airavata.model.parallelism import (
- parallelism_pb2,
- )
- return SimpleNamespace(
- resourceJobManagerId=pb.resource_job_manager_id or None,
- resourceJobManagerType=_thrift_enum_prefixed(
- pb, 'resource_job_manager_type', _ThriftResourceJobManagerType,
- 'RESOURCE_JOB_MANAGER_TYPE_'),
- pushMonitoringEndpoint=pb.push_monitoring_endpoint or None,
- jobManagerBinPath=pb.job_manager_bin_path or None,
- jobManagerCommands=_enum_keyed_map(
- pb.job_manager_commands, compute_resource_pb2.JobManagerCommand,
- _ThriftJobManagerCommand),
- parallelismPrefix=_enum_keyed_map(
- pb.parallelism_prefix, parallelism_pb2.ApplicationParallelismType,
- _ThriftParallelismType),
- )
-
-
-def local_job_submission(pb):
- """gRPC ``LOCALSubmission`` -> auto-generated serializer shape."""
- return SimpleNamespace(
- jobSubmissionInterfaceId=pb.job_submission_interface_id,
- resourceJobManager=_resource_job_manager(pb.resource_job_manager),
- securityProtocol=_thrift_enum_prefixed(
- pb, 'security_protocol', _ThriftSecurityProtocol,
- 'SECURITY_PROTOCOL_'),
- )
-
-
-def ssh_job_submission(pb):
- """gRPC ``SSHJobSubmission`` -> auto-generated serializer shape."""
- return SimpleNamespace(
- jobSubmissionInterfaceId=pb.job_submission_interface_id,
- securityProtocol=_thrift_enum_prefixed(
- pb, 'security_protocol', _ThriftSecurityProtocol,
- 'SECURITY_PROTOCOL_'),
- resourceJobManager=_resource_job_manager(pb.resource_job_manager),
- alternativeSSHHostName=pb.alternative_ssh_host_name or None,
- sshPort=pb.ssh_port or None,
- monitorMode=_thrift_enum_mapped(pb, 'monitor_mode', _MONITOR_MODE),
- batchQueueEmailSenders=list(pb.batch_queue_email_senders),
- )
-
-
-def cloud_job_submission(pb):
- """gRPC ``CloudJobSubmission`` -> auto-generated serializer shape."""
- return SimpleNamespace(
- jobSubmissionInterfaceId=pb.job_submission_interface_id,
- securityProtocol=_thrift_enum_prefixed(
- pb, 'security_protocol', _ThriftSecurityProtocol,
- 'SECURITY_PROTOCOL_'),
- nodeId=pb.node_id or None,
- executableType=pb.executable_type or None,
- providerName=_thrift_enum_prefixed(
- pb, 'provider_name', _ThriftProviderName, 'PROVIDER_NAME_'),
- userAccountName=pb.user_account_name or None,
- )
-
-
-def unicore_job_submission(pb):
- """gRPC ``UnicoreJobSubmission`` -> auto-generated serializer shape."""
- return SimpleNamespace(
- jobSubmissionInterfaceId=pb.job_submission_interface_id,
- securityProtocol=_thrift_enum_prefixed(
- pb, 'security_protocol', _ThriftSecurityProtocol,
- 'SECURITY_PROTOCOL_'),
- unicoreEndPointURL=pb.unicore_end_point_url or None,
- )
-
-
-def local_data_movement(pb):
- """gRPC ``LOCALDataMovement`` -> auto-generated serializer shape."""
- return SimpleNamespace(
- dataMovementInterfaceId=pb.data_movement_interface_id,
- )
-
-
-def scp_data_movement(pb):
- """gRPC ``SCPDataMovement`` -> auto-generated serializer shape."""
- return SimpleNamespace(
- dataMovementInterfaceId=pb.data_movement_interface_id,
- securityProtocol=_thrift_enum_prefixed(
- pb, 'security_protocol', _ThriftSecurityProtocol,
- 'SECURITY_PROTOCOL_'),
- alternativeSCPHostName=pb.alternative_scp_host_name or None,
- sshPort=pb.ssh_port or None,
- )
-
-
-def grid_ftp_data_movement(pb):
- """gRPC ``GridFTPDataMovement`` -> auto-generated serializer shape."""
- return SimpleNamespace(
- dataMovementInterfaceId=pb.data_movement_interface_id,
- securityProtocol=_thrift_enum_prefixed(
- pb, 'security_protocol', _ThriftSecurityProtocol,
- 'SECURITY_PROTOCOL_'),
- gridFTPEndPoints=list(pb.grid_ftp_end_points),
- )
-
-
# --- User storage file/directory listings -----------------------------------
# The storage serializers (UserStorageFileSerializer /
UserStorageDirectorySerializer)
# read plain dicts keyed the way the legacy user_storage.listdir produced. The
gRPC
diff --git a/airavata-django-portal/django_airavata/apps/api/serializers.py
b/airavata-django-portal/django_airavata/apps/api/serializers.py
index 0f260c660..ab1e225c3 100644
--- a/airavata-django-portal/django_airavata/apps/api/serializers.py
+++ b/airavata-django-portal/django_airavata/apps/api/serializers.py
@@ -345,6 +345,40 @@ class ProtoFileSystemsMapField(serializers.Field):
str(key_map[k]): v for k, v in value.items() if k in key_map}
+class ProtoEnumKeyedMapField(serializers.Field):
+ """Renders a proto ``map<int32, string>`` whose int key holds a proto enum
+ value as the ``{str(Thrift enum member): value}`` dict the old enum-keyed
+ Thrift map produced (e.g. ``{'JobManagerCommand.SUBMISSION': 'sbatch'}``).
+
+ Build via :func:`proto_enum_keyed_map_field`, which snapshots the
proto-int ->
+ Thrift-member-str mapping. (Unlike ``ProtoFileSystemsMapField``, which
mirrors
+ an i32-keyed Thrift map and emits the digit, this mirrors an enum-keyed
Thrift
+ map and emits ``str(member)``.)
+ """
+
+ def __init__(self, key_labels, **kwargs):
+ self._key_labels = key_labels
+ kwargs.setdefault('read_only', True)
+ super().__init__(**kwargs)
+
+ def to_representation(self, value):
+ return {
+ self._key_labels[k]: v
+ for k, v in value.items() if k in self._key_labels}
+
+
+def proto_enum_keyed_map_field(proto_enum_descriptor, thrift_enum, **kwargs):
+ """Build a :class:`ProtoEnumKeyedMapField` mapping each proto enum int key
to
+ ``str(Thrift enum member)`` by member name (proto and Thrift assign
different
+ ints; unknown/zero-sentinel keys are dropped)."""
+ key_labels = {}
+ for v in proto_enum_descriptor.values:
+ thrift_member = getattr(thrift_enum, v.name, None)
+ if thrift_member is not None:
+ key_labels[v.number] = str(thrift_member)
+ return ProtoEnumKeyedMapField(key_labels=key_labels, **kwargs)
+
+
class StoredJSONField(serializers.JSONField):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
@@ -886,6 +920,203 @@ class
ComputeResourceDescriptionSerializer(serializers.Serializer):
source='default_walltime', allow_null=True, required=False)
+# --- Per-protocol job-submission / data-movement interface details ----------
+# Admin-only detail views rendering a single protocol's submission/movement
model.
+# SecurityProtocol/ResourceJobManagerType/ProviderName are prefix-aligned;
MonitorMode
+# names diverge (proto MONITOR_FORK/MONITOR_LOCAL -> Thrift FORK/LOCAL).
+_MONITOR_MODE_NAME_MAP = {'MONITOR_FORK': 'FORK', 'MONITOR_LOCAL': 'LOCAL'}
+
+
+def _security_protocol_field(**kwargs):
+ from airavata.model.data.movement.ttypes import (
+ SecurityProtocol as _ThriftSecurityProtocol,
+ )
+ from airavata_sdk.generated.org.apache.airavata.model.data.movement import
(
+ data_movement_pb2,
+ )
+ return proto_enum_int_field(
+ data_movement_pb2.SecurityProtocol.DESCRIPTOR, _ThriftSecurityProtocol,
+ proto_prefix='SECURITY_PROTOCOL_', **kwargs)
+
+
+def _resource_job_manager_type_field(**kwargs):
+ from airavata.model.appcatalog.computeresource.ttypes import (
+ ResourceJobManagerType as _ThriftResourceJobManagerType,
+ )
+ from
airavata_sdk.generated.org.apache.airavata.model.appcatalog.computeresource
import ( # noqa: E501
+ compute_resource_pb2,
+ )
+ return proto_enum_int_field(
+ compute_resource_pb2.ResourceJobManagerType.DESCRIPTOR,
+ _ThriftResourceJobManagerType,
+ proto_prefix='RESOURCE_JOB_MANAGER_TYPE_', **kwargs)
+
+
+def _provider_name_field(**kwargs):
+ from airavata.model.appcatalog.computeresource.ttypes import (
+ ProviderName as _ThriftProviderName,
+ )
+ from
airavata_sdk.generated.org.apache.airavata.model.appcatalog.computeresource
import ( # noqa: E501
+ compute_resource_pb2,
+ )
+ return proto_enum_int_field(
+ compute_resource_pb2.ProviderName.DESCRIPTOR, _ThriftProviderName,
+ proto_prefix='PROVIDER_NAME_', **kwargs)
+
+
+def _monitor_mode_field(**kwargs):
+ from airavata.model.appcatalog.computeresource.ttypes import (
+ MonitorMode as _ThriftMonitorMode,
+ )
+ from
airavata_sdk.generated.org.apache.airavata.model.appcatalog.computeresource
import ( # noqa: E501
+ compute_resource_pb2,
+ )
+ return proto_enum_int_field(
+ compute_resource_pb2.MonitorMode.DESCRIPTOR, _ThriftMonitorMode,
+ name_map=_MONITOR_MODE_NAME_MAP, **kwargs)
+
+
+class ResourceJobManagerSerializer(serializers.Serializer):
+ """Proto-native serializer for the gRPC ``ResourceJobManager`` message."""
+
+ resourceJobManagerId = serializers.CharField(
+ source='resource_job_manager_id', allow_blank=True, allow_null=True,
+ required=False)
+ resourceJobManagerType = _resource_job_manager_type_field(
+ source='resource_job_manager_type', required=False, allow_null=True)
+ pushMonitoringEndpoint = serializers.CharField(
+ source='push_monitoring_endpoint', allow_blank=True, allow_null=True,
+ required=False)
+ jobManagerBinPath = serializers.CharField(
+ source='job_manager_bin_path', allow_blank=True, allow_null=True,
+ required=False)
+ jobManagerCommands = serializers.SerializerMethodField()
+ parallelismPrefix = serializers.SerializerMethodField()
+
+ def get_jobManagerCommands(self, pb):
+ from airavata.model.appcatalog.computeresource.ttypes import (
+ JobManagerCommand as _ThriftJobManagerCommand,
+ )
+ from
airavata_sdk.generated.org.apache.airavata.model.appcatalog.computeresource
import ( # noqa: E501
+ compute_resource_pb2,
+ )
+ return proto_enum_keyed_map_field(
+ compute_resource_pb2.JobManagerCommand.DESCRIPTOR,
+
_ThriftJobManagerCommand).to_representation(pb.job_manager_commands)
+
+ def get_parallelismPrefix(self, pb):
+ from airavata.model.appcatalog.parallelism.ttypes import (
+ ApplicationParallelismType as _ThriftParallelismType,
+ )
+ from airavata_sdk.generated.org.apache.airavata.model.parallelism
import (
+ parallelism_pb2,
+ )
+ return proto_enum_keyed_map_field(
+ parallelism_pb2.ApplicationParallelismType.DESCRIPTOR,
+ _ThriftParallelismType).to_representation(pb.parallelism_prefix)
+
+
+class LocalJobSubmissionSerializer(serializers.Serializer):
+ """Proto-native serializer for the gRPC ``LOCALSubmission`` message."""
+
+ jobSubmissionInterfaceId = serializers.CharField(
+ source='job_submission_interface_id', allow_blank=True,
allow_null=True,
+ required=False)
+ resourceJobManager = ResourceJobManagerSerializer(
+ source='resource_job_manager', required=False)
+ securityProtocol = _security_protocol_field(
+ source='security_protocol', required=False, allow_null=True)
+
+
+class SshJobSubmissionSerializer(serializers.Serializer):
+ """Proto-native serializer for the gRPC ``SSHJobSubmission`` message."""
+
+ jobSubmissionInterfaceId = serializers.CharField(
+ source='job_submission_interface_id', allow_blank=True,
allow_null=True,
+ required=False)
+ securityProtocol = _security_protocol_field(
+ source='security_protocol', required=False, allow_null=True)
+ resourceJobManager = ResourceJobManagerSerializer(
+ source='resource_job_manager', required=False)
+ alternativeSSHHostName = serializers.CharField(
+ source='alternative_ssh_host_name', allow_blank=True, allow_null=True,
+ required=False)
+ sshPort = ProtoIntOrNoneField(source='ssh_port')
+ monitorMode = _monitor_mode_field(
+ source='monitor_mode', required=False, allow_null=True)
+ batchQueueEmailSenders = serializers.ListField(
+ source='batch_queue_email_senders', child=serializers.CharField(),
+ required=False)
+
+
+class CloudJobSubmissionSerializer(serializers.Serializer):
+ """Proto-native serializer for the gRPC ``CloudJobSubmission`` message."""
+
+ jobSubmissionInterfaceId = serializers.CharField(
+ source='job_submission_interface_id', allow_blank=True,
allow_null=True,
+ required=False)
+ securityProtocol = _security_protocol_field(
+ source='security_protocol', required=False, allow_null=True)
+ nodeId = serializers.CharField(
+ source='node_id', allow_blank=True, allow_null=True, required=False)
+ executableType = serializers.CharField(
+ source='executable_type', allow_blank=True, allow_null=True,
+ required=False)
+ providerName = _provider_name_field(
+ source='provider_name', required=False, allow_null=True)
+ userAccountName = serializers.CharField(
+ source='user_account_name', allow_blank=True, allow_null=True,
+ required=False)
+
+
+class UnicoreJobSubmissionSerializer(serializers.Serializer):
+ """Proto-native serializer for the gRPC ``UnicoreJobSubmission``
message."""
+
+ jobSubmissionInterfaceId = serializers.CharField(
+ source='job_submission_interface_id', allow_blank=True,
allow_null=True,
+ required=False)
+ securityProtocol = _security_protocol_field(
+ source='security_protocol', required=False, allow_null=True)
+ unicoreEndPointURL = serializers.CharField(
+ source='unicore_end_point_url', allow_blank=True, allow_null=True,
+ required=False)
+
+
+class LocalDataMovementSerializer(serializers.Serializer):
+ """Proto-native serializer for the gRPC ``LOCALDataMovement`` message."""
+
+ dataMovementInterfaceId = serializers.CharField(
+ source='data_movement_interface_id', allow_blank=True, allow_null=True,
+ required=False)
+
+
+class ScpDataMovementSerializer(serializers.Serializer):
+ """Proto-native serializer for the gRPC ``SCPDataMovement`` message."""
+
+ dataMovementInterfaceId = serializers.CharField(
+ source='data_movement_interface_id', allow_blank=True, allow_null=True,
+ required=False)
+ securityProtocol = _security_protocol_field(
+ source='security_protocol', required=False, allow_null=True)
+ alternativeSCPHostName = serializers.CharField(
+ source='alternative_scp_host_name', allow_blank=True, allow_null=True,
+ required=False)
+ sshPort = ProtoIntOrNoneField(source='ssh_port')
+
+
+class GridFtpDataMovementSerializer(serializers.Serializer):
+ """Proto-native serializer for the gRPC ``GridFTPDataMovement`` message."""
+
+ dataMovementInterfaceId = serializers.CharField(
+ source='data_movement_interface_id', allow_blank=True, allow_null=True,
+ required=False)
+ securityProtocol = _security_protocol_field(
+ source='security_protocol', required=False, allow_null=True)
+ gridFTPEndPoints = serializers.ListField(
+ source='grid_ftp_end_points', child=serializers.CharField(),
+ required=False)
+
+
class ExperimentStatusSerializer(
thrift_utils.create_serializer_class(ExperimentStatus)):
timeOfStateChange = UTCPosixTimestampDateTimeField()
diff --git a/airavata-django-portal/django_airavata/apps/api/views.py
b/airavata-django-portal/django_airavata/apps/api/views.py
index 25b02e1ba..4382fd180 100644
--- a/airavata-django-portal/django_airavata/apps/api/views.py
+++ b/airavata-django-portal/django_airavata/apps/api/views.py
@@ -7,18 +7,7 @@ import warnings
from datetime import datetime, timedelta
from urllib.parse import quote
-from airavata.model.appcatalog.computeresource.ttypes import (
- CloudJobSubmission,
- LOCALSubmission,
- SSHJobSubmission,
- UnicoreJobSubmission
-)
from airavata.model.application.io.ttypes import DataType
-from airavata.model.data.movement.ttypes import (
- GridFTPDataMovement,
- LOCALDataMovement,
- SCPDataMovement
-)
from airavata.model.experiment.ttypes import (
ExperimentModel,
ExperimentSearchFields
@@ -70,7 +59,6 @@ from . import (
output_views,
serializers,
signals,
- thrift_utils,
tus,
view_utils
)
@@ -767,12 +755,11 @@ class LocalJobSubmissionView(APIView):
def get(self, request, format=None):
job_submission_id = request.query_params["id"]
- local_job_submission = grpc_adapters.local_job_submission(
+ local_job_submission = (
request.airavata.compute.get_local_job_submission(job_submission_id))
return Response(
- thrift_utils.create_serializer(
- LOCALSubmission,
- instance=local_job_submission).data)
+ serializers.LocalJobSubmissionSerializer(
+ local_job_submission).data)
class CloudJobSubmissionView(APIView):
@@ -780,12 +767,10 @@ class CloudJobSubmissionView(APIView):
def get(self, request, format=None):
job_submission_id = request.query_params["id"]
- job_submission = grpc_adapters.cloud_job_submission(
-
request.airavata.compute.get_cloud_job_submission(job_submission_id))
+ job_submission = request.airavata.compute.get_cloud_job_submission(
+ job_submission_id)
return Response(
- thrift_utils.create_serializer(
- CloudJobSubmission,
- instance=job_submission).data)
+ serializers.CloudJobSubmissionSerializer(job_submission).data)
class SshJobSubmissionView(APIView):
@@ -793,12 +778,10 @@ class SshJobSubmissionView(APIView):
def get(self, request, format=None):
job_submission_id = request.query_params["id"]
- job_submission = grpc_adapters.ssh_job_submission(
- request.airavata.compute.get_ssh_job_submission(job_submission_id))
+ job_submission = request.airavata.compute.get_ssh_job_submission(
+ job_submission_id)
return Response(
- thrift_utils.create_serializer(
- SSHJobSubmission,
- instance=job_submission).data)
+ serializers.SshJobSubmissionSerializer(job_submission).data)
class UnicoreJobSubmissionView(APIView):
@@ -806,12 +789,10 @@ class UnicoreJobSubmissionView(APIView):
def get(self, request, format=None):
job_submission_id = request.query_params["id"]
- job_submission = grpc_adapters.unicore_job_submission(
-
request.airavata.compute.get_unicore_job_submission(job_submission_id))
+ job_submission = request.airavata.compute.get_unicore_job_submission(
+ job_submission_id)
return Response(
- thrift_utils.create_serializer(
- UnicoreJobSubmission,
- instance=job_submission).data)
+ serializers.UnicoreJobSubmissionSerializer(job_submission).data)
class GridFtpDataMovementView(APIView):
@@ -819,12 +800,10 @@ class GridFtpDataMovementView(APIView):
def get(self, request, format=None):
data_movement_id = request.query_params["id"]
- data_movement = grpc_adapters.grid_ftp_data_movement(
-
request.airavata.storage.get_grid_ftp_data_movement(data_movement_id))
+ data_movement = request.airavata.storage.get_grid_ftp_data_movement(
+ data_movement_id)
return Response(
- thrift_utils.create_serializer(
- GridFTPDataMovement,
- instance=data_movement).data)
+ serializers.GridFtpDataMovementSerializer(data_movement).data)
class ScpDataMovementView(APIView):
@@ -832,12 +811,10 @@ class ScpDataMovementView(APIView):
def get(self, request, format=None):
data_movement_id = request.query_params["id"]
- data_movement = grpc_adapters.scp_data_movement(
- request.airavata.storage.get_scp_data_movement(data_movement_id))
+ data_movement = request.airavata.storage.get_scp_data_movement(
+ data_movement_id)
return Response(
- thrift_utils.create_serializer(
- SCPDataMovement,
- instance=data_movement).data)
+ serializers.ScpDataMovementSerializer(data_movement).data)
class LocalDataMovementView(APIView):
@@ -845,12 +822,10 @@ class LocalDataMovementView(APIView):
def get(self, request, format=None):
data_movement_id = request.query_params["id"]
- data_movement = grpc_adapters.local_data_movement(
- request.airavata.storage.get_local_data_movement(data_movement_id))
+ data_movement = request.airavata.storage.get_local_data_movement(
+ data_movement_id)
return Response(
- thrift_utils.create_serializer(
- LOCALDataMovement,
- instance=data_movement).data)
+ serializers.LocalDataMovementSerializer(data_movement).data)
class DataProductView(APIView):