Updating python sdk files
diff --git a/python-sdk/setup.cfg b/python-sdk/setup.cfg
index 3b60d7e..09f6fef 100644
--- a/python-sdk/setup.cfg
+++ b/python-sdk/setup.cfg
@@ -1,6 +1,6 @@
 [metadata]
 name = airavata_mft_sdk
-version = 0.0.1-alpha11
+version = 0.0.1-alpha12
 author = Airavata MFT Developers
 author_email = dev@airavata.apache.org
 description = Python SDK for Apache Airavata Managed File Transfers (MFT)
diff --git a/python-sdk/src/airavata_mft_sdk/generate-stubs.sh b/python-sdk/src/airavata_mft_sdk/generate-stubs.sh
index 60319de..734043f 100755
--- a/python-sdk/src/airavata_mft_sdk/generate-stubs.sh
+++ b/python-sdk/src/airavata_mft_sdk/generate-stubs.sh
@@ -39,6 +39,8 @@
           ../../../services/resource-service/stub/src/main/proto/azure/AzureStorage.proto \
           ../../../services/resource-service/stub/src/main/proto/swift/SwiftStorageService.proto \
           ../../../services/resource-service/stub/src/main/proto/swift/SwiftStorage.proto \
+          ../../../services/resource-service/stub/src/main/proto/odata/ODataStorageService.proto \
+          ../../../services/resource-service/stub/src/main/proto/odata/ODataStorage.proto \
           --python_out=$RESOURCE_DIR --grpc_python_out=$RESOURCE_DIR
 
 
@@ -61,6 +63,8 @@
           ../../../services/secret-service/stub/src/main/proto/scp/SCPSecretService.proto \
           ../../../services/secret-service/stub/src/main/proto/swift/SwiftCredential.proto \
           ../../../services/secret-service/stub/src/main/proto/swift/SwiftSecretService.proto \
+          ../../../services/secret-service/stub/src/main/proto/odata/ODataCredential.proto \
+          ../../../services/secret-service/stub/src/main/proto/odata/ODataSecretService.proto \
           --python_out=$SECRET_DIR --grpc_python_out=$SECRET_DIR
 
 python3 -m grpc_tools.protoc --proto_path=../../../api/stub/src/main/proto \
@@ -81,6 +85,7 @@
 touch s3/__init__.py
 touch scp/__init__.py
 touch swift/__init__.py
+touch odata/__init__.py
 
 
 sed -i 's/from \([^)]*\)pb2/from airavata_mft_sdk.\1pb2/' azure/*.py
@@ -94,6 +99,7 @@
 sed -i 's/from \([^)]*\)pb2/from airavata_mft_sdk.\1pb2/' s3/*.py
 sed -i 's/from \([^)]*\)pb2/from airavata_mft_sdk.\1pb2/' scp/*.py
 sed -i 's/from \([^)]*\)pb2/from airavata_mft_sdk.\1pb2/' swift/*.py
+sed -i 's/from \([^)]*\)pb2/from airavata_mft_sdk.\1pb2/' odata/*.py
 sed -i 's/from \([^)]*\)pb2/from airavata_mft_sdk.\1pb2/' *pb2.py
 sed -i 's/from \([^)]*\)pb2/from airavata_mft_sdk.\1pb2/' *pb2_grpc.py
 
@@ -108,5 +114,6 @@
 sed -i 's/^import \([^)]*\)pb2/import airavata_mft_sdk.\1pb2/' s3/*.py
 sed -i 's/^import \([^)]*\)pb2/import airavata_mft_sdk.\1pb2/' scp/*.py
 sed -i 's/^import \([^)]*\)pb2/import airavata_mft_sdk.\1pb2/' swift/*.py
+sed -i 's/^import \([^)]*\)pb2/import airavata_mft_sdk.\1pb2/' odata/*.py
 sed -i 's/^import \([^)]*\)pb2/import airavata_mft_sdk.\1pb2/' *pb2.py
 sed -i 's/^import \([^)]*\)pb2/import airavata_mft_sdk.\1pb2/' *pb2_grpc.py
\ No newline at end of file
diff --git a/python-sdk/src/airavata_mft_sdk/odata/ODataCredential_pb2.py b/python-sdk/src/airavata_mft_sdk/odata/ODataCredential_pb2.py
new file mode 100644
index 0000000..9296a58
--- /dev/null
+++ b/python-sdk/src/airavata_mft_sdk/odata/ODataCredential_pb2.py
@@ -0,0 +1,96 @@
+# -*- coding: utf-8 -*-
+# Generated by the protocol buffer compiler.  DO NOT EDIT!
+# source: odata/ODataCredential.proto
+"""Generated protocol buffer code."""
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import descriptor_pool as _descriptor_pool
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+import airavata_mft_sdk.CredCommon_pb2 as CredCommon__pb2
+
+
+DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1bodata/ODataCredential.proto\x12.org.apache.airavata.mft.credential.stubs.odata\x1a\x10\x43redCommon.proto\"C\n\x0bODataSecret\x12\x10\n\x08secretId\x18\x01 \x01(\t\x12\x10\n\x08userName\x18\x02 \x01(\t\x12\x10\n\x08password\x18\x03 \x01(\t\"h\n\x15ODataSecretGetRequest\x12\x10\n\x08secretId\x18\x01 \x01(\t\x12=\n\nauthzToken\x18\x02 \x01(\x0b\x32).org.apache.airavata.mft.common.AuthToken\"}\n\x18ODataSecretCreateRequest\x12\x10\n\x08userName\x18\x01 \x01(\t\x12\x10\n\x08password\x18\x02 \x01(\t\x12=\n\nauthzToken\x18\x03 \x01(\x0b\x32).org.apache.airavata.mft.common.AuthToken\"\x8f\x01\n\x18ODataSecretUpdateRequest\x12\x10\n\x08secretId\x18\x01 \x01(\t\x12\x10\n\x08userName\x18\x02 \x01(\t\x12\x10\n\x08password\x18\x03 \x01(\t\x12=\n\nauthzToken\x18\x04 \x01(\x0b\x32).org.apache.airavata.mft.common.AuthToken\"-\n\x19ODataSecretUpdateResponse\x12\x10\n\x08secretId\x18\x01 \x01(\t\"k\n\x18ODataSecretDeleteRequest\x12\x10\n\x08secretId\x18\x01 \x01(\t\x12=\n\nauthzToken\x18\x02 \x01(\x0b\x32).org.apache.airavata.mft.common.AuthToken\"+\n\x19ODataSecretDeleteResponse\x12\x0e\n\x06status\x18\x01 \x01(\x08\x42\x02P\x01\x62\x06proto3')
+
+
+
+_ODATASECRET = DESCRIPTOR.message_types_by_name['ODataSecret']
+_ODATASECRETGETREQUEST = DESCRIPTOR.message_types_by_name['ODataSecretGetRequest']
+_ODATASECRETCREATEREQUEST = DESCRIPTOR.message_types_by_name['ODataSecretCreateRequest']
+_ODATASECRETUPDATEREQUEST = DESCRIPTOR.message_types_by_name['ODataSecretUpdateRequest']
+_ODATASECRETUPDATERESPONSE = DESCRIPTOR.message_types_by_name['ODataSecretUpdateResponse']
+_ODATASECRETDELETEREQUEST = DESCRIPTOR.message_types_by_name['ODataSecretDeleteRequest']
+_ODATASECRETDELETERESPONSE = DESCRIPTOR.message_types_by_name['ODataSecretDeleteResponse']
+ODataSecret = _reflection.GeneratedProtocolMessageType('ODataSecret', (_message.Message,), {
+  'DESCRIPTOR' : _ODATASECRET,
+  '__module__' : 'odata.ODataCredential_pb2'
+  # @@protoc_insertion_point(class_scope:org.apache.airavata.mft.credential.stubs.odata.ODataSecret)
+  })
+_sym_db.RegisterMessage(ODataSecret)
+
+ODataSecretGetRequest = _reflection.GeneratedProtocolMessageType('ODataSecretGetRequest', (_message.Message,), {
+  'DESCRIPTOR' : _ODATASECRETGETREQUEST,
+  '__module__' : 'odata.ODataCredential_pb2'
+  # @@protoc_insertion_point(class_scope:org.apache.airavata.mft.credential.stubs.odata.ODataSecretGetRequest)
+  })
+_sym_db.RegisterMessage(ODataSecretGetRequest)
+
+ODataSecretCreateRequest = _reflection.GeneratedProtocolMessageType('ODataSecretCreateRequest', (_message.Message,), {
+  'DESCRIPTOR' : _ODATASECRETCREATEREQUEST,
+  '__module__' : 'odata.ODataCredential_pb2'
+  # @@protoc_insertion_point(class_scope:org.apache.airavata.mft.credential.stubs.odata.ODataSecretCreateRequest)
+  })
+_sym_db.RegisterMessage(ODataSecretCreateRequest)
+
+ODataSecretUpdateRequest = _reflection.GeneratedProtocolMessageType('ODataSecretUpdateRequest', (_message.Message,), {
+  'DESCRIPTOR' : _ODATASECRETUPDATEREQUEST,
+  '__module__' : 'odata.ODataCredential_pb2'
+  # @@protoc_insertion_point(class_scope:org.apache.airavata.mft.credential.stubs.odata.ODataSecretUpdateRequest)
+  })
+_sym_db.RegisterMessage(ODataSecretUpdateRequest)
+
+ODataSecretUpdateResponse = _reflection.GeneratedProtocolMessageType('ODataSecretUpdateResponse', (_message.Message,), {
+  'DESCRIPTOR' : _ODATASECRETUPDATERESPONSE,
+  '__module__' : 'odata.ODataCredential_pb2'
+  # @@protoc_insertion_point(class_scope:org.apache.airavata.mft.credential.stubs.odata.ODataSecretUpdateResponse)
+  })
+_sym_db.RegisterMessage(ODataSecretUpdateResponse)
+
+ODataSecretDeleteRequest = _reflection.GeneratedProtocolMessageType('ODataSecretDeleteRequest', (_message.Message,), {
+  'DESCRIPTOR' : _ODATASECRETDELETEREQUEST,
+  '__module__' : 'odata.ODataCredential_pb2'
+  # @@protoc_insertion_point(class_scope:org.apache.airavata.mft.credential.stubs.odata.ODataSecretDeleteRequest)
+  })
+_sym_db.RegisterMessage(ODataSecretDeleteRequest)
+
+ODataSecretDeleteResponse = _reflection.GeneratedProtocolMessageType('ODataSecretDeleteResponse', (_message.Message,), {
+  'DESCRIPTOR' : _ODATASECRETDELETERESPONSE,
+  '__module__' : 'odata.ODataCredential_pb2'
+  # @@protoc_insertion_point(class_scope:org.apache.airavata.mft.credential.stubs.odata.ODataSecretDeleteResponse)
+  })
+_sym_db.RegisterMessage(ODataSecretDeleteResponse)
+
+if _descriptor._USE_C_DESCRIPTORS == False:
+
+  DESCRIPTOR._options = None
+  DESCRIPTOR._serialized_options = b'P\001'
+  _ODATASECRET._serialized_start=97
+  _ODATASECRET._serialized_end=164
+  _ODATASECRETGETREQUEST._serialized_start=166
+  _ODATASECRETGETREQUEST._serialized_end=270
+  _ODATASECRETCREATEREQUEST._serialized_start=272
+  _ODATASECRETCREATEREQUEST._serialized_end=397
+  _ODATASECRETUPDATEREQUEST._serialized_start=400
+  _ODATASECRETUPDATEREQUEST._serialized_end=543
+  _ODATASECRETUPDATERESPONSE._serialized_start=545
+  _ODATASECRETUPDATERESPONSE._serialized_end=590
+  _ODATASECRETDELETEREQUEST._serialized_start=592
+  _ODATASECRETDELETEREQUEST._serialized_end=699
+  _ODATASECRETDELETERESPONSE._serialized_start=701
+  _ODATASECRETDELETERESPONSE._serialized_end=744
+# @@protoc_insertion_point(module_scope)
diff --git a/python-sdk/src/airavata_mft_sdk/odata/ODataCredential_pb2_grpc.py b/python-sdk/src/airavata_mft_sdk/odata/ODataCredential_pb2_grpc.py
new file mode 100644
index 0000000..2daafff
--- /dev/null
+++ b/python-sdk/src/airavata_mft_sdk/odata/ODataCredential_pb2_grpc.py
@@ -0,0 +1,4 @@
+# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
+"""Client and server classes corresponding to protobuf-defined services."""
+import grpc
+
diff --git a/python-sdk/src/airavata_mft_sdk/odata/ODataSecretService_pb2.py b/python-sdk/src/airavata_mft_sdk/odata/ODataSecretService_pb2.py
new file mode 100644
index 0000000..dd81747
--- /dev/null
+++ b/python-sdk/src/airavata_mft_sdk/odata/ODataSecretService_pb2.py
@@ -0,0 +1,29 @@
+# -*- coding: utf-8 -*-
+# Generated by the protocol buffer compiler.  DO NOT EDIT!
+# source: odata/ODataSecretService.proto
+"""Generated protocol buffer code."""
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import descriptor_pool as _descriptor_pool
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+from airavata_mft_sdk.odata import ODataCredential_pb2 as odata_dot_ODataCredential__pb2
+
+
+DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1eodata/ODataSecretService.proto\x12\x30org.apache.airavata.mft.credential.service.odata\x1a\x1bodata/ODataCredential.proto2\x9e\x05\n\x12ODataSecretService\x12\x94\x01\n\x0egetODataSecret\x12\x45.org.apache.airavata.mft.credential.stubs.odata.ODataSecretGetRequest\x1a;.org.apache.airavata.mft.credential.stubs.odata.ODataSecret\x12\x9a\x01\n\x11\x63reateODataSecret\x12H.org.apache.airavata.mft.credential.stubs.odata.ODataSecretCreateRequest\x1a;.org.apache.airavata.mft.credential.stubs.odata.ODataSecret\x12\xa8\x01\n\x11updateODataSecret\x12H.org.apache.airavata.mft.credential.stubs.odata.ODataSecretUpdateRequest\x1aI.org.apache.airavata.mft.credential.stubs.odata.ODataSecretUpdateResponse\x12\xa8\x01\n\x11\x64\x65leteODataSecret\x12H.org.apache.airavata.mft.credential.stubs.odata.ODataSecretDeleteRequest\x1aI.org.apache.airavata.mft.credential.stubs.odata.ODataSecretDeleteResponseB\x02P\x01\x62\x06proto3')
+
+
+
+_ODATASECRETSERVICE = DESCRIPTOR.services_by_name['ODataSecretService']
+if _descriptor._USE_C_DESCRIPTORS == False:
+
+  DESCRIPTOR._options = None
+  DESCRIPTOR._serialized_options = b'P\001'
+  _ODATASECRETSERVICE._serialized_start=114
+  _ODATASECRETSERVICE._serialized_end=784
+# @@protoc_insertion_point(module_scope)
diff --git a/python-sdk/src/airavata_mft_sdk/odata/ODataSecretService_pb2_grpc.py b/python-sdk/src/airavata_mft_sdk/odata/ODataSecretService_pb2_grpc.py
new file mode 100644
index 0000000..ecc71a2
--- /dev/null
+++ b/python-sdk/src/airavata_mft_sdk/odata/ODataSecretService_pb2_grpc.py
@@ -0,0 +1,165 @@
+# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
+"""Client and server classes corresponding to protobuf-defined services."""
+import grpc
+
+from airavata_mft_sdk.odata import ODataCredential_pb2 as odata_dot_ODataCredential__pb2
+
+
+class ODataSecretServiceStub(object):
+    """Missing associated documentation comment in .proto file."""
+
+    def __init__(self, channel):
+        """Constructor.
+
+        Args:
+            channel: A grpc.Channel.
+        """
+        self.getODataSecret = channel.unary_unary(
+                '/org.apache.airavata.mft.credential.service.odata.ODataSecretService/getODataSecret',
+                request_serializer=odata_dot_ODataCredential__pb2.ODataSecretGetRequest.SerializeToString,
+                response_deserializer=odata_dot_ODataCredential__pb2.ODataSecret.FromString,
+                )
+        self.createODataSecret = channel.unary_unary(
+                '/org.apache.airavata.mft.credential.service.odata.ODataSecretService/createODataSecret',
+                request_serializer=odata_dot_ODataCredential__pb2.ODataSecretCreateRequest.SerializeToString,
+                response_deserializer=odata_dot_ODataCredential__pb2.ODataSecret.FromString,
+                )
+        self.updateODataSecret = channel.unary_unary(
+                '/org.apache.airavata.mft.credential.service.odata.ODataSecretService/updateODataSecret',
+                request_serializer=odata_dot_ODataCredential__pb2.ODataSecretUpdateRequest.SerializeToString,
+                response_deserializer=odata_dot_ODataCredential__pb2.ODataSecretUpdateResponse.FromString,
+                )
+        self.deleteODataSecret = channel.unary_unary(
+                '/org.apache.airavata.mft.credential.service.odata.ODataSecretService/deleteODataSecret',
+                request_serializer=odata_dot_ODataCredential__pb2.ODataSecretDeleteRequest.SerializeToString,
+                response_deserializer=odata_dot_ODataCredential__pb2.ODataSecretDeleteResponse.FromString,
+                )
+
+
+class ODataSecretServiceServicer(object):
+    """Missing associated documentation comment in .proto file."""
+
+    def getODataSecret(self, request, context):
+        """Missing associated documentation comment in .proto file."""
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
+
+    def createODataSecret(self, request, context):
+        """Missing associated documentation comment in .proto file."""
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
+
+    def updateODataSecret(self, request, context):
+        """Missing associated documentation comment in .proto file."""
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
+
+    def deleteODataSecret(self, request, context):
+        """Missing associated documentation comment in .proto file."""
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
+
+
+def add_ODataSecretServiceServicer_to_server(servicer, server):
+    rpc_method_handlers = {
+            'getODataSecret': grpc.unary_unary_rpc_method_handler(
+                    servicer.getODataSecret,
+                    request_deserializer=odata_dot_ODataCredential__pb2.ODataSecretGetRequest.FromString,
+                    response_serializer=odata_dot_ODataCredential__pb2.ODataSecret.SerializeToString,
+            ),
+            'createODataSecret': grpc.unary_unary_rpc_method_handler(
+                    servicer.createODataSecret,
+                    request_deserializer=odata_dot_ODataCredential__pb2.ODataSecretCreateRequest.FromString,
+                    response_serializer=odata_dot_ODataCredential__pb2.ODataSecret.SerializeToString,
+            ),
+            'updateODataSecret': grpc.unary_unary_rpc_method_handler(
+                    servicer.updateODataSecret,
+                    request_deserializer=odata_dot_ODataCredential__pb2.ODataSecretUpdateRequest.FromString,
+                    response_serializer=odata_dot_ODataCredential__pb2.ODataSecretUpdateResponse.SerializeToString,
+            ),
+            'deleteODataSecret': grpc.unary_unary_rpc_method_handler(
+                    servicer.deleteODataSecret,
+                    request_deserializer=odata_dot_ODataCredential__pb2.ODataSecretDeleteRequest.FromString,
+                    response_serializer=odata_dot_ODataCredential__pb2.ODataSecretDeleteResponse.SerializeToString,
+            ),
+    }
+    generic_handler = grpc.method_handlers_generic_handler(
+            'org.apache.airavata.mft.credential.service.odata.ODataSecretService', rpc_method_handlers)
+    server.add_generic_rpc_handlers((generic_handler,))
+
+
+ # This class is part of an EXPERIMENTAL API.
+class ODataSecretService(object):
+    """Missing associated documentation comment in .proto file."""
+
+    @staticmethod
+    def getODataSecret(request,
+            target,
+            options=(),
+            channel_credentials=None,
+            call_credentials=None,
+            insecure=False,
+            compression=None,
+            wait_for_ready=None,
+            timeout=None,
+            metadata=None):
+        return grpc.experimental.unary_unary(request, target, '/org.apache.airavata.mft.credential.service.odata.ODataSecretService/getODataSecret',
+            odata_dot_ODataCredential__pb2.ODataSecretGetRequest.SerializeToString,
+            odata_dot_ODataCredential__pb2.ODataSecret.FromString,
+            options, channel_credentials,
+            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
+
+    @staticmethod
+    def createODataSecret(request,
+            target,
+            options=(),
+            channel_credentials=None,
+            call_credentials=None,
+            insecure=False,
+            compression=None,
+            wait_for_ready=None,
+            timeout=None,
+            metadata=None):
+        return grpc.experimental.unary_unary(request, target, '/org.apache.airavata.mft.credential.service.odata.ODataSecretService/createODataSecret',
+            odata_dot_ODataCredential__pb2.ODataSecretCreateRequest.SerializeToString,
+            odata_dot_ODataCredential__pb2.ODataSecret.FromString,
+            options, channel_credentials,
+            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
+
+    @staticmethod
+    def updateODataSecret(request,
+            target,
+            options=(),
+            channel_credentials=None,
+            call_credentials=None,
+            insecure=False,
+            compression=None,
+            wait_for_ready=None,
+            timeout=None,
+            metadata=None):
+        return grpc.experimental.unary_unary(request, target, '/org.apache.airavata.mft.credential.service.odata.ODataSecretService/updateODataSecret',
+            odata_dot_ODataCredential__pb2.ODataSecretUpdateRequest.SerializeToString,
+            odata_dot_ODataCredential__pb2.ODataSecretUpdateResponse.FromString,
+            options, channel_credentials,
+            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
+
+    @staticmethod
+    def deleteODataSecret(request,
+            target,
+            options=(),
+            channel_credentials=None,
+            call_credentials=None,
+            insecure=False,
+            compression=None,
+            wait_for_ready=None,
+            timeout=None,
+            metadata=None):
+        return grpc.experimental.unary_unary(request, target, '/org.apache.airavata.mft.credential.service.odata.ODataSecretService/deleteODataSecret',
+            odata_dot_ODataCredential__pb2.ODataSecretDeleteRequest.SerializeToString,
+            odata_dot_ODataCredential__pb2.ODataSecretDeleteResponse.FromString,
+            options, channel_credentials,
+            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
diff --git a/python-sdk/src/airavata_mft_sdk/odata/ODataStorageService_pb2.py b/python-sdk/src/airavata_mft_sdk/odata/ODataStorageService_pb2.py
new file mode 100644
index 0000000..dc86977
--- /dev/null
+++ b/python-sdk/src/airavata_mft_sdk/odata/ODataStorageService_pb2.py
@@ -0,0 +1,29 @@
+# -*- coding: utf-8 -*-
+# Generated by the protocol buffer compiler.  DO NOT EDIT!
+# source: odata/ODataStorageService.proto
+"""Generated protocol buffer code."""
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import descriptor_pool as _descriptor_pool
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+from airavata_mft_sdk.odata import ODataStorage_pb2 as odata_dot_ODataStorage__pb2
+
+
+DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1fodata/ODataStorageService.proto\x12.org.apache.airavata.mft.resource.service.odata\x1a\x18odata/ODataStorage.proto2\x8f\x07\n\x13ODataStorageService\x12\xb1\x01\n\x10listODataStorage\x12M.org.apache.airavata.mft.resource.stubs.odata.storage.ODataStorageListRequest\x1aN.org.apache.airavata.mft.resource.stubs.odata.storage.ODataStorageListResponse\x12\xa3\x01\n\x0fgetODataStorage\x12L.org.apache.airavata.mft.resource.stubs.odata.storage.ODataStorageGetRequest\x1a\x42.org.apache.airavata.mft.resource.stubs.odata.storage.ODataStorage\x12\xa9\x01\n\x12\x63reateODataStorage\x12O.org.apache.airavata.mft.resource.stubs.odata.storage.ODataStorageCreateRequest\x1a\x42.org.apache.airavata.mft.resource.stubs.odata.storage.ODataStorage\x12\xb7\x01\n\x12updateODataStorage\x12O.org.apache.airavata.mft.resource.stubs.odata.storage.ODataStorageUpdateRequest\x1aP.org.apache.airavata.mft.resource.stubs.odata.storage.ODataStorageUpdateResponse\x12\xb7\x01\n\x12\x64\x65leteODataStorage\x12O.org.apache.airavata.mft.resource.stubs.odata.storage.ODataStorageDeleteRequest\x1aP.org.apache.airavata.mft.resource.stubs.odata.storage.ODataStorageDeleteResponseB\x02P\x01\x62\x06proto3')
+
+
+
+_ODATASTORAGESERVICE = DESCRIPTOR.services_by_name['ODataStorageService']
+if _descriptor._USE_C_DESCRIPTORS == False:
+
+  DESCRIPTOR._options = None
+  DESCRIPTOR._serialized_options = b'P\001'
+  _ODATASTORAGESERVICE._serialized_start=110
+  _ODATASTORAGESERVICE._serialized_end=1021
+# @@protoc_insertion_point(module_scope)
diff --git a/python-sdk/src/airavata_mft_sdk/odata/ODataStorageService_pb2_grpc.py b/python-sdk/src/airavata_mft_sdk/odata/ODataStorageService_pb2_grpc.py
new file mode 100644
index 0000000..7b5d5c2
--- /dev/null
+++ b/python-sdk/src/airavata_mft_sdk/odata/ODataStorageService_pb2_grpc.py
@@ -0,0 +1,200 @@
+# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
+"""Client and server classes corresponding to protobuf-defined services."""
+import grpc
+
+from airavata_mft_sdk.odata import ODataStorage_pb2 as odata_dot_ODataStorage__pb2
+
+
+class ODataStorageServiceStub(object):
+    """Missing associated documentation comment in .proto file."""
+
+    def __init__(self, channel):
+        """Constructor.
+
+        Args:
+            channel: A grpc.Channel.
+        """
+        self.listODataStorage = channel.unary_unary(
+                '/org.apache.airavata.mft.resource.service.odata.ODataStorageService/listODataStorage',
+                request_serializer=odata_dot_ODataStorage__pb2.ODataStorageListRequest.SerializeToString,
+                response_deserializer=odata_dot_ODataStorage__pb2.ODataStorageListResponse.FromString,
+                )
+        self.getODataStorage = channel.unary_unary(
+                '/org.apache.airavata.mft.resource.service.odata.ODataStorageService/getODataStorage',
+                request_serializer=odata_dot_ODataStorage__pb2.ODataStorageGetRequest.SerializeToString,
+                response_deserializer=odata_dot_ODataStorage__pb2.ODataStorage.FromString,
+                )
+        self.createODataStorage = channel.unary_unary(
+                '/org.apache.airavata.mft.resource.service.odata.ODataStorageService/createODataStorage',
+                request_serializer=odata_dot_ODataStorage__pb2.ODataStorageCreateRequest.SerializeToString,
+                response_deserializer=odata_dot_ODataStorage__pb2.ODataStorage.FromString,
+                )
+        self.updateODataStorage = channel.unary_unary(
+                '/org.apache.airavata.mft.resource.service.odata.ODataStorageService/updateODataStorage',
+                request_serializer=odata_dot_ODataStorage__pb2.ODataStorageUpdateRequest.SerializeToString,
+                response_deserializer=odata_dot_ODataStorage__pb2.ODataStorageUpdateResponse.FromString,
+                )
+        self.deleteODataStorage = channel.unary_unary(
+                '/org.apache.airavata.mft.resource.service.odata.ODataStorageService/deleteODataStorage',
+                request_serializer=odata_dot_ODataStorage__pb2.ODataStorageDeleteRequest.SerializeToString,
+                response_deserializer=odata_dot_ODataStorage__pb2.ODataStorageDeleteResponse.FromString,
+                )
+
+
+class ODataStorageServiceServicer(object):
+    """Missing associated documentation comment in .proto file."""
+
+    def listODataStorage(self, request, context):
+        """Storage
+
+        """
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
+
+    def getODataStorage(self, request, context):
+        """Missing associated documentation comment in .proto file."""
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
+
+    def createODataStorage(self, request, context):
+        """Missing associated documentation comment in .proto file."""
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
+
+    def updateODataStorage(self, request, context):
+        """Missing associated documentation comment in .proto file."""
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
+
+    def deleteODataStorage(self, request, context):
+        """Missing associated documentation comment in .proto file."""
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
+
+
+def add_ODataStorageServiceServicer_to_server(servicer, server):
+    rpc_method_handlers = {
+            'listODataStorage': grpc.unary_unary_rpc_method_handler(
+                    servicer.listODataStorage,
+                    request_deserializer=odata_dot_ODataStorage__pb2.ODataStorageListRequest.FromString,
+                    response_serializer=odata_dot_ODataStorage__pb2.ODataStorageListResponse.SerializeToString,
+            ),
+            'getODataStorage': grpc.unary_unary_rpc_method_handler(
+                    servicer.getODataStorage,
+                    request_deserializer=odata_dot_ODataStorage__pb2.ODataStorageGetRequest.FromString,
+                    response_serializer=odata_dot_ODataStorage__pb2.ODataStorage.SerializeToString,
+            ),
+            'createODataStorage': grpc.unary_unary_rpc_method_handler(
+                    servicer.createODataStorage,
+                    request_deserializer=odata_dot_ODataStorage__pb2.ODataStorageCreateRequest.FromString,
+                    response_serializer=odata_dot_ODataStorage__pb2.ODataStorage.SerializeToString,
+            ),
+            'updateODataStorage': grpc.unary_unary_rpc_method_handler(
+                    servicer.updateODataStorage,
+                    request_deserializer=odata_dot_ODataStorage__pb2.ODataStorageUpdateRequest.FromString,
+                    response_serializer=odata_dot_ODataStorage__pb2.ODataStorageUpdateResponse.SerializeToString,
+            ),
+            'deleteODataStorage': grpc.unary_unary_rpc_method_handler(
+                    servicer.deleteODataStorage,
+                    request_deserializer=odata_dot_ODataStorage__pb2.ODataStorageDeleteRequest.FromString,
+                    response_serializer=odata_dot_ODataStorage__pb2.ODataStorageDeleteResponse.SerializeToString,
+            ),
+    }
+    generic_handler = grpc.method_handlers_generic_handler(
+            'org.apache.airavata.mft.resource.service.odata.ODataStorageService', rpc_method_handlers)
+    server.add_generic_rpc_handlers((generic_handler,))
+
+
+ # This class is part of an EXPERIMENTAL API.
+class ODataStorageService(object):
+    """Missing associated documentation comment in .proto file."""
+
+    @staticmethod
+    def listODataStorage(request,
+            target,
+            options=(),
+            channel_credentials=None,
+            call_credentials=None,
+            insecure=False,
+            compression=None,
+            wait_for_ready=None,
+            timeout=None,
+            metadata=None):
+        return grpc.experimental.unary_unary(request, target, '/org.apache.airavata.mft.resource.service.odata.ODataStorageService/listODataStorage',
+            odata_dot_ODataStorage__pb2.ODataStorageListRequest.SerializeToString,
+            odata_dot_ODataStorage__pb2.ODataStorageListResponse.FromString,
+            options, channel_credentials,
+            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
+
+    @staticmethod
+    def getODataStorage(request,
+            target,
+            options=(),
+            channel_credentials=None,
+            call_credentials=None,
+            insecure=False,
+            compression=None,
+            wait_for_ready=None,
+            timeout=None,
+            metadata=None):
+        return grpc.experimental.unary_unary(request, target, '/org.apache.airavata.mft.resource.service.odata.ODataStorageService/getODataStorage',
+            odata_dot_ODataStorage__pb2.ODataStorageGetRequest.SerializeToString,
+            odata_dot_ODataStorage__pb2.ODataStorage.FromString,
+            options, channel_credentials,
+            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
+
+    @staticmethod
+    def createODataStorage(request,
+            target,
+            options=(),
+            channel_credentials=None,
+            call_credentials=None,
+            insecure=False,
+            compression=None,
+            wait_for_ready=None,
+            timeout=None,
+            metadata=None):
+        return grpc.experimental.unary_unary(request, target, '/org.apache.airavata.mft.resource.service.odata.ODataStorageService/createODataStorage',
+            odata_dot_ODataStorage__pb2.ODataStorageCreateRequest.SerializeToString,
+            odata_dot_ODataStorage__pb2.ODataStorage.FromString,
+            options, channel_credentials,
+            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
+
+    @staticmethod
+    def updateODataStorage(request,
+            target,
+            options=(),
+            channel_credentials=None,
+            call_credentials=None,
+            insecure=False,
+            compression=None,
+            wait_for_ready=None,
+            timeout=None,
+            metadata=None):
+        return grpc.experimental.unary_unary(request, target, '/org.apache.airavata.mft.resource.service.odata.ODataStorageService/updateODataStorage',
+            odata_dot_ODataStorage__pb2.ODataStorageUpdateRequest.SerializeToString,
+            odata_dot_ODataStorage__pb2.ODataStorageUpdateResponse.FromString,
+            options, channel_credentials,
+            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
+
+    @staticmethod
+    def deleteODataStorage(request,
+            target,
+            options=(),
+            channel_credentials=None,
+            call_credentials=None,
+            insecure=False,
+            compression=None,
+            wait_for_ready=None,
+            timeout=None,
+            metadata=None):
+        return grpc.experimental.unary_unary(request, target, '/org.apache.airavata.mft.resource.service.odata.ODataStorageService/deleteODataStorage',
+            odata_dot_ODataStorage__pb2.ODataStorageDeleteRequest.SerializeToString,
+            odata_dot_ODataStorage__pb2.ODataStorageDeleteResponse.FromString,
+            options, channel_credentials,
+            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
diff --git a/python-sdk/src/airavata_mft_sdk/odata/ODataStorage_pb2.py b/python-sdk/src/airavata_mft_sdk/odata/ODataStorage_pb2.py
new file mode 100644
index 0000000..7f2da1c
--- /dev/null
+++ b/python-sdk/src/airavata_mft_sdk/odata/ODataStorage_pb2.py
@@ -0,0 +1,115 @@
+# -*- coding: utf-8 -*-
+# Generated by the protocol buffer compiler.  DO NOT EDIT!
+# source: odata/ODataStorage.proto
+"""Generated protocol buffer code."""
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import descriptor_pool as _descriptor_pool
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+
+
+DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x18odata/ODataStorage.proto\x12\x34org.apache.airavata.mft.resource.stubs.odata.storage\"@\n\x0cODataStorage\x12\x11\n\tstorageId\x18\x01 \x01(\t\x12\x0f\n\x07\x62\x61seUrl\x18\x02 \x01(\t\x12\x0c\n\x04name\x18\x03 \x01(\t\"8\n\x17ODataStorageListRequest\x12\x0e\n\x06offset\x18\x01 \x01(\x05\x12\r\n\x05limit\x18\x02 \x01(\x05\"p\n\x18ODataStorageListResponse\x12T\n\x08storages\x18\x01 \x03(\x0b\x32\x42.org.apache.airavata.mft.resource.stubs.odata.storage.ODataStorage\"+\n\x16ODataStorageGetRequest\x12\x11\n\tstorageId\x18\x01 \x01(\t\"M\n\x19ODataStorageCreateRequest\x12\x0f\n\x07\x62\x61seUrl\x18\x01 \x01(\t\x12\x11\n\tstorageId\x18\x02 \x01(\t\x12\x0c\n\x04name\x18\x03 \x01(\t\"M\n\x19ODataStorageUpdateRequest\x12\x11\n\tstorageId\x18\x01 \x01(\t\x12\x0f\n\x07\x62\x61seUrl\x18\x02 \x01(\t\x12\x0c\n\x04name\x18\x03 \x01(\t\"/\n\x1aODataStorageUpdateResponse\x12\x11\n\tstorageId\x18\x01 \x01(\t\".\n\x19ODataStorageDeleteRequest\x12\x11\n\tstorageId\x18\x01 \x01(\t\",\n\x1aODataStorageDeleteResponse\x12\x0e\n\x06status\x18\x01 \x01(\x08\x42\x02P\x01\x62\x06proto3')
+
+
+
+_ODATASTORAGE = DESCRIPTOR.message_types_by_name['ODataStorage']
+_ODATASTORAGELISTREQUEST = DESCRIPTOR.message_types_by_name['ODataStorageListRequest']
+_ODATASTORAGELISTRESPONSE = DESCRIPTOR.message_types_by_name['ODataStorageListResponse']
+_ODATASTORAGEGETREQUEST = DESCRIPTOR.message_types_by_name['ODataStorageGetRequest']
+_ODATASTORAGECREATEREQUEST = DESCRIPTOR.message_types_by_name['ODataStorageCreateRequest']
+_ODATASTORAGEUPDATEREQUEST = DESCRIPTOR.message_types_by_name['ODataStorageUpdateRequest']
+_ODATASTORAGEUPDATERESPONSE = DESCRIPTOR.message_types_by_name['ODataStorageUpdateResponse']
+_ODATASTORAGEDELETEREQUEST = DESCRIPTOR.message_types_by_name['ODataStorageDeleteRequest']
+_ODATASTORAGEDELETERESPONSE = DESCRIPTOR.message_types_by_name['ODataStorageDeleteResponse']
+ODataStorage = _reflection.GeneratedProtocolMessageType('ODataStorage', (_message.Message,), {
+  'DESCRIPTOR' : _ODATASTORAGE,
+  '__module__' : 'odata.ODataStorage_pb2'
+  # @@protoc_insertion_point(class_scope:org.apache.airavata.mft.resource.stubs.odata.storage.ODataStorage)
+  })
+_sym_db.RegisterMessage(ODataStorage)
+
+ODataStorageListRequest = _reflection.GeneratedProtocolMessageType('ODataStorageListRequest', (_message.Message,), {
+  'DESCRIPTOR' : _ODATASTORAGELISTREQUEST,
+  '__module__' : 'odata.ODataStorage_pb2'
+  # @@protoc_insertion_point(class_scope:org.apache.airavata.mft.resource.stubs.odata.storage.ODataStorageListRequest)
+  })
+_sym_db.RegisterMessage(ODataStorageListRequest)
+
+ODataStorageListResponse = _reflection.GeneratedProtocolMessageType('ODataStorageListResponse', (_message.Message,), {
+  'DESCRIPTOR' : _ODATASTORAGELISTRESPONSE,
+  '__module__' : 'odata.ODataStorage_pb2'
+  # @@protoc_insertion_point(class_scope:org.apache.airavata.mft.resource.stubs.odata.storage.ODataStorageListResponse)
+  })
+_sym_db.RegisterMessage(ODataStorageListResponse)
+
+ODataStorageGetRequest = _reflection.GeneratedProtocolMessageType('ODataStorageGetRequest', (_message.Message,), {
+  'DESCRIPTOR' : _ODATASTORAGEGETREQUEST,
+  '__module__' : 'odata.ODataStorage_pb2'
+  # @@protoc_insertion_point(class_scope:org.apache.airavata.mft.resource.stubs.odata.storage.ODataStorageGetRequest)
+  })
+_sym_db.RegisterMessage(ODataStorageGetRequest)
+
+ODataStorageCreateRequest = _reflection.GeneratedProtocolMessageType('ODataStorageCreateRequest', (_message.Message,), {
+  'DESCRIPTOR' : _ODATASTORAGECREATEREQUEST,
+  '__module__' : 'odata.ODataStorage_pb2'
+  # @@protoc_insertion_point(class_scope:org.apache.airavata.mft.resource.stubs.odata.storage.ODataStorageCreateRequest)
+  })
+_sym_db.RegisterMessage(ODataStorageCreateRequest)
+
+ODataStorageUpdateRequest = _reflection.GeneratedProtocolMessageType('ODataStorageUpdateRequest', (_message.Message,), {
+  'DESCRIPTOR' : _ODATASTORAGEUPDATEREQUEST,
+  '__module__' : 'odata.ODataStorage_pb2'
+  # @@protoc_insertion_point(class_scope:org.apache.airavata.mft.resource.stubs.odata.storage.ODataStorageUpdateRequest)
+  })
+_sym_db.RegisterMessage(ODataStorageUpdateRequest)
+
+ODataStorageUpdateResponse = _reflection.GeneratedProtocolMessageType('ODataStorageUpdateResponse', (_message.Message,), {
+  'DESCRIPTOR' : _ODATASTORAGEUPDATERESPONSE,
+  '__module__' : 'odata.ODataStorage_pb2'
+  # @@protoc_insertion_point(class_scope:org.apache.airavata.mft.resource.stubs.odata.storage.ODataStorageUpdateResponse)
+  })
+_sym_db.RegisterMessage(ODataStorageUpdateResponse)
+
+ODataStorageDeleteRequest = _reflection.GeneratedProtocolMessageType('ODataStorageDeleteRequest', (_message.Message,), {
+  'DESCRIPTOR' : _ODATASTORAGEDELETEREQUEST,
+  '__module__' : 'odata.ODataStorage_pb2'
+  # @@protoc_insertion_point(class_scope:org.apache.airavata.mft.resource.stubs.odata.storage.ODataStorageDeleteRequest)
+  })
+_sym_db.RegisterMessage(ODataStorageDeleteRequest)
+
+ODataStorageDeleteResponse = _reflection.GeneratedProtocolMessageType('ODataStorageDeleteResponse', (_message.Message,), {
+  'DESCRIPTOR' : _ODATASTORAGEDELETERESPONSE,
+  '__module__' : 'odata.ODataStorage_pb2'
+  # @@protoc_insertion_point(class_scope:org.apache.airavata.mft.resource.stubs.odata.storage.ODataStorageDeleteResponse)
+  })
+_sym_db.RegisterMessage(ODataStorageDeleteResponse)
+
+if _descriptor._USE_C_DESCRIPTORS == False:
+
+  DESCRIPTOR._options = None
+  DESCRIPTOR._serialized_options = b'P\001'
+  _ODATASTORAGE._serialized_start=82
+  _ODATASTORAGE._serialized_end=146
+  _ODATASTORAGELISTREQUEST._serialized_start=148
+  _ODATASTORAGELISTREQUEST._serialized_end=204
+  _ODATASTORAGELISTRESPONSE._serialized_start=206
+  _ODATASTORAGELISTRESPONSE._serialized_end=318
+  _ODATASTORAGEGETREQUEST._serialized_start=320
+  _ODATASTORAGEGETREQUEST._serialized_end=363
+  _ODATASTORAGECREATEREQUEST._serialized_start=365
+  _ODATASTORAGECREATEREQUEST._serialized_end=442
+  _ODATASTORAGEUPDATEREQUEST._serialized_start=444
+  _ODATASTORAGEUPDATEREQUEST._serialized_end=521
+  _ODATASTORAGEUPDATERESPONSE._serialized_start=523
+  _ODATASTORAGEUPDATERESPONSE._serialized_end=570
+  _ODATASTORAGEDELETEREQUEST._serialized_start=572
+  _ODATASTORAGEDELETEREQUEST._serialized_end=618
+  _ODATASTORAGEDELETERESPONSE._serialized_start=620
+  _ODATASTORAGEDELETERESPONSE._serialized_end=664
+# @@protoc_insertion_point(module_scope)
diff --git a/python-sdk/src/airavata_mft_sdk/odata/ODataStorage_pb2_grpc.py b/python-sdk/src/airavata_mft_sdk/odata/ODataStorage_pb2_grpc.py
new file mode 100644
index 0000000..2daafff
--- /dev/null
+++ b/python-sdk/src/airavata_mft_sdk/odata/ODataStorage_pb2_grpc.py
@@ -0,0 +1,4 @@
+# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
+"""Client and server classes corresponding to protobuf-defined services."""
+import grpc
+
diff --git a/python-sdk/src/airavata_mft_sdk/odata/__init__.py b/python-sdk/src/airavata_mft_sdk/odata/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/python-sdk/src/airavata_mft_sdk/odata/__init__.py
diff --git a/python-sdk/src/airavata_mft_sdk/resource/ResourceService_pb2.py b/python-sdk/src/airavata_mft_sdk/resource/ResourceService_pb2.py
index ab5b1f2..970612b 100644
--- a/python-sdk/src/airavata_mft_sdk/resource/ResourceService_pb2.py
+++ b/python-sdk/src/airavata_mft_sdk/resource/ResourceService_pb2.py
@@ -21,10 +21,11 @@
 from airavata_mft_sdk.s3 import S3Storage_pb2 as s3_dot_S3Storage__pb2
 from airavata_mft_sdk.scp import SCPStorage_pb2 as scp_dot_SCPStorage__pb2
 from airavata_mft_sdk.swift import SwiftStorage_pb2 as swift_dot_SwiftStorage__pb2
+from airavata_mft_sdk.odata import ODataStorage_pb2 as odata_dot_ODataStorage__pb2
 import airavata_mft_sdk.CredCommon_pb2 as CredCommon__pb2
 
 
-DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1eresource/ResourceService.proto\x12-org.apache.airavata.mft.resource.stubs.common\x1a\x18\x61zure/AzureStorage.proto\x1a\x14\x62ox/BoxStorage.proto\x1a\x1c\x64ropbox/DropboxStorage.proto\x1a\x14\x66tp/FTPStorage.proto\x1a\x14gcs/GCSStorage.proto\x1a\x18local/LocalStorage.proto\x1a\x12s3/S3Storage.proto\x1a\x14scp/SCPStorage.proto\x1a\x18swift/SwiftStorage.proto\x1a\x10\x43redCommon.proto\"$\n\x0c\x46ileResource\x12\x14\n\x0cresourcePath\x18\x01 \x01(\t\")\n\x11\x44irectoryResource\x12\x14\n\x0cresourcePath\x18\x01 \x01(\t\"\x81\x08\n\x0fGenericResource\x12\x12\n\nresourceId\x18\x01 \x01(\t\x12K\n\x04\x66ile\x18\x02 \x01(\x0b\x32;.org.apache.airavata.mft.resource.stubs.common.FileResourceH\x00\x12U\n\tdirectory\x18\x03 \x01(\x0b\x32@.org.apache.airavata.mft.resource.stubs.common.DirectoryResourceH\x00\x12`\n\x0e\x64ropboxStorage\x18\x04 \x01(\x0b\x32\x46.org.apache.airavata.mft.resource.stubs.dropbox.storage.DropboxStorageH\x01\x12T\n\nftpStorage\x18\x05 \x01(\x0b\x32>.org.apache.airavata.mft.resource.stubs.ftp.storage.FTPStorageH\x01\x12T\n\ngcsStorage\x18\x06 \x01(\x0b\x32>.org.apache.airavata.mft.resource.stubs.gcs.storage.GCSStorageH\x01\x12Z\n\x0clocalStorage\x18\x07 \x01(\x0b\x32\x42.org.apache.airavata.mft.resource.stubs.local.storage.LocalStorageH\x01\x12Q\n\ts3Storage\x18\x08 \x01(\x0b\x32<.org.apache.airavata.mft.resource.stubs.s3.storage.S3StorageH\x01\x12T\n\nscpStorage\x18\t \x01(\x0b\x32>.org.apache.airavata.mft.resource.stubs.scp.storage.SCPStorageH\x01\x12T\n\nboxStorage\x18\n \x01(\x0b\x32>.org.apache.airavata.mft.resource.stubs.box.storage.BoxStorageH\x01\x12Z\n\x0c\x61zureStorage\x18\x0b \x01(\x0b\x32\x42.org.apache.airavata.mft.resource.stubs.azure.storage.AzureStorageH\x01\x12Z\n\x0cswiftStorage\x18\x0c \x01(\x0b\x32\x42.org.apache.airavata.mft.resource.stubs.swift.storage.SwiftStorageH\x01\x42\n\n\x08resourceB\t\n\x07storage\"n\n\x19GenericResourceGetRequest\x12\x12\n\nresourceId\x18\x01 \x01(\t\x12=\n\nauthzToken\x18\x02 \x01(\x0b\x32).org.apache.airavata.mft.common.AuthToken\"\xf7\x03\n\x1cGenericResourceCreateRequest\x12\x11\n\tstorageId\x18\x01 \x01(\t\x12K\n\x04\x66ile\x18\x02 \x01(\x0b\x32;.org.apache.airavata.mft.resource.stubs.common.FileResourceH\x00\x12U\n\tdirectory\x18\x03 \x01(\x0b\x32@.org.apache.airavata.mft.resource.stubs.common.DirectoryResourceH\x00\x12=\n\nauthzToken\x18\x04 \x01(\x0b\x32).org.apache.airavata.mft.common.AuthToken\x12l\n\x0bstorageType\x18\x05 \x01(\x0e\x32W.org.apache.airavata.mft.resource.stubs.common.GenericResourceCreateRequest.StorageType\"g\n\x0bStorageType\x12\x06\n\x02S3\x10\x00\x12\x07\n\x03SCP\x10\x01\x12\x07\n\x03\x46TP\x10\x02\x12\t\n\x05LOCAL\x10\x03\x12\x07\n\x03\x42OX\x10\x04\x12\x0b\n\x07\x44ROPBOX\x10\x05\x12\x07\n\x03GCS\x10\x06\x12\t\n\x05\x41ZURE\x10\x07\x12\t\n\x05SWIFT\x10\x08\x42\n\n\x08resource\"\xb4\x02\n\x1cGenericResourceUpdateRequest\x12\x12\n\nresourceId\x18\x01 \x01(\t\x12\x11\n\tstorageId\x18\x02 \x01(\t\x12K\n\x04\x66ile\x18\x03 \x01(\x0b\x32;.org.apache.airavata.mft.resource.stubs.common.FileResourceH\x00\x12U\n\tdirectory\x18\x04 \x01(\x0b\x32@.org.apache.airavata.mft.resource.stubs.common.DirectoryResourceH\x00\x12=\n\nauthzToken\x18\x05 \x01(\x0b\x32).org.apache.airavata.mft.common.AuthTokenB\n\n\x08resource\"3\n\x1dGenericResourceUpdateResponse\x12\x12\n\nresourceId\x18\x01 \x01(\t\"q\n\x1cGenericResourceDeleteRequest\x12\x12\n\nresourceId\x18\x01 \x01(\t\x12=\n\nauthzToken\x18\x02 \x01(\x0b\x32).org.apache.airavata.mft.common.AuthToken\"/\n\x1dGenericResourceDeleteResponse\x12\x0e\n\x06status\x18\x01 \x01(\x08\x32\xca\x05\n\x16GenericResourceService\x12\x9e\x01\n\x12getGenericResource\x12H.org.apache.airavata.mft.resource.stubs.common.GenericResourceGetRequest\x1a>.org.apache.airavata.mft.resource.stubs.common.GenericResource\x12\xa4\x01\n\x15\x63reateGenericResource\x12K.org.apache.airavata.mft.resource.stubs.common.GenericResourceCreateRequest\x1a>.org.apache.airavata.mft.resource.stubs.common.GenericResource\x12\xb2\x01\n\x15updateGenericResource\x12K.org.apache.airavata.mft.resource.stubs.common.GenericResourceUpdateRequest\x1aL.org.apache.airavata.mft.resource.stubs.common.GenericResourceUpdateResponse\x12\xb2\x01\n\x15\x64\x65leteGenericResource\x12K.org.apache.airavata.mft.resource.stubs.common.GenericResourceDeleteRequest\x1aL.org.apache.airavata.mft.resource.stubs.common.GenericResourceDeleteResponseB\x02P\x01\x62\x06proto3')
+DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1eresource/ResourceService.proto\x12-org.apache.airavata.mft.resource.stubs.common\x1a\x18\x61zure/AzureStorage.proto\x1a\x14\x62ox/BoxStorage.proto\x1a\x1c\x64ropbox/DropboxStorage.proto\x1a\x14\x66tp/FTPStorage.proto\x1a\x14gcs/GCSStorage.proto\x1a\x18local/LocalStorage.proto\x1a\x12s3/S3Storage.proto\x1a\x14scp/SCPStorage.proto\x1a\x18swift/SwiftStorage.proto\x1a\x18odata/ODataStorage.proto\x1a\x10\x43redCommon.proto\"$\n\x0c\x46ileResource\x12\x14\n\x0cresourcePath\x18\x01 \x01(\t\")\n\x11\x44irectoryResource\x12\x14\n\x0cresourcePath\x18\x01 \x01(\t\"\xdd\x08\n\x0fGenericResource\x12\x12\n\nresourceId\x18\x01 \x01(\t\x12K\n\x04\x66ile\x18\x02 \x01(\x0b\x32;.org.apache.airavata.mft.resource.stubs.common.FileResourceH\x00\x12U\n\tdirectory\x18\x03 \x01(\x0b\x32@.org.apache.airavata.mft.resource.stubs.common.DirectoryResourceH\x00\x12`\n\x0e\x64ropboxStorage\x18\x04 \x01(\x0b\x32\x46.org.apache.airavata.mft.resource.stubs.dropbox.storage.DropboxStorageH\x01\x12T\n\nftpStorage\x18\x05 \x01(\x0b\x32>.org.apache.airavata.mft.resource.stubs.ftp.storage.FTPStorageH\x01\x12T\n\ngcsStorage\x18\x06 \x01(\x0b\x32>.org.apache.airavata.mft.resource.stubs.gcs.storage.GCSStorageH\x01\x12Z\n\x0clocalStorage\x18\x07 \x01(\x0b\x32\x42.org.apache.airavata.mft.resource.stubs.local.storage.LocalStorageH\x01\x12Q\n\ts3Storage\x18\x08 \x01(\x0b\x32<.org.apache.airavata.mft.resource.stubs.s3.storage.S3StorageH\x01\x12T\n\nscpStorage\x18\t \x01(\x0b\x32>.org.apache.airavata.mft.resource.stubs.scp.storage.SCPStorageH\x01\x12T\n\nboxStorage\x18\n \x01(\x0b\x32>.org.apache.airavata.mft.resource.stubs.box.storage.BoxStorageH\x01\x12Z\n\x0c\x61zureStorage\x18\x0b \x01(\x0b\x32\x42.org.apache.airavata.mft.resource.stubs.azure.storage.AzureStorageH\x01\x12Z\n\x0cswiftStorage\x18\x0c \x01(\x0b\x32\x42.org.apache.airavata.mft.resource.stubs.swift.storage.SwiftStorageH\x01\x12Z\n\x0codataStorage\x18\r \x01(\x0b\x32\x42.org.apache.airavata.mft.resource.stubs.odata.storage.ODataStorageH\x01\x42\n\n\x08resourceB\t\n\x07storage\"n\n\x19GenericResourceGetRequest\x12\x12\n\nresourceId\x18\x01 \x01(\t\x12=\n\nauthzToken\x18\x02 \x01(\x0b\x32).org.apache.airavata.mft.common.AuthToken\"\x82\x04\n\x1cGenericResourceCreateRequest\x12\x11\n\tstorageId\x18\x01 \x01(\t\x12K\n\x04\x66ile\x18\x02 \x01(\x0b\x32;.org.apache.airavata.mft.resource.stubs.common.FileResourceH\x00\x12U\n\tdirectory\x18\x03 \x01(\x0b\x32@.org.apache.airavata.mft.resource.stubs.common.DirectoryResourceH\x00\x12=\n\nauthzToken\x18\x04 \x01(\x0b\x32).org.apache.airavata.mft.common.AuthToken\x12l\n\x0bstorageType\x18\x05 \x01(\x0e\x32W.org.apache.airavata.mft.resource.stubs.common.GenericResourceCreateRequest.StorageType\"r\n\x0bStorageType\x12\x06\n\x02S3\x10\x00\x12\x07\n\x03SCP\x10\x01\x12\x07\n\x03\x46TP\x10\x02\x12\t\n\x05LOCAL\x10\x03\x12\x07\n\x03\x42OX\x10\x04\x12\x0b\n\x07\x44ROPBOX\x10\x05\x12\x07\n\x03GCS\x10\x06\x12\t\n\x05\x41ZURE\x10\x07\x12\t\n\x05SWIFT\x10\x08\x12\t\n\x05ODATA\x10\tB\n\n\x08resource\"\xb4\x02\n\x1cGenericResourceUpdateRequest\x12\x12\n\nresourceId\x18\x01 \x01(\t\x12\x11\n\tstorageId\x18\x02 \x01(\t\x12K\n\x04\x66ile\x18\x03 \x01(\x0b\x32;.org.apache.airavata.mft.resource.stubs.common.FileResourceH\x00\x12U\n\tdirectory\x18\x04 \x01(\x0b\x32@.org.apache.airavata.mft.resource.stubs.common.DirectoryResourceH\x00\x12=\n\nauthzToken\x18\x05 \x01(\x0b\x32).org.apache.airavata.mft.common.AuthTokenB\n\n\x08resource\"3\n\x1dGenericResourceUpdateResponse\x12\x12\n\nresourceId\x18\x01 \x01(\t\"q\n\x1cGenericResourceDeleteRequest\x12\x12\n\nresourceId\x18\x01 \x01(\t\x12=\n\nauthzToken\x18\x02 \x01(\x0b\x32).org.apache.airavata.mft.common.AuthToken\"/\n\x1dGenericResourceDeleteResponse\x12\x0e\n\x06status\x18\x01 \x01(\x08\x32\xca\x05\n\x16GenericResourceService\x12\x9e\x01\n\x12getGenericResource\x12H.org.apache.airavata.mft.resource.stubs.common.GenericResourceGetRequest\x1a>.org.apache.airavata.mft.resource.stubs.common.GenericResource\x12\xa4\x01\n\x15\x63reateGenericResource\x12K.org.apache.airavata.mft.resource.stubs.common.GenericResourceCreateRequest\x1a>.org.apache.airavata.mft.resource.stubs.common.GenericResource\x12\xb2\x01\n\x15updateGenericResource\x12K.org.apache.airavata.mft.resource.stubs.common.GenericResourceUpdateRequest\x1aL.org.apache.airavata.mft.resource.stubs.common.GenericResourceUpdateResponse\x12\xb2\x01\n\x15\x64\x65leteGenericResource\x12K.org.apache.airavata.mft.resource.stubs.common.GenericResourceDeleteRequest\x1aL.org.apache.airavata.mft.resource.stubs.common.GenericResourceDeleteResponseB\x02P\x01\x62\x06proto3')
 
 
 
@@ -106,26 +107,26 @@
 
   DESCRIPTOR._options = None
   DESCRIPTOR._serialized_options = b'P\001'
-  _FILERESOURCE._serialized_start=315
-  _FILERESOURCE._serialized_end=351
-  _DIRECTORYRESOURCE._serialized_start=353
-  _DIRECTORYRESOURCE._serialized_end=394
-  _GENERICRESOURCE._serialized_start=397
-  _GENERICRESOURCE._serialized_end=1422
-  _GENERICRESOURCEGETREQUEST._serialized_start=1424
-  _GENERICRESOURCEGETREQUEST._serialized_end=1534
-  _GENERICRESOURCECREATEREQUEST._serialized_start=1537
-  _GENERICRESOURCECREATEREQUEST._serialized_end=2040
-  _GENERICRESOURCECREATEREQUEST_STORAGETYPE._serialized_start=1925
-  _GENERICRESOURCECREATEREQUEST_STORAGETYPE._serialized_end=2028
-  _GENERICRESOURCEUPDATEREQUEST._serialized_start=2043
-  _GENERICRESOURCEUPDATEREQUEST._serialized_end=2351
-  _GENERICRESOURCEUPDATERESPONSE._serialized_start=2353
-  _GENERICRESOURCEUPDATERESPONSE._serialized_end=2404
-  _GENERICRESOURCEDELETEREQUEST._serialized_start=2406
-  _GENERICRESOURCEDELETEREQUEST._serialized_end=2519
-  _GENERICRESOURCEDELETERESPONSE._serialized_start=2521
-  _GENERICRESOURCEDELETERESPONSE._serialized_end=2568
-  _GENERICRESOURCESERVICE._serialized_start=2571
-  _GENERICRESOURCESERVICE._serialized_end=3285
+  _FILERESOURCE._serialized_start=341
+  _FILERESOURCE._serialized_end=377
+  _DIRECTORYRESOURCE._serialized_start=379
+  _DIRECTORYRESOURCE._serialized_end=420
+  _GENERICRESOURCE._serialized_start=423
+  _GENERICRESOURCE._serialized_end=1540
+  _GENERICRESOURCEGETREQUEST._serialized_start=1542
+  _GENERICRESOURCEGETREQUEST._serialized_end=1652
+  _GENERICRESOURCECREATEREQUEST._serialized_start=1655
+  _GENERICRESOURCECREATEREQUEST._serialized_end=2169
+  _GENERICRESOURCECREATEREQUEST_STORAGETYPE._serialized_start=2043
+  _GENERICRESOURCECREATEREQUEST_STORAGETYPE._serialized_end=2157
+  _GENERICRESOURCEUPDATEREQUEST._serialized_start=2172
+  _GENERICRESOURCEUPDATEREQUEST._serialized_end=2480
+  _GENERICRESOURCEUPDATERESPONSE._serialized_start=2482
+  _GENERICRESOURCEUPDATERESPONSE._serialized_end=2533
+  _GENERICRESOURCEDELETEREQUEST._serialized_start=2535
+  _GENERICRESOURCEDELETEREQUEST._serialized_end=2648
+  _GENERICRESOURCEDELETERESPONSE._serialized_start=2650
+  _GENERICRESOURCEDELETERESPONSE._serialized_end=2697
+  _GENERICRESOURCESERVICE._serialized_start=2700
+  _GENERICRESOURCESERVICE._serialized_end=3414
 # @@protoc_insertion_point(module_scope)
diff --git a/python-sdk/src/airavata_mft_sdk/resourcesecretmap/StorageSecretMap_pb2.py b/python-sdk/src/airavata_mft_sdk/resourcesecretmap/StorageSecretMap_pb2.py
index 36a2993..7f0424f 100644
--- a/python-sdk/src/airavata_mft_sdk/resourcesecretmap/StorageSecretMap_pb2.py
+++ b/python-sdk/src/airavata_mft_sdk/resourcesecretmap/StorageSecretMap_pb2.py
@@ -15,7 +15,7 @@
 import airavata_mft_sdk.CredCommon_pb2 as CredCommon__pb2
 
 
-DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n(resourcesecretmap/StorageSecretMap.proto\x12\x33org.apache.airavata.mft.storage.stubs.storagesecret\x1a\x10\x43redCommon.proto\"\x87\x02\n\rStorageSecret\x12\n\n\x02id\x18\x01 \x01(\t\x12\x11\n\tstorageId\x18\x02 \x01(\t\x12\x10\n\x08secretId\x18\x03 \x01(\t\x12\\\n\x04type\x18\x04 \x01(\x0e\x32N.org.apache.airavata.mft.storage.stubs.storagesecret.StorageSecret.StorageType\"g\n\x0bStorageType\x12\x06\n\x02S3\x10\x00\x12\x07\n\x03SCP\x10\x01\x12\x07\n\x03\x46TP\x10\x02\x12\t\n\x05LOCAL\x10\x03\x12\x07\n\x03\x42OX\x10\x04\x12\x0b\n\x07\x44ROPBOX\x10\x05\x12\x07\n\x03GCS\x10\x06\x12\t\n\x05\x41ZURE\x10\x07\x12\t\n\x05SWIFT\x10\x08\"\xde\x01\n\x1aStorageSecretCreateRequest\x12\x11\n\tstorageId\x18\x01 \x01(\t\x12\x10\n\x08secretId\x18\x02 \x01(\t\x12\\\n\x04type\x18\x03 \x01(\x0e\x32N.org.apache.airavata.mft.storage.stubs.storagesecret.StorageSecret.StorageType\x12=\n\nauthzToken\x18\x04 \x01(\x0b\x32).org.apache.airavata.mft.common.AuthToken\"g\n\x1aStorageSecretDeleteRequest\x12\n\n\x02id\x18\x01 \x01(\t\x12=\n\nauthzToken\x18\x02 \x01(\x0b\x32).org.apache.airavata.mft.common.AuthToken\"-\n\x1bStorageSecretDeleteResponse\x12\x0e\n\x06status\x18\x01 \x01(\x08\"\xb6\x01\n\x1aStorageSecretUpdateRequest\x12Y\n\rstorageSecret\x18\x01 \x01(\x0b\x32\x42.org.apache.airavata.mft.storage.stubs.storagesecret.StorageSecret\x12=\n\nauthzToken\x18\x02 \x01(\x0b\x32).org.apache.airavata.mft.common.AuthToken\"x\n\x1bStorageSecretUpdateResponse\x12Y\n\rstorageSecret\x18\x01 \x01(\x0b\x32\x42.org.apache.airavata.mft.storage.stubs.storagesecret.StorageSecret\"d\n\x17StorageSecretGetRequest\x12\n\n\x02id\x18\x01 \x01(\t\x12=\n\nauthzToken\x18\x02 \x01(\x0b\x32).org.apache.airavata.mft.common.AuthToken\"\xcc\x01\n\x1aStorageSecretSearchRequest\x12\x11\n\tstorageId\x18\x01 \x01(\t\x12\\\n\x04type\x18\x02 \x01(\x0e\x32N.org.apache.airavata.mft.storage.stubs.storagesecret.StorageSecret.StorageType\x12=\n\nauthzToken\x18\x03 \x01(\x0b\x32).org.apache.airavata.mft.common.AuthToken\"x\n\x1bStorageSecretSearchResponse\x12Y\n\rstorageSecret\x18\x01 \x01(\x0b\x32\x42.org.apache.airavata.mft.storage.stubs.storagesecret.StorageSecret2\x9b\x07\n\x14StorageSecretService\x12\xa4\x01\n\x10getStorageSecret\x12L.org.apache.airavata.mft.storage.stubs.storagesecret.StorageSecretGetRequest\x1a\x42.org.apache.airavata.mft.storage.stubs.storagesecret.StorageSecret\x12\xb8\x01\n\x13searchStorageSecret\x12O.org.apache.airavata.mft.storage.stubs.storagesecret.StorageSecretSearchRequest\x1aP.org.apache.airavata.mft.storage.stubs.storagesecret.StorageSecretSearchResponse\x12\xaa\x01\n\x13\x63reateStorageSecret\x12O.org.apache.airavata.mft.storage.stubs.storagesecret.StorageSecretCreateRequest\x1a\x42.org.apache.airavata.mft.storage.stubs.storagesecret.StorageSecret\x12\xb8\x01\n\x13updateStorageSecret\x12O.org.apache.airavata.mft.storage.stubs.storagesecret.StorageSecretUpdateRequest\x1aP.org.apache.airavata.mft.storage.stubs.storagesecret.StorageSecretUpdateResponse\x12\xb8\x01\n\x13\x64\x65leteStorageSecret\x12O.org.apache.airavata.mft.storage.stubs.storagesecret.StorageSecretDeleteRequest\x1aP.org.apache.airavata.mft.storage.stubs.storagesecret.StorageSecretDeleteResponseB\x02P\x01\x62\x06proto3')
+DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n(resourcesecretmap/StorageSecretMap.proto\x12\x33org.apache.airavata.mft.storage.stubs.storagesecret\x1a\x10\x43redCommon.proto\"\x92\x02\n\rStorageSecret\x12\n\n\x02id\x18\x01 \x01(\t\x12\x11\n\tstorageId\x18\x02 \x01(\t\x12\x10\n\x08secretId\x18\x03 \x01(\t\x12\\\n\x04type\x18\x04 \x01(\x0e\x32N.org.apache.airavata.mft.storage.stubs.storagesecret.StorageSecret.StorageType\"r\n\x0bStorageType\x12\x06\n\x02S3\x10\x00\x12\x07\n\x03SCP\x10\x01\x12\x07\n\x03\x46TP\x10\x02\x12\t\n\x05LOCAL\x10\x03\x12\x07\n\x03\x42OX\x10\x04\x12\x0b\n\x07\x44ROPBOX\x10\x05\x12\x07\n\x03GCS\x10\x06\x12\t\n\x05\x41ZURE\x10\x07\x12\t\n\x05SWIFT\x10\x08\x12\t\n\x05ODATA\x10\t\"\xde\x01\n\x1aStorageSecretCreateRequest\x12\x11\n\tstorageId\x18\x01 \x01(\t\x12\x10\n\x08secretId\x18\x02 \x01(\t\x12\\\n\x04type\x18\x03 \x01(\x0e\x32N.org.apache.airavata.mft.storage.stubs.storagesecret.StorageSecret.StorageType\x12=\n\nauthzToken\x18\x04 \x01(\x0b\x32).org.apache.airavata.mft.common.AuthToken\"g\n\x1aStorageSecretDeleteRequest\x12\n\n\x02id\x18\x01 \x01(\t\x12=\n\nauthzToken\x18\x02 \x01(\x0b\x32).org.apache.airavata.mft.common.AuthToken\"-\n\x1bStorageSecretDeleteResponse\x12\x0e\n\x06status\x18\x01 \x01(\x08\"\xb6\x01\n\x1aStorageSecretUpdateRequest\x12Y\n\rstorageSecret\x18\x01 \x01(\x0b\x32\x42.org.apache.airavata.mft.storage.stubs.storagesecret.StorageSecret\x12=\n\nauthzToken\x18\x02 \x01(\x0b\x32).org.apache.airavata.mft.common.AuthToken\"x\n\x1bStorageSecretUpdateResponse\x12Y\n\rstorageSecret\x18\x01 \x01(\x0b\x32\x42.org.apache.airavata.mft.storage.stubs.storagesecret.StorageSecret\"d\n\x17StorageSecretGetRequest\x12\n\n\x02id\x18\x01 \x01(\t\x12=\n\nauthzToken\x18\x02 \x01(\x0b\x32).org.apache.airavata.mft.common.AuthToken\"\xcc\x01\n\x1aStorageSecretSearchRequest\x12\x11\n\tstorageId\x18\x01 \x01(\t\x12\\\n\x04type\x18\x02 \x01(\x0e\x32N.org.apache.airavata.mft.storage.stubs.storagesecret.StorageSecret.StorageType\x12=\n\nauthzToken\x18\x03 \x01(\x0b\x32).org.apache.airavata.mft.common.AuthToken\"x\n\x1bStorageSecretSearchResponse\x12Y\n\rstorageSecret\x18\x01 \x01(\x0b\x32\x42.org.apache.airavata.mft.storage.stubs.storagesecret.StorageSecret2\x9b\x07\n\x14StorageSecretService\x12\xa4\x01\n\x10getStorageSecret\x12L.org.apache.airavata.mft.storage.stubs.storagesecret.StorageSecretGetRequest\x1a\x42.org.apache.airavata.mft.storage.stubs.storagesecret.StorageSecret\x12\xb8\x01\n\x13searchStorageSecret\x12O.org.apache.airavata.mft.storage.stubs.storagesecret.StorageSecretSearchRequest\x1aP.org.apache.airavata.mft.storage.stubs.storagesecret.StorageSecretSearchResponse\x12\xaa\x01\n\x13\x63reateStorageSecret\x12O.org.apache.airavata.mft.storage.stubs.storagesecret.StorageSecretCreateRequest\x1a\x42.org.apache.airavata.mft.storage.stubs.storagesecret.StorageSecret\x12\xb8\x01\n\x13updateStorageSecret\x12O.org.apache.airavata.mft.storage.stubs.storagesecret.StorageSecretUpdateRequest\x1aP.org.apache.airavata.mft.storage.stubs.storagesecret.StorageSecretUpdateResponse\x12\xb8\x01\n\x13\x64\x65leteStorageSecret\x12O.org.apache.airavata.mft.storage.stubs.storagesecret.StorageSecretDeleteRequest\x1aP.org.apache.airavata.mft.storage.stubs.storagesecret.StorageSecretDeleteResponseB\x02P\x01\x62\x06proto3')
 
 
 
@@ -98,25 +98,25 @@
   DESCRIPTOR._options = None
   DESCRIPTOR._serialized_options = b'P\001'
   _STORAGESECRET._serialized_start=116
-  _STORAGESECRET._serialized_end=379
+  _STORAGESECRET._serialized_end=390
   _STORAGESECRET_STORAGETYPE._serialized_start=276
-  _STORAGESECRET_STORAGETYPE._serialized_end=379
-  _STORAGESECRETCREATEREQUEST._serialized_start=382
-  _STORAGESECRETCREATEREQUEST._serialized_end=604
-  _STORAGESECRETDELETEREQUEST._serialized_start=606
-  _STORAGESECRETDELETEREQUEST._serialized_end=709
-  _STORAGESECRETDELETERESPONSE._serialized_start=711
-  _STORAGESECRETDELETERESPONSE._serialized_end=756
-  _STORAGESECRETUPDATEREQUEST._serialized_start=759
-  _STORAGESECRETUPDATEREQUEST._serialized_end=941
-  _STORAGESECRETUPDATERESPONSE._serialized_start=943
-  _STORAGESECRETUPDATERESPONSE._serialized_end=1063
-  _STORAGESECRETGETREQUEST._serialized_start=1065
-  _STORAGESECRETGETREQUEST._serialized_end=1165
-  _STORAGESECRETSEARCHREQUEST._serialized_start=1168
-  _STORAGESECRETSEARCHREQUEST._serialized_end=1372
-  _STORAGESECRETSEARCHRESPONSE._serialized_start=1374
-  _STORAGESECRETSEARCHRESPONSE._serialized_end=1494
-  _STORAGESECRETSERVICE._serialized_start=1497
-  _STORAGESECRETSERVICE._serialized_end=2420
+  _STORAGESECRET_STORAGETYPE._serialized_end=390
+  _STORAGESECRETCREATEREQUEST._serialized_start=393
+  _STORAGESECRETCREATEREQUEST._serialized_end=615
+  _STORAGESECRETDELETEREQUEST._serialized_start=617
+  _STORAGESECRETDELETEREQUEST._serialized_end=720
+  _STORAGESECRETDELETERESPONSE._serialized_start=722
+  _STORAGESECRETDELETERESPONSE._serialized_end=767
+  _STORAGESECRETUPDATEREQUEST._serialized_start=770
+  _STORAGESECRETUPDATEREQUEST._serialized_end=952
+  _STORAGESECRETUPDATERESPONSE._serialized_start=954
+  _STORAGESECRETUPDATERESPONSE._serialized_end=1074
+  _STORAGESECRETGETREQUEST._serialized_start=1076
+  _STORAGESECRETGETREQUEST._serialized_end=1176
+  _STORAGESECRETSEARCHREQUEST._serialized_start=1179
+  _STORAGESECRETSEARCHREQUEST._serialized_end=1383
+  _STORAGESECRETSEARCHRESPONSE._serialized_start=1385
+  _STORAGESECRETSEARCHRESPONSE._serialized_end=1505
+  _STORAGESECRETSERVICE._serialized_start=1508
+  _STORAGESECRETSERVICE._serialized_end=2431
 # @@protoc_insertion_point(module_scope)
diff --git a/python-sdk/src/airavata_mft_sdk/s3/S3Credential_pb2.py b/python-sdk/src/airavata_mft_sdk/s3/S3Credential_pb2.py
index aeb5c3c..c36f6d4 100644
--- a/python-sdk/src/airavata_mft_sdk/s3/S3Credential_pb2.py
+++ b/python-sdk/src/airavata_mft_sdk/s3/S3Credential_pb2.py
@@ -15,7 +15,7 @@
 import airavata_mft_sdk.CredCommon_pb2 as CredCommon__pb2
 
 
-DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x15s3/S3Credential.proto\x12+org.apache.airavata.mft.credential.stubs.s3\x1a\x10\x43redCommon.proto\"B\n\x08S3Secret\x12\x10\n\x08secretId\x18\x01 \x01(\t\x12\x11\n\taccessKey\x18\x02 \x01(\t\x12\x11\n\tsecretKey\x18\x03 \x01(\t\"e\n\x12S3SecretGetRequest\x12\x10\n\x08secretId\x18\x01 \x01(\t\x12=\n\nauthzToken\x18\x02 \x01(\x0b\x32).org.apache.airavata.mft.common.AuthToken\"|\n\x15S3SecretCreateRequest\x12\x11\n\taccessKey\x18\x01 \x01(\t\x12\x11\n\tsecretKey\x18\x02 \x01(\t\x12=\n\nauthzToken\x18\x03 \x01(\x0b\x32).org.apache.airavata.mft.common.AuthToken\"\x8e\x01\n\x15S3SecretUpdateRequest\x12\x10\n\x08secretId\x18\x01 \x01(\t\x12\x11\n\taccessKey\x18\x02 \x01(\t\x12\x11\n\tsecretKey\x18\x03 \x01(\t\x12=\n\nauthzToken\x18\x04 \x01(\x0b\x32).org.apache.airavata.mft.common.AuthToken\"*\n\x16S3SecretUpdateResponse\x12\x10\n\x08secretId\x18\x01 \x01(\t\"h\n\x15S3SecretDeleteRequest\x12\x10\n\x08secretId\x18\x01 \x01(\t\x12=\n\nauthzToken\x18\x02 \x01(\x0b\x32).org.apache.airavata.mft.common.AuthToken\"(\n\x16S3SecretDeleteResponse\x12\x0e\n\x06status\x18\x01 \x01(\x08\x42\x02P\x01\x62\x06proto3')
+DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x15s3/S3Credential.proto\x12+org.apache.airavata.mft.credential.stubs.s3\x1a\x10\x43redCommon.proto\"X\n\x08S3Secret\x12\x10\n\x08secretId\x18\x01 \x01(\t\x12\x11\n\taccessKey\x18\x02 \x01(\t\x12\x11\n\tsecretKey\x18\x03 \x01(\t\x12\x14\n\x0csessionToken\x18\x04 \x01(\t\"e\n\x12S3SecretGetRequest\x12\x10\n\x08secretId\x18\x01 \x01(\t\x12=\n\nauthzToken\x18\x02 \x01(\x0b\x32).org.apache.airavata.mft.common.AuthToken\"\x92\x01\n\x15S3SecretCreateRequest\x12\x11\n\taccessKey\x18\x01 \x01(\t\x12\x11\n\tsecretKey\x18\x02 \x01(\t\x12\x14\n\x0csessionToken\x18\x03 \x01(\t\x12=\n\nauthzToken\x18\x04 \x01(\x0b\x32).org.apache.airavata.mft.common.AuthToken\"\xa4\x01\n\x15S3SecretUpdateRequest\x12\x10\n\x08secretId\x18\x01 \x01(\t\x12\x11\n\taccessKey\x18\x02 \x01(\t\x12\x11\n\tsecretKey\x18\x03 \x01(\t\x12\x14\n\x0csessionToken\x18\x04 \x01(\t\x12=\n\nauthzToken\x18\x05 \x01(\x0b\x32).org.apache.airavata.mft.common.AuthToken\"*\n\x16S3SecretUpdateResponse\x12\x10\n\x08secretId\x18\x01 \x01(\t\"h\n\x15S3SecretDeleteRequest\x12\x10\n\x08secretId\x18\x01 \x01(\t\x12=\n\nauthzToken\x18\x02 \x01(\x0b\x32).org.apache.airavata.mft.common.AuthToken\"(\n\x16S3SecretDeleteResponse\x12\x0e\n\x06status\x18\x01 \x01(\x08\x42\x02P\x01\x62\x06proto3')
 
 
 
@@ -80,17 +80,17 @@
   DESCRIPTOR._options = None
   DESCRIPTOR._serialized_options = b'P\001'
   _S3SECRET._serialized_start=88
-  _S3SECRET._serialized_end=154
-  _S3SECRETGETREQUEST._serialized_start=156
-  _S3SECRETGETREQUEST._serialized_end=257
-  _S3SECRETCREATEREQUEST._serialized_start=259
-  _S3SECRETCREATEREQUEST._serialized_end=383
-  _S3SECRETUPDATEREQUEST._serialized_start=386
-  _S3SECRETUPDATEREQUEST._serialized_end=528
-  _S3SECRETUPDATERESPONSE._serialized_start=530
-  _S3SECRETUPDATERESPONSE._serialized_end=572
-  _S3SECRETDELETEREQUEST._serialized_start=574
-  _S3SECRETDELETEREQUEST._serialized_end=678
-  _S3SECRETDELETERESPONSE._serialized_start=680
-  _S3SECRETDELETERESPONSE._serialized_end=720
+  _S3SECRET._serialized_end=176
+  _S3SECRETGETREQUEST._serialized_start=178
+  _S3SECRETGETREQUEST._serialized_end=279
+  _S3SECRETCREATEREQUEST._serialized_start=282
+  _S3SECRETCREATEREQUEST._serialized_end=428
+  _S3SECRETUPDATEREQUEST._serialized_start=431
+  _S3SECRETUPDATEREQUEST._serialized_end=595
+  _S3SECRETUPDATERESPONSE._serialized_start=597
+  _S3SECRETUPDATERESPONSE._serialized_end=639
+  _S3SECRETDELETEREQUEST._serialized_start=641
+  _S3SECRETDELETEREQUEST._serialized_end=745
+  _S3SECRETDELETERESPONSE._serialized_start=747
+  _S3SECRETDELETERESPONSE._serialized_end=787
 # @@protoc_insertion_point(module_scope)
diff --git a/python-sdk/src/airavata_mft_sdk/swift/SwiftCredential_pb2.py b/python-sdk/src/airavata_mft_sdk/swift/SwiftCredential_pb2.py
new file mode 100644
index 0000000..e7580a0
--- /dev/null
+++ b/python-sdk/src/airavata_mft_sdk/swift/SwiftCredential_pb2.py
@@ -0,0 +1,116 @@
+# -*- coding: utf-8 -*-
+# Generated by the protocol buffer compiler.  DO NOT EDIT!
+# source: swift/SwiftCredential.proto
+"""Generated protocol buffer code."""
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import descriptor_pool as _descriptor_pool
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+import airavata_mft_sdk.CredCommon_pb2 as CredCommon__pb2
+
+
+DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1bswift/SwiftCredential.proto\x12.org.apache.airavata.mft.credential.stubs.swift\x1a\x10\x43redCommon.proto\"^\n\x13SwiftPasswordSecret\x12\x10\n\x08userName\x18\x01 \x01(\t\x12\x10\n\x08password\x18\x02 \x01(\t\x12\x11\n\tprojectId\x18\x03 \x01(\t\x12\x10\n\x08\x64omainId\x18\x04 \x01(\t\"K\n\x19SwiftAuthCredentialSecret\x12\x14\n\x0c\x63redentialId\x18\x01 \x01(\t\x12\x18\n\x10\x63redentialSecret\x18\x02 \x01(\t\"\xf3\x01\n\x0bSwiftSecret\x12\x10\n\x08secretId\x18\x01 \x01(\t\x12]\n\x0epasswordSecret\x18\x02 \x01(\x0b\x32\x43.org.apache.airavata.mft.credential.stubs.swift.SwiftPasswordSecretH\x00\x12i\n\x14\x61uthCredentialSecret\x18\x03 \x01(\x0b\x32I.org.apache.airavata.mft.credential.stubs.swift.SwiftAuthCredentialSecretH\x00\x42\x08\n\x06secret\"h\n\x15SwiftSecretGetRequest\x12\x10\n\x08secretId\x18\x01 \x01(\t\x12=\n\nauthzToken\x18\x02 \x01(\x0b\x32).org.apache.airavata.mft.common.AuthToken\"\xad\x02\n\x18SwiftSecretCreateRequest\x12]\n\x0epasswordSecret\x18\x01 \x01(\x0b\x32\x43.org.apache.airavata.mft.credential.stubs.swift.SwiftPasswordSecretH\x00\x12i\n\x14\x61uthCredentialSecret\x18\x02 \x01(\x0b\x32I.org.apache.airavata.mft.credential.stubs.swift.SwiftAuthCredentialSecretH\x00\x12=\n\nauthzToken\x18\x03 \x01(\x0b\x32).org.apache.airavata.mft.common.AuthTokenB\x08\n\x06secret\"\xbf\x02\n\x18SwiftSecretUpdateRequest\x12\x10\n\x08secretId\x18\x01 \x01(\t\x12]\n\x0epasswordSecret\x18\x02 \x01(\x0b\x32\x43.org.apache.airavata.mft.credential.stubs.swift.SwiftPasswordSecretH\x00\x12i\n\x14\x61uthCredentialSecret\x18\x03 \x01(\x0b\x32I.org.apache.airavata.mft.credential.stubs.swift.SwiftAuthCredentialSecretH\x00\x12=\n\nauthzToken\x18\x04 \x01(\x0b\x32).org.apache.airavata.mft.common.AuthTokenB\x08\n\x06secret\"-\n\x19SwiftSecretUpdateResponse\x12\x10\n\x08secretId\x18\x01 \x01(\t\"k\n\x18SwiftSecretDeleteRequest\x12\x10\n\x08secretId\x18\x01 \x01(\t\x12=\n\nauthzToken\x18\x02 \x01(\x0b\x32).org.apache.airavata.mft.common.AuthToken\"+\n\x19SwiftSecretDeleteResponse\x12\x0e\n\x06status\x18\x01 \x01(\x08\x42\x02P\x01\x62\x06proto3')
+
+
+
+_SWIFTPASSWORDSECRET = DESCRIPTOR.message_types_by_name['SwiftPasswordSecret']
+_SWIFTAUTHCREDENTIALSECRET = DESCRIPTOR.message_types_by_name['SwiftAuthCredentialSecret']
+_SWIFTSECRET = DESCRIPTOR.message_types_by_name['SwiftSecret']
+_SWIFTSECRETGETREQUEST = DESCRIPTOR.message_types_by_name['SwiftSecretGetRequest']
+_SWIFTSECRETCREATEREQUEST = DESCRIPTOR.message_types_by_name['SwiftSecretCreateRequest']
+_SWIFTSECRETUPDATEREQUEST = DESCRIPTOR.message_types_by_name['SwiftSecretUpdateRequest']
+_SWIFTSECRETUPDATERESPONSE = DESCRIPTOR.message_types_by_name['SwiftSecretUpdateResponse']
+_SWIFTSECRETDELETEREQUEST = DESCRIPTOR.message_types_by_name['SwiftSecretDeleteRequest']
+_SWIFTSECRETDELETERESPONSE = DESCRIPTOR.message_types_by_name['SwiftSecretDeleteResponse']
+SwiftPasswordSecret = _reflection.GeneratedProtocolMessageType('SwiftPasswordSecret', (_message.Message,), {
+  'DESCRIPTOR' : _SWIFTPASSWORDSECRET,
+  '__module__' : 'swift.SwiftCredential_pb2'
+  # @@protoc_insertion_point(class_scope:org.apache.airavata.mft.credential.stubs.swift.SwiftPasswordSecret)
+  })
+_sym_db.RegisterMessage(SwiftPasswordSecret)
+
+SwiftAuthCredentialSecret = _reflection.GeneratedProtocolMessageType('SwiftAuthCredentialSecret', (_message.Message,), {
+  'DESCRIPTOR' : _SWIFTAUTHCREDENTIALSECRET,
+  '__module__' : 'swift.SwiftCredential_pb2'
+  # @@protoc_insertion_point(class_scope:org.apache.airavata.mft.credential.stubs.swift.SwiftAuthCredentialSecret)
+  })
+_sym_db.RegisterMessage(SwiftAuthCredentialSecret)
+
+SwiftSecret = _reflection.GeneratedProtocolMessageType('SwiftSecret', (_message.Message,), {
+  'DESCRIPTOR' : _SWIFTSECRET,
+  '__module__' : 'swift.SwiftCredential_pb2'
+  # @@protoc_insertion_point(class_scope:org.apache.airavata.mft.credential.stubs.swift.SwiftSecret)
+  })
+_sym_db.RegisterMessage(SwiftSecret)
+
+SwiftSecretGetRequest = _reflection.GeneratedProtocolMessageType('SwiftSecretGetRequest', (_message.Message,), {
+  'DESCRIPTOR' : _SWIFTSECRETGETREQUEST,
+  '__module__' : 'swift.SwiftCredential_pb2'
+  # @@protoc_insertion_point(class_scope:org.apache.airavata.mft.credential.stubs.swift.SwiftSecretGetRequest)
+  })
+_sym_db.RegisterMessage(SwiftSecretGetRequest)
+
+SwiftSecretCreateRequest = _reflection.GeneratedProtocolMessageType('SwiftSecretCreateRequest', (_message.Message,), {
+  'DESCRIPTOR' : _SWIFTSECRETCREATEREQUEST,
+  '__module__' : 'swift.SwiftCredential_pb2'
+  # @@protoc_insertion_point(class_scope:org.apache.airavata.mft.credential.stubs.swift.SwiftSecretCreateRequest)
+  })
+_sym_db.RegisterMessage(SwiftSecretCreateRequest)
+
+SwiftSecretUpdateRequest = _reflection.GeneratedProtocolMessageType('SwiftSecretUpdateRequest', (_message.Message,), {
+  'DESCRIPTOR' : _SWIFTSECRETUPDATEREQUEST,
+  '__module__' : 'swift.SwiftCredential_pb2'
+  # @@protoc_insertion_point(class_scope:org.apache.airavata.mft.credential.stubs.swift.SwiftSecretUpdateRequest)
+  })
+_sym_db.RegisterMessage(SwiftSecretUpdateRequest)
+
+SwiftSecretUpdateResponse = _reflection.GeneratedProtocolMessageType('SwiftSecretUpdateResponse', (_message.Message,), {
+  'DESCRIPTOR' : _SWIFTSECRETUPDATERESPONSE,
+  '__module__' : 'swift.SwiftCredential_pb2'
+  # @@protoc_insertion_point(class_scope:org.apache.airavata.mft.credential.stubs.swift.SwiftSecretUpdateResponse)
+  })
+_sym_db.RegisterMessage(SwiftSecretUpdateResponse)
+
+SwiftSecretDeleteRequest = _reflection.GeneratedProtocolMessageType('SwiftSecretDeleteRequest', (_message.Message,), {
+  'DESCRIPTOR' : _SWIFTSECRETDELETEREQUEST,
+  '__module__' : 'swift.SwiftCredential_pb2'
+  # @@protoc_insertion_point(class_scope:org.apache.airavata.mft.credential.stubs.swift.SwiftSecretDeleteRequest)
+  })
+_sym_db.RegisterMessage(SwiftSecretDeleteRequest)
+
+SwiftSecretDeleteResponse = _reflection.GeneratedProtocolMessageType('SwiftSecretDeleteResponse', (_message.Message,), {
+  'DESCRIPTOR' : _SWIFTSECRETDELETERESPONSE,
+  '__module__' : 'swift.SwiftCredential_pb2'
+  # @@protoc_insertion_point(class_scope:org.apache.airavata.mft.credential.stubs.swift.SwiftSecretDeleteResponse)
+  })
+_sym_db.RegisterMessage(SwiftSecretDeleteResponse)
+
+if _descriptor._USE_C_DESCRIPTORS == False:
+
+  DESCRIPTOR._options = None
+  DESCRIPTOR._serialized_options = b'P\001'
+  _SWIFTPASSWORDSECRET._serialized_start=97
+  _SWIFTPASSWORDSECRET._serialized_end=191
+  _SWIFTAUTHCREDENTIALSECRET._serialized_start=193
+  _SWIFTAUTHCREDENTIALSECRET._serialized_end=268
+  _SWIFTSECRET._serialized_start=271
+  _SWIFTSECRET._serialized_end=514
+  _SWIFTSECRETGETREQUEST._serialized_start=516
+  _SWIFTSECRETGETREQUEST._serialized_end=620
+  _SWIFTSECRETCREATEREQUEST._serialized_start=623
+  _SWIFTSECRETCREATEREQUEST._serialized_end=924
+  _SWIFTSECRETUPDATEREQUEST._serialized_start=927
+  _SWIFTSECRETUPDATEREQUEST._serialized_end=1246
+  _SWIFTSECRETUPDATERESPONSE._serialized_start=1248
+  _SWIFTSECRETUPDATERESPONSE._serialized_end=1293
+  _SWIFTSECRETDELETEREQUEST._serialized_start=1295
+  _SWIFTSECRETDELETEREQUEST._serialized_end=1402
+  _SWIFTSECRETDELETERESPONSE._serialized_start=1404
+  _SWIFTSECRETDELETERESPONSE._serialized_end=1447
+# @@protoc_insertion_point(module_scope)
diff --git a/python-sdk/src/airavata_mft_sdk/swift/SwiftCredential_pb2_grpc.py b/python-sdk/src/airavata_mft_sdk/swift/SwiftCredential_pb2_grpc.py
new file mode 100644
index 0000000..2daafff
--- /dev/null
+++ b/python-sdk/src/airavata_mft_sdk/swift/SwiftCredential_pb2_grpc.py
@@ -0,0 +1,4 @@
+# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
+"""Client and server classes corresponding to protobuf-defined services."""
+import grpc
+
diff --git a/python-sdk/src/airavata_mft_sdk/swift/SwiftSecretService_pb2.py b/python-sdk/src/airavata_mft_sdk/swift/SwiftSecretService_pb2.py
new file mode 100644
index 0000000..3c922fd
--- /dev/null
+++ b/python-sdk/src/airavata_mft_sdk/swift/SwiftSecretService_pb2.py
@@ -0,0 +1,29 @@
+# -*- coding: utf-8 -*-
+# Generated by the protocol buffer compiler.  DO NOT EDIT!
+# source: swift/SwiftSecretService.proto
+"""Generated protocol buffer code."""
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import descriptor_pool as _descriptor_pool
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+from airavata_mft_sdk.swift import SwiftCredential_pb2 as swift_dot_SwiftCredential__pb2
+
+
+DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1eswift/SwiftSecretService.proto\x12\x30org.apache.airavata.mft.credential.service.swift\x1a\x1bswift/SwiftCredential.proto2\x9e\x05\n\x12SwiftSecretService\x12\x94\x01\n\x0egetSwiftSecret\x12\x45.org.apache.airavata.mft.credential.stubs.swift.SwiftSecretGetRequest\x1a;.org.apache.airavata.mft.credential.stubs.swift.SwiftSecret\x12\x9a\x01\n\x11\x63reateSwiftSecret\x12H.org.apache.airavata.mft.credential.stubs.swift.SwiftSecretCreateRequest\x1a;.org.apache.airavata.mft.credential.stubs.swift.SwiftSecret\x12\xa8\x01\n\x11updateSwiftSecret\x12H.org.apache.airavata.mft.credential.stubs.swift.SwiftSecretUpdateRequest\x1aI.org.apache.airavata.mft.credential.stubs.swift.SwiftSecretUpdateResponse\x12\xa8\x01\n\x11\x64\x65leteSwiftSecret\x12H.org.apache.airavata.mft.credential.stubs.swift.SwiftSecretDeleteRequest\x1aI.org.apache.airavata.mft.credential.stubs.swift.SwiftSecretDeleteResponseB\x02P\x01\x62\x06proto3')
+
+
+
+_SWIFTSECRETSERVICE = DESCRIPTOR.services_by_name['SwiftSecretService']
+if _descriptor._USE_C_DESCRIPTORS == False:
+
+  DESCRIPTOR._options = None
+  DESCRIPTOR._serialized_options = b'P\001'
+  _SWIFTSECRETSERVICE._serialized_start=114
+  _SWIFTSECRETSERVICE._serialized_end=784
+# @@protoc_insertion_point(module_scope)
diff --git a/python-sdk/src/airavata_mft_sdk/swift/SwiftSecretService_pb2_grpc.py b/python-sdk/src/airavata_mft_sdk/swift/SwiftSecretService_pb2_grpc.py
new file mode 100644
index 0000000..5fdafdf
--- /dev/null
+++ b/python-sdk/src/airavata_mft_sdk/swift/SwiftSecretService_pb2_grpc.py
@@ -0,0 +1,165 @@
+# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
+"""Client and server classes corresponding to protobuf-defined services."""
+import grpc
+
+from airavata_mft_sdk.swift import SwiftCredential_pb2 as swift_dot_SwiftCredential__pb2
+
+
+class SwiftSecretServiceStub(object):
+    """Missing associated documentation comment in .proto file."""
+
+    def __init__(self, channel):
+        """Constructor.
+
+        Args:
+            channel: A grpc.Channel.
+        """
+        self.getSwiftSecret = channel.unary_unary(
+                '/org.apache.airavata.mft.credential.service.swift.SwiftSecretService/getSwiftSecret',
+                request_serializer=swift_dot_SwiftCredential__pb2.SwiftSecretGetRequest.SerializeToString,
+                response_deserializer=swift_dot_SwiftCredential__pb2.SwiftSecret.FromString,
+                )
+        self.createSwiftSecret = channel.unary_unary(
+                '/org.apache.airavata.mft.credential.service.swift.SwiftSecretService/createSwiftSecret',
+                request_serializer=swift_dot_SwiftCredential__pb2.SwiftSecretCreateRequest.SerializeToString,
+                response_deserializer=swift_dot_SwiftCredential__pb2.SwiftSecret.FromString,
+                )
+        self.updateSwiftSecret = channel.unary_unary(
+                '/org.apache.airavata.mft.credential.service.swift.SwiftSecretService/updateSwiftSecret',
+                request_serializer=swift_dot_SwiftCredential__pb2.SwiftSecretUpdateRequest.SerializeToString,
+                response_deserializer=swift_dot_SwiftCredential__pb2.SwiftSecretUpdateResponse.FromString,
+                )
+        self.deleteSwiftSecret = channel.unary_unary(
+                '/org.apache.airavata.mft.credential.service.swift.SwiftSecretService/deleteSwiftSecret',
+                request_serializer=swift_dot_SwiftCredential__pb2.SwiftSecretDeleteRequest.SerializeToString,
+                response_deserializer=swift_dot_SwiftCredential__pb2.SwiftSecretDeleteResponse.FromString,
+                )
+
+
+class SwiftSecretServiceServicer(object):
+    """Missing associated documentation comment in .proto file."""
+
+    def getSwiftSecret(self, request, context):
+        """Missing associated documentation comment in .proto file."""
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
+
+    def createSwiftSecret(self, request, context):
+        """Missing associated documentation comment in .proto file."""
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
+
+    def updateSwiftSecret(self, request, context):
+        """Missing associated documentation comment in .proto file."""
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
+
+    def deleteSwiftSecret(self, request, context):
+        """Missing associated documentation comment in .proto file."""
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
+
+
+def add_SwiftSecretServiceServicer_to_server(servicer, server):
+    rpc_method_handlers = {
+            'getSwiftSecret': grpc.unary_unary_rpc_method_handler(
+                    servicer.getSwiftSecret,
+                    request_deserializer=swift_dot_SwiftCredential__pb2.SwiftSecretGetRequest.FromString,
+                    response_serializer=swift_dot_SwiftCredential__pb2.SwiftSecret.SerializeToString,
+            ),
+            'createSwiftSecret': grpc.unary_unary_rpc_method_handler(
+                    servicer.createSwiftSecret,
+                    request_deserializer=swift_dot_SwiftCredential__pb2.SwiftSecretCreateRequest.FromString,
+                    response_serializer=swift_dot_SwiftCredential__pb2.SwiftSecret.SerializeToString,
+            ),
+            'updateSwiftSecret': grpc.unary_unary_rpc_method_handler(
+                    servicer.updateSwiftSecret,
+                    request_deserializer=swift_dot_SwiftCredential__pb2.SwiftSecretUpdateRequest.FromString,
+                    response_serializer=swift_dot_SwiftCredential__pb2.SwiftSecretUpdateResponse.SerializeToString,
+            ),
+            'deleteSwiftSecret': grpc.unary_unary_rpc_method_handler(
+                    servicer.deleteSwiftSecret,
+                    request_deserializer=swift_dot_SwiftCredential__pb2.SwiftSecretDeleteRequest.FromString,
+                    response_serializer=swift_dot_SwiftCredential__pb2.SwiftSecretDeleteResponse.SerializeToString,
+            ),
+    }
+    generic_handler = grpc.method_handlers_generic_handler(
+            'org.apache.airavata.mft.credential.service.swift.SwiftSecretService', rpc_method_handlers)
+    server.add_generic_rpc_handlers((generic_handler,))
+
+
+ # This class is part of an EXPERIMENTAL API.
+class SwiftSecretService(object):
+    """Missing associated documentation comment in .proto file."""
+
+    @staticmethod
+    def getSwiftSecret(request,
+            target,
+            options=(),
+            channel_credentials=None,
+            call_credentials=None,
+            insecure=False,
+            compression=None,
+            wait_for_ready=None,
+            timeout=None,
+            metadata=None):
+        return grpc.experimental.unary_unary(request, target, '/org.apache.airavata.mft.credential.service.swift.SwiftSecretService/getSwiftSecret',
+            swift_dot_SwiftCredential__pb2.SwiftSecretGetRequest.SerializeToString,
+            swift_dot_SwiftCredential__pb2.SwiftSecret.FromString,
+            options, channel_credentials,
+            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
+
+    @staticmethod
+    def createSwiftSecret(request,
+            target,
+            options=(),
+            channel_credentials=None,
+            call_credentials=None,
+            insecure=False,
+            compression=None,
+            wait_for_ready=None,
+            timeout=None,
+            metadata=None):
+        return grpc.experimental.unary_unary(request, target, '/org.apache.airavata.mft.credential.service.swift.SwiftSecretService/createSwiftSecret',
+            swift_dot_SwiftCredential__pb2.SwiftSecretCreateRequest.SerializeToString,
+            swift_dot_SwiftCredential__pb2.SwiftSecret.FromString,
+            options, channel_credentials,
+            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
+
+    @staticmethod
+    def updateSwiftSecret(request,
+            target,
+            options=(),
+            channel_credentials=None,
+            call_credentials=None,
+            insecure=False,
+            compression=None,
+            wait_for_ready=None,
+            timeout=None,
+            metadata=None):
+        return grpc.experimental.unary_unary(request, target, '/org.apache.airavata.mft.credential.service.swift.SwiftSecretService/updateSwiftSecret',
+            swift_dot_SwiftCredential__pb2.SwiftSecretUpdateRequest.SerializeToString,
+            swift_dot_SwiftCredential__pb2.SwiftSecretUpdateResponse.FromString,
+            options, channel_credentials,
+            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
+
+    @staticmethod
+    def deleteSwiftSecret(request,
+            target,
+            options=(),
+            channel_credentials=None,
+            call_credentials=None,
+            insecure=False,
+            compression=None,
+            wait_for_ready=None,
+            timeout=None,
+            metadata=None):
+        return grpc.experimental.unary_unary(request, target, '/org.apache.airavata.mft.credential.service.swift.SwiftSecretService/deleteSwiftSecret',
+            swift_dot_SwiftCredential__pb2.SwiftSecretDeleteRequest.SerializeToString,
+            swift_dot_SwiftCredential__pb2.SwiftSecretDeleteResponse.FromString,
+            options, channel_credentials,
+            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
diff --git a/python-sdk/src/airavata_mft_sdk/swift/SwiftStorageService_pb2.py b/python-sdk/src/airavata_mft_sdk/swift/SwiftStorageService_pb2.py
new file mode 100644
index 0000000..8279043
--- /dev/null
+++ b/python-sdk/src/airavata_mft_sdk/swift/SwiftStorageService_pb2.py
@@ -0,0 +1,29 @@
+# -*- coding: utf-8 -*-
+# Generated by the protocol buffer compiler.  DO NOT EDIT!
+# source: swift/SwiftStorageService.proto
+"""Generated protocol buffer code."""
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import descriptor_pool as _descriptor_pool
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+from airavata_mft_sdk.swift import SwiftStorage_pb2 as swift_dot_SwiftStorage__pb2
+
+
+DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1fswift/SwiftStorageService.proto\x12.org.apache.airavata.mft.resource.service.swift\x1a\x18swift/SwiftStorage.proto2\x8f\x07\n\x13SwiftStorageService\x12\xb1\x01\n\x10listSwiftStorage\x12M.org.apache.airavata.mft.resource.stubs.swift.storage.SwiftStorageListRequest\x1aN.org.apache.airavata.mft.resource.stubs.swift.storage.SwiftStorageListResponse\x12\xa3\x01\n\x0fgetSwiftStorage\x12L.org.apache.airavata.mft.resource.stubs.swift.storage.SwiftStorageGetRequest\x1a\x42.org.apache.airavata.mft.resource.stubs.swift.storage.SwiftStorage\x12\xa9\x01\n\x12\x63reateSwiftStorage\x12O.org.apache.airavata.mft.resource.stubs.swift.storage.SwiftStorageCreateRequest\x1a\x42.org.apache.airavata.mft.resource.stubs.swift.storage.SwiftStorage\x12\xb7\x01\n\x12updateSwiftStorage\x12O.org.apache.airavata.mft.resource.stubs.swift.storage.SwiftStorageUpdateRequest\x1aP.org.apache.airavata.mft.resource.stubs.swift.storage.SwiftStorageUpdateResponse\x12\xb7\x01\n\x12\x64\x65leteSwiftStorage\x12O.org.apache.airavata.mft.resource.stubs.swift.storage.SwiftStorageDeleteRequest\x1aP.org.apache.airavata.mft.resource.stubs.swift.storage.SwiftStorageDeleteResponseB\x02P\x01\x62\x06proto3')
+
+
+
+_SWIFTSTORAGESERVICE = DESCRIPTOR.services_by_name['SwiftStorageService']
+if _descriptor._USE_C_DESCRIPTORS == False:
+
+  DESCRIPTOR._options = None
+  DESCRIPTOR._serialized_options = b'P\001'
+  _SWIFTSTORAGESERVICE._serialized_start=110
+  _SWIFTSTORAGESERVICE._serialized_end=1021
+# @@protoc_insertion_point(module_scope)
diff --git a/python-sdk/src/airavata_mft_sdk/swift/SwiftStorageService_pb2_grpc.py b/python-sdk/src/airavata_mft_sdk/swift/SwiftStorageService_pb2_grpc.py
new file mode 100644
index 0000000..4d5293b
--- /dev/null
+++ b/python-sdk/src/airavata_mft_sdk/swift/SwiftStorageService_pb2_grpc.py
@@ -0,0 +1,200 @@
+# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
+"""Client and server classes corresponding to protobuf-defined services."""
+import grpc
+
+from airavata_mft_sdk.swift import SwiftStorage_pb2 as swift_dot_SwiftStorage__pb2
+
+
+class SwiftStorageServiceStub(object):
+    """Missing associated documentation comment in .proto file."""
+
+    def __init__(self, channel):
+        """Constructor.
+
+        Args:
+            channel: A grpc.Channel.
+        """
+        self.listSwiftStorage = channel.unary_unary(
+                '/org.apache.airavata.mft.resource.service.swift.SwiftStorageService/listSwiftStorage',
+                request_serializer=swift_dot_SwiftStorage__pb2.SwiftStorageListRequest.SerializeToString,
+                response_deserializer=swift_dot_SwiftStorage__pb2.SwiftStorageListResponse.FromString,
+                )
+        self.getSwiftStorage = channel.unary_unary(
+                '/org.apache.airavata.mft.resource.service.swift.SwiftStorageService/getSwiftStorage',
+                request_serializer=swift_dot_SwiftStorage__pb2.SwiftStorageGetRequest.SerializeToString,
+                response_deserializer=swift_dot_SwiftStorage__pb2.SwiftStorage.FromString,
+                )
+        self.createSwiftStorage = channel.unary_unary(
+                '/org.apache.airavata.mft.resource.service.swift.SwiftStorageService/createSwiftStorage',
+                request_serializer=swift_dot_SwiftStorage__pb2.SwiftStorageCreateRequest.SerializeToString,
+                response_deserializer=swift_dot_SwiftStorage__pb2.SwiftStorage.FromString,
+                )
+        self.updateSwiftStorage = channel.unary_unary(
+                '/org.apache.airavata.mft.resource.service.swift.SwiftStorageService/updateSwiftStorage',
+                request_serializer=swift_dot_SwiftStorage__pb2.SwiftStorageUpdateRequest.SerializeToString,
+                response_deserializer=swift_dot_SwiftStorage__pb2.SwiftStorageUpdateResponse.FromString,
+                )
+        self.deleteSwiftStorage = channel.unary_unary(
+                '/org.apache.airavata.mft.resource.service.swift.SwiftStorageService/deleteSwiftStorage',
+                request_serializer=swift_dot_SwiftStorage__pb2.SwiftStorageDeleteRequest.SerializeToString,
+                response_deserializer=swift_dot_SwiftStorage__pb2.SwiftStorageDeleteResponse.FromString,
+                )
+
+
+class SwiftStorageServiceServicer(object):
+    """Missing associated documentation comment in .proto file."""
+
+    def listSwiftStorage(self, request, context):
+        """Storage
+
+        """
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
+
+    def getSwiftStorage(self, request, context):
+        """Missing associated documentation comment in .proto file."""
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
+
+    def createSwiftStorage(self, request, context):
+        """Missing associated documentation comment in .proto file."""
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
+
+    def updateSwiftStorage(self, request, context):
+        """Missing associated documentation comment in .proto file."""
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
+
+    def deleteSwiftStorage(self, request, context):
+        """Missing associated documentation comment in .proto file."""
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
+
+
+def add_SwiftStorageServiceServicer_to_server(servicer, server):
+    rpc_method_handlers = {
+            'listSwiftStorage': grpc.unary_unary_rpc_method_handler(
+                    servicer.listSwiftStorage,
+                    request_deserializer=swift_dot_SwiftStorage__pb2.SwiftStorageListRequest.FromString,
+                    response_serializer=swift_dot_SwiftStorage__pb2.SwiftStorageListResponse.SerializeToString,
+            ),
+            'getSwiftStorage': grpc.unary_unary_rpc_method_handler(
+                    servicer.getSwiftStorage,
+                    request_deserializer=swift_dot_SwiftStorage__pb2.SwiftStorageGetRequest.FromString,
+                    response_serializer=swift_dot_SwiftStorage__pb2.SwiftStorage.SerializeToString,
+            ),
+            'createSwiftStorage': grpc.unary_unary_rpc_method_handler(
+                    servicer.createSwiftStorage,
+                    request_deserializer=swift_dot_SwiftStorage__pb2.SwiftStorageCreateRequest.FromString,
+                    response_serializer=swift_dot_SwiftStorage__pb2.SwiftStorage.SerializeToString,
+            ),
+            'updateSwiftStorage': grpc.unary_unary_rpc_method_handler(
+                    servicer.updateSwiftStorage,
+                    request_deserializer=swift_dot_SwiftStorage__pb2.SwiftStorageUpdateRequest.FromString,
+                    response_serializer=swift_dot_SwiftStorage__pb2.SwiftStorageUpdateResponse.SerializeToString,
+            ),
+            'deleteSwiftStorage': grpc.unary_unary_rpc_method_handler(
+                    servicer.deleteSwiftStorage,
+                    request_deserializer=swift_dot_SwiftStorage__pb2.SwiftStorageDeleteRequest.FromString,
+                    response_serializer=swift_dot_SwiftStorage__pb2.SwiftStorageDeleteResponse.SerializeToString,
+            ),
+    }
+    generic_handler = grpc.method_handlers_generic_handler(
+            'org.apache.airavata.mft.resource.service.swift.SwiftStorageService', rpc_method_handlers)
+    server.add_generic_rpc_handlers((generic_handler,))
+
+
+ # This class is part of an EXPERIMENTAL API.
+class SwiftStorageService(object):
+    """Missing associated documentation comment in .proto file."""
+
+    @staticmethod
+    def listSwiftStorage(request,
+            target,
+            options=(),
+            channel_credentials=None,
+            call_credentials=None,
+            insecure=False,
+            compression=None,
+            wait_for_ready=None,
+            timeout=None,
+            metadata=None):
+        return grpc.experimental.unary_unary(request, target, '/org.apache.airavata.mft.resource.service.swift.SwiftStorageService/listSwiftStorage',
+            swift_dot_SwiftStorage__pb2.SwiftStorageListRequest.SerializeToString,
+            swift_dot_SwiftStorage__pb2.SwiftStorageListResponse.FromString,
+            options, channel_credentials,
+            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
+
+    @staticmethod
+    def getSwiftStorage(request,
+            target,
+            options=(),
+            channel_credentials=None,
+            call_credentials=None,
+            insecure=False,
+            compression=None,
+            wait_for_ready=None,
+            timeout=None,
+            metadata=None):
+        return grpc.experimental.unary_unary(request, target, '/org.apache.airavata.mft.resource.service.swift.SwiftStorageService/getSwiftStorage',
+            swift_dot_SwiftStorage__pb2.SwiftStorageGetRequest.SerializeToString,
+            swift_dot_SwiftStorage__pb2.SwiftStorage.FromString,
+            options, channel_credentials,
+            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
+
+    @staticmethod
+    def createSwiftStorage(request,
+            target,
+            options=(),
+            channel_credentials=None,
+            call_credentials=None,
+            insecure=False,
+            compression=None,
+            wait_for_ready=None,
+            timeout=None,
+            metadata=None):
+        return grpc.experimental.unary_unary(request, target, '/org.apache.airavata.mft.resource.service.swift.SwiftStorageService/createSwiftStorage',
+            swift_dot_SwiftStorage__pb2.SwiftStorageCreateRequest.SerializeToString,
+            swift_dot_SwiftStorage__pb2.SwiftStorage.FromString,
+            options, channel_credentials,
+            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
+
+    @staticmethod
+    def updateSwiftStorage(request,
+            target,
+            options=(),
+            channel_credentials=None,
+            call_credentials=None,
+            insecure=False,
+            compression=None,
+            wait_for_ready=None,
+            timeout=None,
+            metadata=None):
+        return grpc.experimental.unary_unary(request, target, '/org.apache.airavata.mft.resource.service.swift.SwiftStorageService/updateSwiftStorage',
+            swift_dot_SwiftStorage__pb2.SwiftStorageUpdateRequest.SerializeToString,
+            swift_dot_SwiftStorage__pb2.SwiftStorageUpdateResponse.FromString,
+            options, channel_credentials,
+            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
+
+    @staticmethod
+    def deleteSwiftStorage(request,
+            target,
+            options=(),
+            channel_credentials=None,
+            call_credentials=None,
+            insecure=False,
+            compression=None,
+            wait_for_ready=None,
+            timeout=None,
+            metadata=None):
+        return grpc.experimental.unary_unary(request, target, '/org.apache.airavata.mft.resource.service.swift.SwiftStorageService/deleteSwiftStorage',
+            swift_dot_SwiftStorage__pb2.SwiftStorageDeleteRequest.SerializeToString,
+            swift_dot_SwiftStorage__pb2.SwiftStorageDeleteResponse.FromString,
+            options, channel_credentials,
+            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
diff --git a/python-sdk/src/airavata_mft_sdk/swift/SwiftStorage_pb2.py b/python-sdk/src/airavata_mft_sdk/swift/SwiftStorage_pb2.py
new file mode 100644
index 0000000..e6af4c6
--- /dev/null
+++ b/python-sdk/src/airavata_mft_sdk/swift/SwiftStorage_pb2.py
@@ -0,0 +1,115 @@
+# -*- coding: utf-8 -*-
+# Generated by the protocol buffer compiler.  DO NOT EDIT!
+# source: swift/SwiftStorage.proto
+"""Generated protocol buffer code."""
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import descriptor_pool as _descriptor_pool
+from google.protobuf import message as _message
+from google.protobuf import reflection as _reflection
+from google.protobuf import symbol_database as _symbol_database
+# @@protoc_insertion_point(imports)
+
+_sym_db = _symbol_database.Default()
+
+
+
+
+DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x18swift/SwiftStorage.proto\x12\x34org.apache.airavata.mft.resource.stubs.swift.storage\"}\n\x0cSwiftStorage\x12\x11\n\tstorageId\x18\x01 \x01(\t\x12\x11\n\tcontainer\x18\x02 \x01(\t\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\x10\n\x08\x65ndpoint\x18\x04 \x01(\t\x12\x0e\n\x06region\x18\x05 \x01(\t\x12\x17\n\x0fkeystoneVersion\x18\x06 \x01(\x05\"8\n\x17SwiftStorageListRequest\x12\x0e\n\x06offset\x18\x01 \x01(\x05\x12\r\n\x05limit\x18\x02 \x01(\x05\"p\n\x18SwiftStorageListResponse\x12T\n\x08storages\x18\x01 \x03(\x0b\x32\x42.org.apache.airavata.mft.resource.stubs.swift.storage.SwiftStorage\"+\n\x16SwiftStorageGetRequest\x12\x11\n\tstorageId\x18\x01 \x01(\t\"\x8a\x01\n\x19SwiftStorageCreateRequest\x12\x11\n\tstorageId\x18\x01 \x01(\t\x12\x11\n\tcontainer\x18\x02 \x01(\t\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\x10\n\x08\x65ndpoint\x18\x04 \x01(\t\x12\x0e\n\x06region\x18\x05 \x01(\t\x12\x17\n\x0fkeystoneVersion\x18\x06 \x01(\x05\"\x8a\x01\n\x19SwiftStorageUpdateRequest\x12\x11\n\tstorageId\x18\x01 \x01(\t\x12\x11\n\tcontainer\x18\x02 \x01(\t\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\x10\n\x08\x65ndpoint\x18\x04 \x01(\t\x12\x0e\n\x06region\x18\x05 \x01(\t\x12\x17\n\x0fkeystoneVersion\x18\x06 \x01(\x05\"/\n\x1aSwiftStorageUpdateResponse\x12\x11\n\tstorageId\x18\x01 \x01(\t\".\n\x19SwiftStorageDeleteRequest\x12\x11\n\tstorageId\x18\x01 \x01(\t\",\n\x1aSwiftStorageDeleteResponse\x12\x0e\n\x06status\x18\x01 \x01(\x08\x42\x02P\x01\x62\x06proto3')
+
+
+
+_SWIFTSTORAGE = DESCRIPTOR.message_types_by_name['SwiftStorage']
+_SWIFTSTORAGELISTREQUEST = DESCRIPTOR.message_types_by_name['SwiftStorageListRequest']
+_SWIFTSTORAGELISTRESPONSE = DESCRIPTOR.message_types_by_name['SwiftStorageListResponse']
+_SWIFTSTORAGEGETREQUEST = DESCRIPTOR.message_types_by_name['SwiftStorageGetRequest']
+_SWIFTSTORAGECREATEREQUEST = DESCRIPTOR.message_types_by_name['SwiftStorageCreateRequest']
+_SWIFTSTORAGEUPDATEREQUEST = DESCRIPTOR.message_types_by_name['SwiftStorageUpdateRequest']
+_SWIFTSTORAGEUPDATERESPONSE = DESCRIPTOR.message_types_by_name['SwiftStorageUpdateResponse']
+_SWIFTSTORAGEDELETEREQUEST = DESCRIPTOR.message_types_by_name['SwiftStorageDeleteRequest']
+_SWIFTSTORAGEDELETERESPONSE = DESCRIPTOR.message_types_by_name['SwiftStorageDeleteResponse']
+SwiftStorage = _reflection.GeneratedProtocolMessageType('SwiftStorage', (_message.Message,), {
+  'DESCRIPTOR' : _SWIFTSTORAGE,
+  '__module__' : 'swift.SwiftStorage_pb2'
+  # @@protoc_insertion_point(class_scope:org.apache.airavata.mft.resource.stubs.swift.storage.SwiftStorage)
+  })
+_sym_db.RegisterMessage(SwiftStorage)
+
+SwiftStorageListRequest = _reflection.GeneratedProtocolMessageType('SwiftStorageListRequest', (_message.Message,), {
+  'DESCRIPTOR' : _SWIFTSTORAGELISTREQUEST,
+  '__module__' : 'swift.SwiftStorage_pb2'
+  # @@protoc_insertion_point(class_scope:org.apache.airavata.mft.resource.stubs.swift.storage.SwiftStorageListRequest)
+  })
+_sym_db.RegisterMessage(SwiftStorageListRequest)
+
+SwiftStorageListResponse = _reflection.GeneratedProtocolMessageType('SwiftStorageListResponse', (_message.Message,), {
+  'DESCRIPTOR' : _SWIFTSTORAGELISTRESPONSE,
+  '__module__' : 'swift.SwiftStorage_pb2'
+  # @@protoc_insertion_point(class_scope:org.apache.airavata.mft.resource.stubs.swift.storage.SwiftStorageListResponse)
+  })
+_sym_db.RegisterMessage(SwiftStorageListResponse)
+
+SwiftStorageGetRequest = _reflection.GeneratedProtocolMessageType('SwiftStorageGetRequest', (_message.Message,), {
+  'DESCRIPTOR' : _SWIFTSTORAGEGETREQUEST,
+  '__module__' : 'swift.SwiftStorage_pb2'
+  # @@protoc_insertion_point(class_scope:org.apache.airavata.mft.resource.stubs.swift.storage.SwiftStorageGetRequest)
+  })
+_sym_db.RegisterMessage(SwiftStorageGetRequest)
+
+SwiftStorageCreateRequest = _reflection.GeneratedProtocolMessageType('SwiftStorageCreateRequest', (_message.Message,), {
+  'DESCRIPTOR' : _SWIFTSTORAGECREATEREQUEST,
+  '__module__' : 'swift.SwiftStorage_pb2'
+  # @@protoc_insertion_point(class_scope:org.apache.airavata.mft.resource.stubs.swift.storage.SwiftStorageCreateRequest)
+  })
+_sym_db.RegisterMessage(SwiftStorageCreateRequest)
+
+SwiftStorageUpdateRequest = _reflection.GeneratedProtocolMessageType('SwiftStorageUpdateRequest', (_message.Message,), {
+  'DESCRIPTOR' : _SWIFTSTORAGEUPDATEREQUEST,
+  '__module__' : 'swift.SwiftStorage_pb2'
+  # @@protoc_insertion_point(class_scope:org.apache.airavata.mft.resource.stubs.swift.storage.SwiftStorageUpdateRequest)
+  })
+_sym_db.RegisterMessage(SwiftStorageUpdateRequest)
+
+SwiftStorageUpdateResponse = _reflection.GeneratedProtocolMessageType('SwiftStorageUpdateResponse', (_message.Message,), {
+  'DESCRIPTOR' : _SWIFTSTORAGEUPDATERESPONSE,
+  '__module__' : 'swift.SwiftStorage_pb2'
+  # @@protoc_insertion_point(class_scope:org.apache.airavata.mft.resource.stubs.swift.storage.SwiftStorageUpdateResponse)
+  })
+_sym_db.RegisterMessage(SwiftStorageUpdateResponse)
+
+SwiftStorageDeleteRequest = _reflection.GeneratedProtocolMessageType('SwiftStorageDeleteRequest', (_message.Message,), {
+  'DESCRIPTOR' : _SWIFTSTORAGEDELETEREQUEST,
+  '__module__' : 'swift.SwiftStorage_pb2'
+  # @@protoc_insertion_point(class_scope:org.apache.airavata.mft.resource.stubs.swift.storage.SwiftStorageDeleteRequest)
+  })
+_sym_db.RegisterMessage(SwiftStorageDeleteRequest)
+
+SwiftStorageDeleteResponse = _reflection.GeneratedProtocolMessageType('SwiftStorageDeleteResponse', (_message.Message,), {
+  'DESCRIPTOR' : _SWIFTSTORAGEDELETERESPONSE,
+  '__module__' : 'swift.SwiftStorage_pb2'
+  # @@protoc_insertion_point(class_scope:org.apache.airavata.mft.resource.stubs.swift.storage.SwiftStorageDeleteResponse)
+  })
+_sym_db.RegisterMessage(SwiftStorageDeleteResponse)
+
+if _descriptor._USE_C_DESCRIPTORS == False:
+
+  DESCRIPTOR._options = None
+  DESCRIPTOR._serialized_options = b'P\001'
+  _SWIFTSTORAGE._serialized_start=82
+  _SWIFTSTORAGE._serialized_end=207
+  _SWIFTSTORAGELISTREQUEST._serialized_start=209
+  _SWIFTSTORAGELISTREQUEST._serialized_end=265
+  _SWIFTSTORAGELISTRESPONSE._serialized_start=267
+  _SWIFTSTORAGELISTRESPONSE._serialized_end=379
+  _SWIFTSTORAGEGETREQUEST._serialized_start=381
+  _SWIFTSTORAGEGETREQUEST._serialized_end=424
+  _SWIFTSTORAGECREATEREQUEST._serialized_start=427
+  _SWIFTSTORAGECREATEREQUEST._serialized_end=565
+  _SWIFTSTORAGEUPDATEREQUEST._serialized_start=568
+  _SWIFTSTORAGEUPDATEREQUEST._serialized_end=706
+  _SWIFTSTORAGEUPDATERESPONSE._serialized_start=708
+  _SWIFTSTORAGEUPDATERESPONSE._serialized_end=755
+  _SWIFTSTORAGEDELETEREQUEST._serialized_start=757
+  _SWIFTSTORAGEDELETEREQUEST._serialized_end=803
+  _SWIFTSTORAGEDELETERESPONSE._serialized_start=805
+  _SWIFTSTORAGEDELETERESPONSE._serialized_end=849
+# @@protoc_insertion_point(module_scope)
diff --git a/python-sdk/src/airavata_mft_sdk/swift/SwiftStorage_pb2_grpc.py b/python-sdk/src/airavata_mft_sdk/swift/SwiftStorage_pb2_grpc.py
new file mode 100644
index 0000000..2daafff
--- /dev/null
+++ b/python-sdk/src/airavata_mft_sdk/swift/SwiftStorage_pb2_grpc.py
@@ -0,0 +1,4 @@
+# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
+"""Client and server classes corresponding to protobuf-defined services."""
+import grpc
+
diff --git a/python-sdk/src/airavata_mft_sdk/swift/__init__.py b/python-sdk/src/airavata_mft_sdk/swift/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/python-sdk/src/airavata_mft_sdk/swift/__init__.py