This is an automated email from the ASF dual-hosted git repository.
lahirujayathilake 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 d1bc8d0aa fix thrift 0.22.0 compatibility for Application Interface
creation
d1bc8d0aa is described below
commit d1bc8d0aac6248342df344d2878463cefb77882c
Author: lahiruj <[email protected]>
AuthorDate: Mon Oct 27 18:17:14 2025 -0400
fix thrift 0.22.0 compatibility for Application Interface creation
---
.../django_airavata/apps/api/serializers.py | 28 ++++++++++++++++++----
1 file changed, 24 insertions(+), 4 deletions(-)
diff --git a/airavata-django-portal/django_airavata/apps/api/serializers.py
b/airavata-django-portal/django_airavata/apps/api/serializers.py
index 63d14a499..70c6af6f7 100644
--- a/airavata-django-portal/django_airavata/apps/api/serializers.py
+++ b/airavata-django-portal/django_airavata/apps/api/serializers.py
@@ -341,7 +341,7 @@ class InputDataObjectTypeSerializer(serializers.Serializer):
applicationArgument = serializers.CharField(allow_blank=True,
allow_null=True, required=False)
standardInput = serializers.BooleanField(default=False)
userFriendlyDescription = serializers.CharField(allow_blank=True,
allow_null=True, required=False)
- metaData = serializers.CharField(allow_blank=True, allow_null=True,
required=False)
+ metaData = StoredJSONField(allow_null=True, required=False)
inputOrder = serializers.IntegerField(required=False, allow_null=True)
isRequired = serializers.BooleanField(default=False)
requiredToAddedToCommandLine = serializers.BooleanField(default=False)
@@ -370,7 +370,7 @@ class
OutputDataObjectTypeSerializer(serializers.Serializer):
searchQuery = serializers.CharField(allow_blank=True, allow_null=True,
required=False)
outputStreaming = serializers.BooleanField(default=False)
storageResourceId = serializers.CharField(allow_blank=True,
allow_null=True, required=False)
- metaData = serializers.CharField(allow_blank=True, allow_null=True,
required=False)
+ metaData = StoredJSONField(allow_null=True, required=False)
def create(self, validated_data):
return OutputDataObjectType(**validated_data)
@@ -381,7 +381,7 @@ class
OutputDataObjectTypeSerializer(serializers.Serializer):
return instance
class ApplicationInterfaceDescriptionSerializer(serializers.Serializer):
- applicationInterfaceId = serializers.CharField(required=False)
+ applicationInterfaceId = serializers.CharField(required=False,
allow_null=True, allow_blank=True)
applicationName = serializers.CharField()
applicationDescription = serializers.CharField(allow_blank=True,
allow_null=True, required=False)
applicationModules = serializers.ListField(child=serializers.CharField(),
allow_null=True, required=False)
@@ -399,7 +399,27 @@ class
ApplicationInterfaceDescriptionSerializer(serializers.Serializer):
queueSettingsCalculatorId = serializers.CharField(allow_null=True,
required=False)
def create(self, validated_data):
- return ApplicationInterfaceDescription(**validated_data)
+ # Convert inputs/outputs from dicts to Thrift objects
+ inputs_data = validated_data.pop('applicationInputs', None)
+ outputs_data = validated_data.pop('applicationOutputs', None)
+
+ # Remove Django specific fields
+ validated_data.pop('showQueueSettings', None)
+ validated_data.pop('queueSettingsCalculatorId', None)
+ validated_data.pop('url', None)
+ validated_data.pop('userHasWriteAccess', None)
+
+ if 'applicationInterfaceId' in validated_data and
validated_data['applicationInterfaceId'] is None:
+ validated_data['applicationInterfaceId'] = ""
+
+ application_interface =
ApplicationInterfaceDescription(**validated_data)
+
+ if inputs_data is not None:
+ application_interface.applicationInputs =
[InputDataObjectType(**inp) for inp in inputs_data]
+ if outputs_data is not None:
+ application_interface.applicationOutputs =
[OutputDataObjectType(**out) for out in outputs_data]
+
+ return application_interface
def update(self, instance, validated_data):
defaults = {}