You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by ma...@apache.org on 2017/08/04 20:10:54 UTC

[37/51] [partial] airavata git commit: AIRAVATA-2505 Upgrade Airavata to Thrift 0.10.0

http://git-wip-us.apache.org/repos/asf/airavata/blob/9d165bd8/airavata-api/airavata-client-sdks/airavata-python-sdk/src/main/resources/lib/apache/airavata/model/experiment/ttypes.py
----------------------------------------------------------------------
diff --git a/airavata-api/airavata-client-sdks/airavata-python-sdk/src/main/resources/lib/apache/airavata/model/experiment/ttypes.py b/airavata-api/airavata-client-sdks/airavata-python-sdk/src/main/resources/lib/apache/airavata/model/experiment/ttypes.py
index 9144a24..e4e2e45 100644
--- a/airavata-api/airavata-client-sdks/airavata-python-sdk/src/main/resources/lib/apache/airavata/model/experiment/ttypes.py
+++ b/airavata-api/airavata-client-sdks/airavata-python-sdk/src/main/resources/lib/apache/airavata/model/experiment/ttypes.py
@@ -1,1132 +1,1061 @@
 #
-# Autogenerated by Thrift Compiler (0.9.3)
+# Autogenerated by Thrift Compiler (0.10.0)
 #
 # DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
 #
 #  options string: py
 #
 
-from thrift.Thrift import TType, TMessageType, TException, TApplicationException
+from thrift.Thrift import TType, TMessageType, TFrozenDict, TException, TApplicationException
+from thrift.protocol.TProtocol import TProtocolException
+import sys
 import apache.airavata.model.commons.ttypes
 import apache.airavata.model.application.io.ttypes
 import apache.airavata.model.scheduling.ttypes
 import apache.airavata.model.status.ttypes
 import apache.airavata.model.process.ttypes
 
-
 from thrift.transport import TTransport
-from thrift.protocol import TBinaryProtocol, TProtocol
-try:
-  from thrift.protocol import fastbinary
-except:
-  fastbinary = None
-
-
-class ExperimentType:
-  SINGLE_APPLICATION = 0
-  WORKFLOW = 1
-
-  _VALUES_TO_NAMES = {
-    0: "SINGLE_APPLICATION",
-    1: "WORKFLOW",
-  }
-
-  _NAMES_TO_VALUES = {
-    "SINGLE_APPLICATION": 0,
-    "WORKFLOW": 1,
-  }
-
-class ExperimentSearchFields:
-  EXPERIMENT_NAME = 0
-  EXPERIMENT_DESC = 1
-  APPLICATION_ID = 2
-  FROM_DATE = 3
-  TO_DATE = 4
-  STATUS = 5
-  PROJECT_ID = 6
-
-  _VALUES_TO_NAMES = {
-    0: "EXPERIMENT_NAME",
-    1: "EXPERIMENT_DESC",
-    2: "APPLICATION_ID",
-    3: "FROM_DATE",
-    4: "TO_DATE",
-    5: "STATUS",
-    6: "PROJECT_ID",
-  }
-
-  _NAMES_TO_VALUES = {
-    "EXPERIMENT_NAME": 0,
-    "EXPERIMENT_DESC": 1,
-    "APPLICATION_ID": 2,
-    "FROM_DATE": 3,
-    "TO_DATE": 4,
-    "STATUS": 5,
-    "PROJECT_ID": 6,
-  }
-
-class ProjectSearchFields:
-  PROJECT_NAME = 0
-  PROJECT_DESCRIPTION = 1
-
-  _VALUES_TO_NAMES = {
-    0: "PROJECT_NAME",
-    1: "PROJECT_DESCRIPTION",
-  }
-
-  _NAMES_TO_VALUES = {
-    "PROJECT_NAME": 0,
-    "PROJECT_DESCRIPTION": 1,
-  }
-
-
-class UserConfigurationDataModel:
-  """
-  A structure holding the experiment configuration.
-
-
-
-  Attributes:
-   - airavataAutoSchedule
-   - overrideManualScheduledParams
-   - shareExperimentPublicly
-   - computationalResourceScheduling
-   - throttleResources
-   - userDN
-   - generateCert
-   - storageId
-   - experimentDataDir
-   - useUserCRPref
-  """
-
-  thrift_spec = (
-    None, # 0
-    (1, TType.BOOL, 'airavataAutoSchedule', None, False, ), # 1
-    (2, TType.BOOL, 'overrideManualScheduledParams', None, False, ), # 2
-    (3, TType.BOOL, 'shareExperimentPublicly', None, False, ), # 3
-    (4, TType.STRUCT, 'computationalResourceScheduling', (apache.airavata.model.scheduling.ttypes.ComputationalResourceSchedulingModel, apache.airavata.model.scheduling.ttypes.ComputationalResourceSchedulingModel.thrift_spec), None, ), # 4
-    (5, TType.BOOL, 'throttleResources', None, False, ), # 5
-    (6, TType.STRING, 'userDN', None, None, ), # 6
-    (7, TType.BOOL, 'generateCert', None, False, ), # 7
-    (8, TType.STRING, 'storageId', None, None, ), # 8
-    (9, TType.STRING, 'experimentDataDir', None, None, ), # 9
-    (10, TType.BOOL, 'useUserCRPref', None, None, ), # 10
-  )
-
-  def __init__(self, airavataAutoSchedule=thrift_spec[1][4], overrideManualScheduledParams=thrift_spec[2][4], shareExperimentPublicly=thrift_spec[3][4], computationalResourceScheduling=None, throttleResources=thrift_spec[5][4], userDN=None, generateCert=thrift_spec[7][4], storageId=None, experimentDataDir=None, useUserCRPref=None,):
-    self.airavataAutoSchedule = airavataAutoSchedule
-    self.overrideManualScheduledParams = overrideManualScheduledParams
-    self.shareExperimentPublicly = shareExperimentPublicly
-    self.computationalResourceScheduling = computationalResourceScheduling
-    self.throttleResources = throttleResources
-    self.userDN = userDN
-    self.generateCert = generateCert
-    self.storageId = storageId
-    self.experimentDataDir = experimentDataDir
-    self.useUserCRPref = useUserCRPref
-
-  def read(self, iprot):
-    if iprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None and fastbinary is not None:
-      fastbinary.decode_binary(self, iprot.trans, (self.__class__, self.thrift_spec))
-      return
-    iprot.readStructBegin()
-    while True:
-      (fname, ftype, fid) = iprot.readFieldBegin()
-      if ftype == TType.STOP:
-        break
-      if fid == 1:
-        if ftype == TType.BOOL:
-          self.airavataAutoSchedule = iprot.readBool()
-        else:
-          iprot.skip(ftype)
-      elif fid == 2:
-        if ftype == TType.BOOL:
-          self.overrideManualScheduledParams = iprot.readBool()
-        else:
-          iprot.skip(ftype)
-      elif fid == 3:
-        if ftype == TType.BOOL:
-          self.shareExperimentPublicly = iprot.readBool()
-        else:
-          iprot.skip(ftype)
-      elif fid == 4:
-        if ftype == TType.STRUCT:
-          self.computationalResourceScheduling = apache.airavata.model.scheduling.ttypes.ComputationalResourceSchedulingModel()
-          self.computationalResourceScheduling.read(iprot)
-        else:
-          iprot.skip(ftype)
-      elif fid == 5:
-        if ftype == TType.BOOL:
-          self.throttleResources = iprot.readBool()
-        else:
-          iprot.skip(ftype)
-      elif fid == 6:
-        if ftype == TType.STRING:
-          self.userDN = iprot.readString()
-        else:
-          iprot.skip(ftype)
-      elif fid == 7:
-        if ftype == TType.BOOL:
-          self.generateCert = iprot.readBool()
-        else:
-          iprot.skip(ftype)
-      elif fid == 8:
-        if ftype == TType.STRING:
-          self.storageId = iprot.readString()
-        else:
-          iprot.skip(ftype)
-      elif fid == 9:
-        if ftype == TType.STRING:
-          self.experimentDataDir = iprot.readString()
-        else:
-          iprot.skip(ftype)
-      elif fid == 10:
-        if ftype == TType.BOOL:
-          self.useUserCRPref = iprot.readBool()
-        else:
-          iprot.skip(ftype)
-      else:
-        iprot.skip(ftype)
-      iprot.readFieldEnd()
-    iprot.readStructEnd()
-
-  def write(self, oprot):
-    if oprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and self.thrift_spec is not None and fastbinary is not None:
-      oprot.trans.write(fastbinary.encode_binary(self, (self.__class__, self.thrift_spec)))
-      return
-    oprot.writeStructBegin('UserConfigurationDataModel')
-    if self.airavataAutoSchedule is not None:
-      oprot.writeFieldBegin('airavataAutoSchedule', TType.BOOL, 1)
-      oprot.writeBool(self.airavataAutoSchedule)
-      oprot.writeFieldEnd()
-    if self.overrideManualScheduledParams is not None:
-      oprot.writeFieldBegin('overrideManualScheduledParams', TType.BOOL, 2)
-      oprot.writeBool(self.overrideManualScheduledParams)
-      oprot.writeFieldEnd()
-    if self.shareExperimentPublicly is not None:
-      oprot.writeFieldBegin('shareExperimentPublicly', TType.BOOL, 3)
-      oprot.writeBool(self.shareExperimentPublicly)
-      oprot.writeFieldEnd()
-    if self.computationalResourceScheduling is not None:
-      oprot.writeFieldBegin('computationalResourceScheduling', TType.STRUCT, 4)
-      self.computationalResourceScheduling.write(oprot)
-      oprot.writeFieldEnd()
-    if self.throttleResources is not None:
-      oprot.writeFieldBegin('throttleResources', TType.BOOL, 5)
-      oprot.writeBool(self.throttleResources)
-      oprot.writeFieldEnd()
-    if self.userDN is not None:
-      oprot.writeFieldBegin('userDN', TType.STRING, 6)
-      oprot.writeString(self.userDN)
-      oprot.writeFieldEnd()
-    if self.generateCert is not None:
-      oprot.writeFieldBegin('generateCert', TType.BOOL, 7)
-      oprot.writeBool(self.generateCert)
-      oprot.writeFieldEnd()
-    if self.storageId is not None:
-      oprot.writeFieldBegin('storageId', TType.STRING, 8)
-      oprot.writeString(self.storageId)
-      oprot.writeFieldEnd()
-    if self.experimentDataDir is not None:
-      oprot.writeFieldBegin('experimentDataDir', TType.STRING, 9)
-      oprot.writeString(self.experimentDataDir)
-      oprot.writeFieldEnd()
-    if self.useUserCRPref is not None:
-      oprot.writeFieldBegin('useUserCRPref', TType.BOOL, 10)
-      oprot.writeBool(self.useUserCRPref)
-      oprot.writeFieldEnd()
-    oprot.writeFieldStop()
-    oprot.writeStructEnd()
-
-  def validate(self):
-    if self.airavataAutoSchedule is None:
-      raise TProtocol.TProtocolException(message='Required field airavataAutoSchedule is unset!')
-    if self.overrideManualScheduledParams is None:
-      raise TProtocol.TProtocolException(message='Required field overrideManualScheduledParams is unset!')
-    return
-
-
-  def __hash__(self):
-    value = 17
-    value = (value * 31) ^ hash(self.airavataAutoSchedule)
-    value = (value * 31) ^ hash(self.overrideManualScheduledParams)
-    value = (value * 31) ^ hash(self.shareExperimentPublicly)
-    value = (value * 31) ^ hash(self.computationalResourceScheduling)
-    value = (value * 31) ^ hash(self.throttleResources)
-    value = (value * 31) ^ hash(self.userDN)
-    value = (value * 31) ^ hash(self.generateCert)
-    value = (value * 31) ^ hash(self.storageId)
-    value = (value * 31) ^ hash(self.experimentDataDir)
-    value = (value * 31) ^ hash(self.useUserCRPref)
-    return value
-
-  def __repr__(self):
-    L = ['%s=%r' % (key, value)
-      for key, value in self.__dict__.iteritems()]
-    return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
-
-  def __eq__(self, other):
-    return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
-
-  def __ne__(self, other):
-    return not (self == other)
-
-class ExperimentModel:
-  """
-  A structure holding the experiment metadata and its child models.
-
-  userName:
-    The user name of the targeted gateway end user on whose behalf the experiment is being created.
-      the associated gateway identity can only be inferred from the security hand-shake so as to avoid
-      authorized Airavata Clients mimicking an unauthorized request. If a gateway is not registered with
-      Airavata, an authorization exception is thrown.
-
-  experimentName:
-    The name of the experiment as defined by the user. The name need not be unique as uniqueness is enforced
-       by the generated experiment id.
-
-  experimentDescription:
-     The verbose description of the experiment. This is an optional parameter.
-
-  Attributes:
-   - experimentId
-   - projectId
-   - gatewayId
-   - experimentType
-   - userName
-   - experimentName
-   - creationTime
-   - description
-   - executionId
-   - gatewayExecutionId
-   - gatewayInstanceId
-   - enableEmailNotification
-   - emailAddresses
-   - userConfigurationData
-   - experimentInputs
-   - experimentOutputs
-   - experimentStatus
-   - errors
-   - processes
-  """
-
-  thrift_spec = (
-    None, # 0
-    (1, TType.STRING, 'experimentId', None, "DO_NOT_SET_AT_CLIENTS", ), # 1
-    (2, TType.STRING, 'projectId', None, None, ), # 2
-    (3, TType.STRING, 'gatewayId', None, None, ), # 3
-    (4, TType.I32, 'experimentType', None,     0, ), # 4
-    (5, TType.STRING, 'userName', None, None, ), # 5
-    (6, TType.STRING, 'experimentName', None, None, ), # 6
-    (7, TType.I64, 'creationTime', None, None, ), # 7
-    (8, TType.STRING, 'description', None, None, ), # 8
-    (9, TType.STRING, 'executionId', None, None, ), # 9
-    (10, TType.STRING, 'gatewayExecutionId', None, None, ), # 10
-    (11, TType.STRING, 'gatewayInstanceId', None, None, ), # 11
-    (12, TType.BOOL, 'enableEmailNotification', None, None, ), # 12
-    (13, TType.LIST, 'emailAddresses', (TType.STRING,None), None, ), # 13
-    (14, TType.STRUCT, 'userConfigurationData', (UserConfigurationDataModel, UserConfigurationDataModel.thrift_spec), None, ), # 14
-    (15, TType.LIST, 'experimentInputs', (TType.STRUCT,(apache.airavata.model.application.io.ttypes.InputDataObjectType, apache.airavata.model.application.io.ttypes.InputDataObjectType.thrift_spec)), None, ), # 15
-    (16, TType.LIST, 'experimentOutputs', (TType.STRUCT,(apache.airavata.model.application.io.ttypes.OutputDataObjectType, apache.airavata.model.application.io.ttypes.OutputDataObjectType.thrift_spec)), None, ), # 16
-    (17, TType.LIST, 'experimentStatus', (TType.STRUCT,(apache.airavata.model.status.ttypes.ExperimentStatus, apache.airavata.model.status.ttypes.ExperimentStatus.thrift_spec)), None, ), # 17
-    (18, TType.LIST, 'errors', (TType.STRUCT,(apache.airavata.model.commons.ttypes.ErrorModel, apache.airavata.model.commons.ttypes.ErrorModel.thrift_spec)), None, ), # 18
-    (19, TType.LIST, 'processes', (TType.STRUCT,(apache.airavata.model.process.ttypes.ProcessModel, apache.airavata.model.process.ttypes.ProcessModel.thrift_spec)), None, ), # 19
-  )
-
-  def __init__(self, experimentId=thrift_spec[1][4], projectId=None, gatewayId=None, experimentType=thrift_spec[4][4], userName=None, experimentName=None, creationTime=None, description=None, executionId=None, gatewayExecutionId=None, gatewayInstanceId=None, enableEmailNotification=None, emailAddresses=None, userConfigurationData=None, experimentInputs=None, experimentOutputs=None, experimentStatus=None, errors=None, processes=None,):
-    self.experimentId = experimentId
-    self.projectId = projectId
-    self.gatewayId = gatewayId
-    self.experimentType = experimentType
-    self.userName = userName
-    self.experimentName = experimentName
-    self.creationTime = creationTime
-    self.description = description
-    self.executionId = executionId
-    self.gatewayExecutionId = gatewayExecutionId
-    self.gatewayInstanceId = gatewayInstanceId
-    self.enableEmailNotification = enableEmailNotification
-    self.emailAddresses = emailAddresses
-    self.userConfigurationData = userConfigurationData
-    self.experimentInputs = experimentInputs
-    self.experimentOutputs = experimentOutputs
-    self.experimentStatus = experimentStatus
-    self.errors = errors
-    self.processes = processes
-
-  def read(self, iprot):
-    if iprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None and fastbinary is not None:
-      fastbinary.decode_binary(self, iprot.trans, (self.__class__, self.thrift_spec))
-      return
-    iprot.readStructBegin()
-    while True:
-      (fname, ftype, fid) = iprot.readFieldBegin()
-      if ftype == TType.STOP:
-        break
-      if fid == 1:
-        if ftype == TType.STRING:
-          self.experimentId = iprot.readString()
-        else:
-          iprot.skip(ftype)
-      elif fid == 2:
-        if ftype == TType.STRING:
-          self.projectId = iprot.readString()
-        else:
-          iprot.skip(ftype)
-      elif fid == 3:
-        if ftype == TType.STRING:
-          self.gatewayId = iprot.readString()
-        else:
-          iprot.skip(ftype)
-      elif fid == 4:
-        if ftype == TType.I32:
-          self.experimentType = iprot.readI32()
-        else:
-          iprot.skip(ftype)
-      elif fid == 5:
-        if ftype == TType.STRING:
-          self.userName = iprot.readString()
-        else:
-          iprot.skip(ftype)
-      elif fid == 6:
-        if ftype == TType.STRING:
-          self.experimentName = iprot.readString()
-        else:
-          iprot.skip(ftype)
-      elif fid == 7:
-        if ftype == TType.I64:
-          self.creationTime = iprot.readI64()
-        else:
-          iprot.skip(ftype)
-      elif fid == 8:
-        if ftype == TType.STRING:
-          self.description = iprot.readString()
-        else:
-          iprot.skip(ftype)
-      elif fid == 9:
-        if ftype == TType.STRING:
-          self.executionId = iprot.readString()
-        else:
-          iprot.skip(ftype)
-      elif fid == 10:
-        if ftype == TType.STRING:
-          self.gatewayExecutionId = iprot.readString()
-        else:
-          iprot.skip(ftype)
-      elif fid == 11:
-        if ftype == TType.STRING:
-          self.gatewayInstanceId = iprot.readString()
-        else:
-          iprot.skip(ftype)
-      elif fid == 12:
-        if ftype == TType.BOOL:
-          self.enableEmailNotification = iprot.readBool()
-        else:
-          iprot.skip(ftype)
-      elif fid == 13:
-        if ftype == TType.LIST:
-          self.emailAddresses = []
-          (_etype3, _size0) = iprot.readListBegin()
-          for _i4 in xrange(_size0):
-            _elem5 = iprot.readString()
-            self.emailAddresses.append(_elem5)
-          iprot.readListEnd()
-        else:
-          iprot.skip(ftype)
-      elif fid == 14:
-        if ftype == TType.STRUCT:
-          self.userConfigurationData = UserConfigurationDataModel()
-          self.userConfigurationData.read(iprot)
-        else:
-          iprot.skip(ftype)
-      elif fid == 15:
-        if ftype == TType.LIST:
-          self.experimentInputs = []
-          (_etype9, _size6) = iprot.readListBegin()
-          for _i10 in xrange(_size6):
-            _elem11 = apache.airavata.model.application.io.ttypes.InputDataObjectType()
-            _elem11.read(iprot)
-            self.experimentInputs.append(_elem11)
-          iprot.readListEnd()
-        else:
-          iprot.skip(ftype)
-      elif fid == 16:
-        if ftype == TType.LIST:
-          self.experimentOutputs = []
-          (_etype15, _size12) = iprot.readListBegin()
-          for _i16 in xrange(_size12):
-            _elem17 = apache.airavata.model.application.io.ttypes.OutputDataObjectType()
-            _elem17.read(iprot)
-            self.experimentOutputs.append(_elem17)
-          iprot.readListEnd()
-        else:
-          iprot.skip(ftype)
-      elif fid == 17:
-        if ftype == TType.LIST:
-          self.experimentStatus = []
-          (_etype21, _size18) = iprot.readListBegin()
-          for _i22 in xrange(_size18):
-            _elem23 = apache.airavata.model.status.ttypes.ExperimentStatus()
-            _elem23.read(iprot)
-            self.experimentStatus.append(_elem23)
-          iprot.readListEnd()
-        else:
-          iprot.skip(ftype)
-      elif fid == 18:
-        if ftype == TType.LIST:
-          self.errors = []
-          (_etype27, _size24) = iprot.readListBegin()
-          for _i28 in xrange(_size24):
-            _elem29 = apache.airavata.model.commons.ttypes.ErrorModel()
-            _elem29.read(iprot)
-            self.errors.append(_elem29)
-          iprot.readListEnd()
-        else:
-          iprot.skip(ftype)
-      elif fid == 19:
-        if ftype == TType.LIST:
-          self.processes = []
-          (_etype33, _size30) = iprot.readListBegin()
-          for _i34 in xrange(_size30):
-            _elem35 = apache.airavata.model.process.ttypes.ProcessModel()
-            _elem35.read(iprot)
-            self.processes.append(_elem35)
-          iprot.readListEnd()
-        else:
-          iprot.skip(ftype)
-      else:
-        iprot.skip(ftype)
-      iprot.readFieldEnd()
-    iprot.readStructEnd()
-
-  def write(self, oprot):
-    if oprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and self.thrift_spec is not None and fastbinary is not None:
-      oprot.trans.write(fastbinary.encode_binary(self, (self.__class__, self.thrift_spec)))
-      return
-    oprot.writeStructBegin('ExperimentModel')
-    if self.experimentId is not None:
-      oprot.writeFieldBegin('experimentId', TType.STRING, 1)
-      oprot.writeString(self.experimentId)
-      oprot.writeFieldEnd()
-    if self.projectId is not None:
-      oprot.writeFieldBegin('projectId', TType.STRING, 2)
-      oprot.writeString(self.projectId)
-      oprot.writeFieldEnd()
-    if self.gatewayId is not None:
-      oprot.writeFieldBegin('gatewayId', TType.STRING, 3)
-      oprot.writeString(self.gatewayId)
-      oprot.writeFieldEnd()
-    if self.experimentType is not None:
-      oprot.writeFieldBegin('experimentType', TType.I32, 4)
-      oprot.writeI32(self.experimentType)
-      oprot.writeFieldEnd()
-    if self.userName is not None:
-      oprot.writeFieldBegin('userName', TType.STRING, 5)
-      oprot.writeString(self.userName)
-      oprot.writeFieldEnd()
-    if self.experimentName is not None:
-      oprot.writeFieldBegin('experimentName', TType.STRING, 6)
-      oprot.writeString(self.experimentName)
-      oprot.writeFieldEnd()
-    if self.creationTime is not None:
-      oprot.writeFieldBegin('creationTime', TType.I64, 7)
-      oprot.writeI64(self.creationTime)
-      oprot.writeFieldEnd()
-    if self.description is not None:
-      oprot.writeFieldBegin('description', TType.STRING, 8)
-      oprot.writeString(self.description)
-      oprot.writeFieldEnd()
-    if self.executionId is not None:
-      oprot.writeFieldBegin('executionId', TType.STRING, 9)
-      oprot.writeString(self.executionId)
-      oprot.writeFieldEnd()
-    if self.gatewayExecutionId is not None:
-      oprot.writeFieldBegin('gatewayExecutionId', TType.STRING, 10)
-      oprot.writeString(self.gatewayExecutionId)
-      oprot.writeFieldEnd()
-    if self.gatewayInstanceId is not None:
-      oprot.writeFieldBegin('gatewayInstanceId', TType.STRING, 11)
-      oprot.writeString(self.gatewayInstanceId)
-      oprot.writeFieldEnd()
-    if self.enableEmailNotification is not None:
-      oprot.writeFieldBegin('enableEmailNotification', TType.BOOL, 12)
-      oprot.writeBool(self.enableEmailNotification)
-      oprot.writeFieldEnd()
-    if self.emailAddresses is not None:
-      oprot.writeFieldBegin('emailAddresses', TType.LIST, 13)
-      oprot.writeListBegin(TType.STRING, len(self.emailAddresses))
-      for iter36 in self.emailAddresses:
-        oprot.writeString(iter36)
-      oprot.writeListEnd()
-      oprot.writeFieldEnd()
-    if self.userConfigurationData is not None:
-      oprot.writeFieldBegin('userConfigurationData', TType.STRUCT, 14)
-      self.userConfigurationData.write(oprot)
-      oprot.writeFieldEnd()
-    if self.experimentInputs is not None:
-      oprot.writeFieldBegin('experimentInputs', TType.LIST, 15)
-      oprot.writeListBegin(TType.STRUCT, len(self.experimentInputs))
-      for iter37 in self.experimentInputs:
-        iter37.write(oprot)
-      oprot.writeListEnd()
-      oprot.writeFieldEnd()
-    if self.experimentOutputs is not None:
-      oprot.writeFieldBegin('experimentOutputs', TType.LIST, 16)
-      oprot.writeListBegin(TType.STRUCT, len(self.experimentOutputs))
-      for iter38 in self.experimentOutputs:
-        iter38.write(oprot)
-      oprot.writeListEnd()
-      oprot.writeFieldEnd()
-    if self.experimentStatus is not None:
-      oprot.writeFieldBegin('experimentStatus', TType.LIST, 17)
-      oprot.writeListBegin(TType.STRUCT, len(self.experimentStatus))
-      for iter39 in self.experimentStatus:
-        iter39.write(oprot)
-      oprot.writeListEnd()
-      oprot.writeFieldEnd()
-    if self.errors is not None:
-      oprot.writeFieldBegin('errors', TType.LIST, 18)
-      oprot.writeListBegin(TType.STRUCT, len(self.errors))
-      for iter40 in self.errors:
-        iter40.write(oprot)
-      oprot.writeListEnd()
-      oprot.writeFieldEnd()
-    if self.processes is not None:
-      oprot.writeFieldBegin('processes', TType.LIST, 19)
-      oprot.writeListBegin(TType.STRUCT, len(self.processes))
-      for iter41 in self.processes:
-        iter41.write(oprot)
-      oprot.writeListEnd()
-      oprot.writeFieldEnd()
-    oprot.writeFieldStop()
-    oprot.writeStructEnd()
-
-  def validate(self):
-    if self.experimentId is None:
-      raise TProtocol.TProtocolException(message='Required field experimentId is unset!')
-    if self.projectId is None:
-      raise TProtocol.TProtocolException(message='Required field projectId is unset!')
-    if self.gatewayId is None:
-      raise TProtocol.TProtocolException(message='Required field gatewayId is unset!')
-    if self.experimentType is None:
-      raise TProtocol.TProtocolException(message='Required field experimentType is unset!')
-    if self.userName is None:
-      raise TProtocol.TProtocolException(message='Required field userName is unset!')
-    if self.experimentName is None:
-      raise TProtocol.TProtocolException(message='Required field experimentName is unset!')
-    return
-
-
-  def __hash__(self):
-    value = 17
-    value = (value * 31) ^ hash(self.experimentId)
-    value = (value * 31) ^ hash(self.projectId)
-    value = (value * 31) ^ hash(self.gatewayId)
-    value = (value * 31) ^ hash(self.experimentType)
-    value = (value * 31) ^ hash(self.userName)
-    value = (value * 31) ^ hash(self.experimentName)
-    value = (value * 31) ^ hash(self.creationTime)
-    value = (value * 31) ^ hash(self.description)
-    value = (value * 31) ^ hash(self.executionId)
-    value = (value * 31) ^ hash(self.gatewayExecutionId)
-    value = (value * 31) ^ hash(self.gatewayInstanceId)
-    value = (value * 31) ^ hash(self.enableEmailNotification)
-    value = (value * 31) ^ hash(self.emailAddresses)
-    value = (value * 31) ^ hash(self.userConfigurationData)
-    value = (value * 31) ^ hash(self.experimentInputs)
-    value = (value * 31) ^ hash(self.experimentOutputs)
-    value = (value * 31) ^ hash(self.experimentStatus)
-    value = (value * 31) ^ hash(self.errors)
-    value = (value * 31) ^ hash(self.processes)
-    return value
-
-  def __repr__(self):
-    L = ['%s=%r' % (key, value)
-      for key, value in self.__dict__.iteritems()]
-    return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
-
-  def __eq__(self, other):
-    return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
-
-  def __ne__(self, other):
-    return not (self == other)
-
-class ExperimentSummaryModel:
-  """
-  Attributes:
-   - experimentId
-   - projectId
-   - gatewayId
-   - creationTime
-   - userName
-   - name
-   - description
-   - executionId
-   - resourceHostId
-   - experimentStatus
-   - statusUpdateTime
-  """
-
-  thrift_spec = (
-    None, # 0
-    (1, TType.STRING, 'experimentId', None, None, ), # 1
-    (2, TType.STRING, 'projectId', None, None, ), # 2
-    (3, TType.STRING, 'gatewayId', None, None, ), # 3
-    (4, TType.I64, 'creationTime', None, None, ), # 4
-    (5, TType.STRING, 'userName', None, None, ), # 5
-    (6, TType.STRING, 'name', None, None, ), # 6
-    (7, TType.STRING, 'description', None, None, ), # 7
-    (8, TType.STRING, 'executionId', None, None, ), # 8
-    (9, TType.STRING, 'resourceHostId', None, None, ), # 9
-    (10, TType.STRING, 'experimentStatus', None, None, ), # 10
-    None, # 11
-    (12, TType.I64, 'statusUpdateTime', None, None, ), # 12
-  )
-
-  def __init__(self, experimentId=None, projectId=None, gatewayId=None, creationTime=None, userName=None, name=None, description=None, executionId=None, resourceHostId=None, experimentStatus=None, statusUpdateTime=None,):
-    self.experimentId = experimentId
-    self.projectId = projectId
-    self.gatewayId = gatewayId
-    self.creationTime = creationTime
-    self.userName = userName
-    self.name = name
-    self.description = description
-    self.executionId = executionId
-    self.resourceHostId = resourceHostId
-    self.experimentStatus = experimentStatus
-    self.statusUpdateTime = statusUpdateTime
-
-  def read(self, iprot):
-    if iprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None and fastbinary is not None:
-      fastbinary.decode_binary(self, iprot.trans, (self.__class__, self.thrift_spec))
-      return
-    iprot.readStructBegin()
-    while True:
-      (fname, ftype, fid) = iprot.readFieldBegin()
-      if ftype == TType.STOP:
-        break
-      if fid == 1:
-        if ftype == TType.STRING:
-          self.experimentId = iprot.readString()
-        else:
-          iprot.skip(ftype)
-      elif fid == 2:
-        if ftype == TType.STRING:
-          self.projectId = iprot.readString()
-        else:
-          iprot.skip(ftype)
-      elif fid == 3:
-        if ftype == TType.STRING:
-          self.gatewayId = iprot.readString()
-        else:
-          iprot.skip(ftype)
-      elif fid == 4:
-        if ftype == TType.I64:
-          self.creationTime = iprot.readI64()
-        else:
-          iprot.skip(ftype)
-      elif fid == 5:
-        if ftype == TType.STRING:
-          self.userName = iprot.readString()
-        else:
-          iprot.skip(ftype)
-      elif fid == 6:
-        if ftype == TType.STRING:
-          self.name = iprot.readString()
-        else:
-          iprot.skip(ftype)
-      elif fid == 7:
-        if ftype == TType.STRING:
-          self.description = iprot.readString()
-        else:
-          iprot.skip(ftype)
-      elif fid == 8:
-        if ftype == TType.STRING:
-          self.executionId = iprot.readString()
-        else:
-          iprot.skip(ftype)
-      elif fid == 9:
-        if ftype == TType.STRING:
-          self.resourceHostId = iprot.readString()
-        else:
-          iprot.skip(ftype)
-      elif fid == 10:
-        if ftype == TType.STRING:
-          self.experimentStatus = iprot.readString()
-        else:
-          iprot.skip(ftype)
-      elif fid == 12:
-        if ftype == TType.I64:
-          self.statusUpdateTime = iprot.readI64()
-        else:
-          iprot.skip(ftype)
-      else:
-        iprot.skip(ftype)
-      iprot.readFieldEnd()
-    iprot.readStructEnd()
-
-  def write(self, oprot):
-    if oprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and self.thrift_spec is not None and fastbinary is not None:
-      oprot.trans.write(fastbinary.encode_binary(self, (self.__class__, self.thrift_spec)))
-      return
-    oprot.writeStructBegin('ExperimentSummaryModel')
-    if self.experimentId is not None:
-      oprot.writeFieldBegin('experimentId', TType.STRING, 1)
-      oprot.writeString(self.experimentId)
-      oprot.writeFieldEnd()
-    if self.projectId is not None:
-      oprot.writeFieldBegin('projectId', TType.STRING, 2)
-      oprot.writeString(self.projectId)
-      oprot.writeFieldEnd()
-    if self.gatewayId is not None:
-      oprot.writeFieldBegin('gatewayId', TType.STRING, 3)
-      oprot.writeString(self.gatewayId)
-      oprot.writeFieldEnd()
-    if self.creationTime is not None:
-      oprot.writeFieldBegin('creationTime', TType.I64, 4)
-      oprot.writeI64(self.creationTime)
-      oprot.writeFieldEnd()
-    if self.userName is not None:
-      oprot.writeFieldBegin('userName', TType.STRING, 5)
-      oprot.writeString(self.userName)
-      oprot.writeFieldEnd()
-    if self.name is not None:
-      oprot.writeFieldBegin('name', TType.STRING, 6)
-      oprot.writeString(self.name)
-      oprot.writeFieldEnd()
-    if self.description is not None:
-      oprot.writeFieldBegin('description', TType.STRING, 7)
-      oprot.writeString(self.description)
-      oprot.writeFieldEnd()
-    if self.executionId is not None:
-      oprot.writeFieldBegin('executionId', TType.STRING, 8)
-      oprot.writeString(self.executionId)
-      oprot.writeFieldEnd()
-    if self.resourceHostId is not None:
-      oprot.writeFieldBegin('resourceHostId', TType.STRING, 9)
-      oprot.writeString(self.resourceHostId)
-      oprot.writeFieldEnd()
-    if self.experimentStatus is not None:
-      oprot.writeFieldBegin('experimentStatus', TType.STRING, 10)
-      oprot.writeString(self.experimentStatus)
-      oprot.writeFieldEnd()
-    if self.statusUpdateTime is not None:
-      oprot.writeFieldBegin('statusUpdateTime', TType.I64, 12)
-      oprot.writeI64(self.statusUpdateTime)
-      oprot.writeFieldEnd()
-    oprot.writeFieldStop()
-    oprot.writeStructEnd()
-
-  def validate(self):
-    if self.experimentId is None:
-      raise TProtocol.TProtocolException(message='Required field experimentId is unset!')
-    if self.projectId is None:
-      raise TProtocol.TProtocolException(message='Required field projectId is unset!')
-    if self.gatewayId is None:
-      raise TProtocol.TProtocolException(message='Required field gatewayId is unset!')
-    if self.userName is None:
-      raise TProtocol.TProtocolException(message='Required field userName is unset!')
-    if self.name is None:
-      raise TProtocol.TProtocolException(message='Required field name is unset!')
-    return
-
-
-  def __hash__(self):
-    value = 17
-    value = (value * 31) ^ hash(self.experimentId)
-    value = (value * 31) ^ hash(self.projectId)
-    value = (value * 31) ^ hash(self.gatewayId)
-    value = (value * 31) ^ hash(self.creationTime)
-    value = (value * 31) ^ hash(self.userName)
-    value = (value * 31) ^ hash(self.name)
-    value = (value * 31) ^ hash(self.description)
-    value = (value * 31) ^ hash(self.executionId)
-    value = (value * 31) ^ hash(self.resourceHostId)
-    value = (value * 31) ^ hash(self.experimentStatus)
-    value = (value * 31) ^ hash(self.statusUpdateTime)
-    return value
-
-  def __repr__(self):
-    L = ['%s=%r' % (key, value)
-      for key, value in self.__dict__.iteritems()]
-    return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
-
-  def __eq__(self, other):
-    return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
-
-  def __ne__(self, other):
-    return not (self == other)
-
-class ExperimentStatistics:
-  """
-  Attributes:
-   - allExperimentCount
-   - completedExperimentCount
-   - cancelledExperimentCount
-   - failedExperimentCount
-   - createdExperimentCount
-   - runningExperimentCount
-   - allExperiments
-   - completedExperiments
-   - failedExperiments
-   - cancelledExperiments
-   - createdExperiments
-   - runningExperiments
-  """
-
-  thrift_spec = (
-    None, # 0
-    (1, TType.I32, 'allExperimentCount', None, None, ), # 1
-    (2, TType.I32, 'completedExperimentCount', None, None, ), # 2
-    (3, TType.I32, 'cancelledExperimentCount', None, None, ), # 3
-    (4, TType.I32, 'failedExperimentCount', None, None, ), # 4
-    (5, TType.I32, 'createdExperimentCount', None, None, ), # 5
-    (6, TType.I32, 'runningExperimentCount', None, None, ), # 6
-    (7, TType.LIST, 'allExperiments', (TType.STRUCT,(ExperimentSummaryModel, ExperimentSummaryModel.thrift_spec)), None, ), # 7
-    (8, TType.LIST, 'completedExperiments', (TType.STRUCT,(ExperimentSummaryModel, ExperimentSummaryModel.thrift_spec)), None, ), # 8
-    (9, TType.LIST, 'failedExperiments', (TType.STRUCT,(ExperimentSummaryModel, ExperimentSummaryModel.thrift_spec)), None, ), # 9
-    (10, TType.LIST, 'cancelledExperiments', (TType.STRUCT,(ExperimentSummaryModel, ExperimentSummaryModel.thrift_spec)), None, ), # 10
-    (11, TType.LIST, 'createdExperiments', (TType.STRUCT,(ExperimentSummaryModel, ExperimentSummaryModel.thrift_spec)), None, ), # 11
-    (12, TType.LIST, 'runningExperiments', (TType.STRUCT,(ExperimentSummaryModel, ExperimentSummaryModel.thrift_spec)), None, ), # 12
-  )
-
-  def __init__(self, allExperimentCount=None, completedExperimentCount=None, cancelledExperimentCount=None, failedExperimentCount=None, createdExperimentCount=None, runningExperimentCount=None, allExperiments=None, completedExperiments=None, failedExperiments=None, cancelledExperiments=None, createdExperiments=None, runningExperiments=None,):
-    self.allExperimentCount = allExperimentCount
-    self.completedExperimentCount = completedExperimentCount
-    self.cancelledExperimentCount = cancelledExperimentCount
-    self.failedExperimentCount = failedExperimentCount
-    self.createdExperimentCount = createdExperimentCount
-    self.runningExperimentCount = runningExperimentCount
-    self.allExperiments = allExperiments
-    self.completedExperiments = completedExperiments
-    self.failedExperiments = failedExperiments
-    self.cancelledExperiments = cancelledExperiments
-    self.createdExperiments = createdExperiments
-    self.runningExperiments = runningExperiments
-
-  def read(self, iprot):
-    if iprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None and fastbinary is not None:
-      fastbinary.decode_binary(self, iprot.trans, (self.__class__, self.thrift_spec))
-      return
-    iprot.readStructBegin()
-    while True:
-      (fname, ftype, fid) = iprot.readFieldBegin()
-      if ftype == TType.STOP:
-        break
-      if fid == 1:
-        if ftype == TType.I32:
-          self.allExperimentCount = iprot.readI32()
-        else:
-          iprot.skip(ftype)
-      elif fid == 2:
-        if ftype == TType.I32:
-          self.completedExperimentCount = iprot.readI32()
-        else:
-          iprot.skip(ftype)
-      elif fid == 3:
-        if ftype == TType.I32:
-          self.cancelledExperimentCount = iprot.readI32()
-        else:
-          iprot.skip(ftype)
-      elif fid == 4:
-        if ftype == TType.I32:
-          self.failedExperimentCount = iprot.readI32()
-        else:
-          iprot.skip(ftype)
-      elif fid == 5:
-        if ftype == TType.I32:
-          self.createdExperimentCount = iprot.readI32()
-        else:
-          iprot.skip(ftype)
-      elif fid == 6:
-        if ftype == TType.I32:
-          self.runningExperimentCount = iprot.readI32()
-        else:
-          iprot.skip(ftype)
-      elif fid == 7:
-        if ftype == TType.LIST:
-          self.allExperiments = []
-          (_etype45, _size42) = iprot.readListBegin()
-          for _i46 in xrange(_size42):
-            _elem47 = ExperimentSummaryModel()
-            _elem47.read(iprot)
-            self.allExperiments.append(_elem47)
-          iprot.readListEnd()
-        else:
-          iprot.skip(ftype)
-      elif fid == 8:
-        if ftype == TType.LIST:
-          self.completedExperiments = []
-          (_etype51, _size48) = iprot.readListBegin()
-          for _i52 in xrange(_size48):
-            _elem53 = ExperimentSummaryModel()
-            _elem53.read(iprot)
-            self.completedExperiments.append(_elem53)
-          iprot.readListEnd()
-        else:
-          iprot.skip(ftype)
-      elif fid == 9:
-        if ftype == TType.LIST:
-          self.failedExperiments = []
-          (_etype57, _size54) = iprot.readListBegin()
-          for _i58 in xrange(_size54):
-            _elem59 = ExperimentSummaryModel()
-            _elem59.read(iprot)
-            self.failedExperiments.append(_elem59)
-          iprot.readListEnd()
-        else:
-          iprot.skip(ftype)
-      elif fid == 10:
-        if ftype == TType.LIST:
-          self.cancelledExperiments = []
-          (_etype63, _size60) = iprot.readListBegin()
-          for _i64 in xrange(_size60):
-            _elem65 = ExperimentSummaryModel()
-            _elem65.read(iprot)
-            self.cancelledExperiments.append(_elem65)
-          iprot.readListEnd()
-        else:
-          iprot.skip(ftype)
-      elif fid == 11:
-        if ftype == TType.LIST:
-          self.createdExperiments = []
-          (_etype69, _size66) = iprot.readListBegin()
-          for _i70 in xrange(_size66):
-            _elem71 = ExperimentSummaryModel()
-            _elem71.read(iprot)
-            self.createdExperiments.append(_elem71)
-          iprot.readListEnd()
-        else:
-          iprot.skip(ftype)
-      elif fid == 12:
-        if ftype == TType.LIST:
-          self.runningExperiments = []
-          (_etype75, _size72) = iprot.readListBegin()
-          for _i76 in xrange(_size72):
-            _elem77 = ExperimentSummaryModel()
-            _elem77.read(iprot)
-            self.runningExperiments.append(_elem77)
-          iprot.readListEnd()
-        else:
-          iprot.skip(ftype)
-      else:
-        iprot.skip(ftype)
-      iprot.readFieldEnd()
-    iprot.readStructEnd()
-
-  def write(self, oprot):
-    if oprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and self.thrift_spec is not None and fastbinary is not None:
-      oprot.trans.write(fastbinary.encode_binary(self, (self.__class__, self.thrift_spec)))
-      return
-    oprot.writeStructBegin('ExperimentStatistics')
-    if self.allExperimentCount is not None:
-      oprot.writeFieldBegin('allExperimentCount', TType.I32, 1)
-      oprot.writeI32(self.allExperimentCount)
-      oprot.writeFieldEnd()
-    if self.completedExperimentCount is not None:
-      oprot.writeFieldBegin('completedExperimentCount', TType.I32, 2)
-      oprot.writeI32(self.completedExperimentCount)
-      oprot.writeFieldEnd()
-    if self.cancelledExperimentCount is not None:
-      oprot.writeFieldBegin('cancelledExperimentCount', TType.I32, 3)
-      oprot.writeI32(self.cancelledExperimentCount)
-      oprot.writeFieldEnd()
-    if self.failedExperimentCount is not None:
-      oprot.writeFieldBegin('failedExperimentCount', TType.I32, 4)
-      oprot.writeI32(self.failedExperimentCount)
-      oprot.writeFieldEnd()
-    if self.createdExperimentCount is not None:
-      oprot.writeFieldBegin('createdExperimentCount', TType.I32, 5)
-      oprot.writeI32(self.createdExperimentCount)
-      oprot.writeFieldEnd()
-    if self.runningExperimentCount is not None:
-      oprot.writeFieldBegin('runningExperimentCount', TType.I32, 6)
-      oprot.writeI32(self.runningExperimentCount)
-      oprot.writeFieldEnd()
-    if self.allExperiments is not None:
-      oprot.writeFieldBegin('allExperiments', TType.LIST, 7)
-      oprot.writeListBegin(TType.STRUCT, len(self.allExperiments))
-      for iter78 in self.allExperiments:
-        iter78.write(oprot)
-      oprot.writeListEnd()
-      oprot.writeFieldEnd()
-    if self.completedExperiments is not None:
-      oprot.writeFieldBegin('completedExperiments', TType.LIST, 8)
-      oprot.writeListBegin(TType.STRUCT, len(self.completedExperiments))
-      for iter79 in self.completedExperiments:
-        iter79.write(oprot)
-      oprot.writeListEnd()
-      oprot.writeFieldEnd()
-    if self.failedExperiments is not None:
-      oprot.writeFieldBegin('failedExperiments', TType.LIST, 9)
-      oprot.writeListBegin(TType.STRUCT, len(self.failedExperiments))
-      for iter80 in self.failedExperiments:
-        iter80.write(oprot)
-      oprot.writeListEnd()
-      oprot.writeFieldEnd()
-    if self.cancelledExperiments is not None:
-      oprot.writeFieldBegin('cancelledExperiments', TType.LIST, 10)
-      oprot.writeListBegin(TType.STRUCT, len(self.cancelledExperiments))
-      for iter81 in self.cancelledExperiments:
-        iter81.write(oprot)
-      oprot.writeListEnd()
-      oprot.writeFieldEnd()
-    if self.createdExperiments is not None:
-      oprot.writeFieldBegin('createdExperiments', TType.LIST, 11)
-      oprot.writeListBegin(TType.STRUCT, len(self.createdExperiments))
-      for iter82 in self.createdExperiments:
-        iter82.write(oprot)
-      oprot.writeListEnd()
-      oprot.writeFieldEnd()
-    if self.runningExperiments is not None:
-      oprot.writeFieldBegin('runningExperiments', TType.LIST, 12)
-      oprot.writeListBegin(TType.STRUCT, len(self.runningExperiments))
-      for iter83 in self.runningExperiments:
-        iter83.write(oprot)
-      oprot.writeListEnd()
-      oprot.writeFieldEnd()
-    oprot.writeFieldStop()
-    oprot.writeStructEnd()
-
-  def validate(self):
-    if self.allExperimentCount is None:
-      raise TProtocol.TProtocolException(message='Required field allExperimentCount is unset!')
-    if self.completedExperimentCount is None:
-      raise TProtocol.TProtocolException(message='Required field completedExperimentCount is unset!')
-    if self.failedExperimentCount is None:
-      raise TProtocol.TProtocolException(message='Required field failedExperimentCount is unset!')
-    if self.createdExperimentCount is None:
-      raise TProtocol.TProtocolException(message='Required field createdExperimentCount is unset!')
-    if self.runningExperimentCount is None:
-      raise TProtocol.TProtocolException(message='Required field runningExperimentCount is unset!')
-    if self.allExperiments is None:
-      raise TProtocol.TProtocolException(message='Required field allExperiments is unset!')
-    return
-
-
-  def __hash__(self):
-    value = 17
-    value = (value * 31) ^ hash(self.allExperimentCount)
-    value = (value * 31) ^ hash(self.completedExperimentCount)
-    value = (value * 31) ^ hash(self.cancelledExperimentCount)
-    value = (value * 31) ^ hash(self.failedExperimentCount)
-    value = (value * 31) ^ hash(self.createdExperimentCount)
-    value = (value * 31) ^ hash(self.runningExperimentCount)
-    value = (value * 31) ^ hash(self.allExperiments)
-    value = (value * 31) ^ hash(self.completedExperiments)
-    value = (value * 31) ^ hash(self.failedExperiments)
-    value = (value * 31) ^ hash(self.cancelledExperiments)
-    value = (value * 31) ^ hash(self.createdExperiments)
-    value = (value * 31) ^ hash(self.runningExperiments)
-    return value
-
-  def __repr__(self):
-    L = ['%s=%r' % (key, value)
-      for key, value in self.__dict__.iteritems()]
-    return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
 
-  def __eq__(self, other):
-    return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
 
-  def __ne__(self, other):
-    return not (self == other)
+class ExperimentType(object):
+    SINGLE_APPLICATION = 0
+    WORKFLOW = 1
+
+    _VALUES_TO_NAMES = {
+        0: "SINGLE_APPLICATION",
+        1: "WORKFLOW",
+    }
+
+    _NAMES_TO_VALUES = {
+        "SINGLE_APPLICATION": 0,
+        "WORKFLOW": 1,
+    }
+
+
+class ExperimentSearchFields(object):
+    EXPERIMENT_NAME = 0
+    EXPERIMENT_DESC = 1
+    APPLICATION_ID = 2
+    FROM_DATE = 3
+    TO_DATE = 4
+    STATUS = 5
+    PROJECT_ID = 6
+
+    _VALUES_TO_NAMES = {
+        0: "EXPERIMENT_NAME",
+        1: "EXPERIMENT_DESC",
+        2: "APPLICATION_ID",
+        3: "FROM_DATE",
+        4: "TO_DATE",
+        5: "STATUS",
+        6: "PROJECT_ID",
+    }
+
+    _NAMES_TO_VALUES = {
+        "EXPERIMENT_NAME": 0,
+        "EXPERIMENT_DESC": 1,
+        "APPLICATION_ID": 2,
+        "FROM_DATE": 3,
+        "TO_DATE": 4,
+        "STATUS": 5,
+        "PROJECT_ID": 6,
+    }
+
+
+class ProjectSearchFields(object):
+    PROJECT_NAME = 0
+    PROJECT_DESCRIPTION = 1
+
+    _VALUES_TO_NAMES = {
+        0: "PROJECT_NAME",
+        1: "PROJECT_DESCRIPTION",
+    }
+
+    _NAMES_TO_VALUES = {
+        "PROJECT_NAME": 0,
+        "PROJECT_DESCRIPTION": 1,
+    }
+
+
+class UserConfigurationDataModel(object):
+    """
+    A structure holding the experiment configuration.
+
+
+
+    Attributes:
+     - airavataAutoSchedule
+     - overrideManualScheduledParams
+     - shareExperimentPublicly
+     - computationalResourceScheduling
+     - throttleResources
+     - userDN
+     - generateCert
+     - storageId
+     - experimentDataDir
+     - useUserCRPref
+    """
+
+    thrift_spec = (
+        None,  # 0
+        (1, TType.BOOL, 'airavataAutoSchedule', None, False, ),  # 1
+        (2, TType.BOOL, 'overrideManualScheduledParams', None, False, ),  # 2
+        (3, TType.BOOL, 'shareExperimentPublicly', None, False, ),  # 3
+        (4, TType.STRUCT, 'computationalResourceScheduling', (apache.airavata.model.scheduling.ttypes.ComputationalResourceSchedulingModel, apache.airavata.model.scheduling.ttypes.ComputationalResourceSchedulingModel.thrift_spec), None, ),  # 4
+        (5, TType.BOOL, 'throttleResources', None, False, ),  # 5
+        (6, TType.STRING, 'userDN', 'UTF8', None, ),  # 6
+        (7, TType.BOOL, 'generateCert', None, False, ),  # 7
+        (8, TType.STRING, 'storageId', 'UTF8', None, ),  # 8
+        (9, TType.STRING, 'experimentDataDir', 'UTF8', None, ),  # 9
+        (10, TType.BOOL, 'useUserCRPref', None, None, ),  # 10
+    )
+
+    def __init__(self, airavataAutoSchedule=thrift_spec[1][4], overrideManualScheduledParams=thrift_spec[2][4], shareExperimentPublicly=thrift_spec[3][4], computationalResourceScheduling=None, throttleResources=thrift_spec[5][4], userDN=None, generateCert=thrift_spec[7][4], storageId=None, experimentDataDir=None, useUserCRPref=None,):
+        self.airavataAutoSchedule = airavataAutoSchedule
+        self.overrideManualScheduledParams = overrideManualScheduledParams
+        self.shareExperimentPublicly = shareExperimentPublicly
+        self.computationalResourceScheduling = computationalResourceScheduling
+        self.throttleResources = throttleResources
+        self.userDN = userDN
+        self.generateCert = generateCert
+        self.storageId = storageId
+        self.experimentDataDir = experimentDataDir
+        self.useUserCRPref = useUserCRPref
+
+    def read(self, iprot):
+        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
+            iprot._fast_decode(self, iprot, (self.__class__, self.thrift_spec))
+            return
+        iprot.readStructBegin()
+        while True:
+            (fname, ftype, fid) = iprot.readFieldBegin()
+            if ftype == TType.STOP:
+                break
+            if fid == 1:
+                if ftype == TType.BOOL:
+                    self.airavataAutoSchedule = iprot.readBool()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 2:
+                if ftype == TType.BOOL:
+                    self.overrideManualScheduledParams = iprot.readBool()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 3:
+                if ftype == TType.BOOL:
+                    self.shareExperimentPublicly = iprot.readBool()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 4:
+                if ftype == TType.STRUCT:
+                    self.computationalResourceScheduling = apache.airavata.model.scheduling.ttypes.ComputationalResourceSchedulingModel()
+                    self.computationalResourceScheduling.read(iprot)
+                else:
+                    iprot.skip(ftype)
+            elif fid == 5:
+                if ftype == TType.BOOL:
+                    self.throttleResources = iprot.readBool()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 6:
+                if ftype == TType.STRING:
+                    self.userDN = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 7:
+                if ftype == TType.BOOL:
+                    self.generateCert = iprot.readBool()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 8:
+                if ftype == TType.STRING:
+                    self.storageId = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 9:
+                if ftype == TType.STRING:
+                    self.experimentDataDir = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 10:
+                if ftype == TType.BOOL:
+                    self.useUserCRPref = iprot.readBool()
+                else:
+                    iprot.skip(ftype)
+            else:
+                iprot.skip(ftype)
+            iprot.readFieldEnd()
+        iprot.readStructEnd()
+
+    def write(self, oprot):
+        if oprot._fast_encode is not None and self.thrift_spec is not None:
+            oprot.trans.write(oprot._fast_encode(self, (self.__class__, self.thrift_spec)))
+            return
+        oprot.writeStructBegin('UserConfigurationDataModel')
+        if self.airavataAutoSchedule is not None:
+            oprot.writeFieldBegin('airavataAutoSchedule', TType.BOOL, 1)
+            oprot.writeBool(self.airavataAutoSchedule)
+            oprot.writeFieldEnd()
+        if self.overrideManualScheduledParams is not None:
+            oprot.writeFieldBegin('overrideManualScheduledParams', TType.BOOL, 2)
+            oprot.writeBool(self.overrideManualScheduledParams)
+            oprot.writeFieldEnd()
+        if self.shareExperimentPublicly is not None:
+            oprot.writeFieldBegin('shareExperimentPublicly', TType.BOOL, 3)
+            oprot.writeBool(self.shareExperimentPublicly)
+            oprot.writeFieldEnd()
+        if self.computationalResourceScheduling is not None:
+            oprot.writeFieldBegin('computationalResourceScheduling', TType.STRUCT, 4)
+            self.computationalResourceScheduling.write(oprot)
+            oprot.writeFieldEnd()
+        if self.throttleResources is not None:
+            oprot.writeFieldBegin('throttleResources', TType.BOOL, 5)
+            oprot.writeBool(self.throttleResources)
+            oprot.writeFieldEnd()
+        if self.userDN is not None:
+            oprot.writeFieldBegin('userDN', TType.STRING, 6)
+            oprot.writeString(self.userDN.encode('utf-8') if sys.version_info[0] == 2 else self.userDN)
+            oprot.writeFieldEnd()
+        if self.generateCert is not None:
+            oprot.writeFieldBegin('generateCert', TType.BOOL, 7)
+            oprot.writeBool(self.generateCert)
+            oprot.writeFieldEnd()
+        if self.storageId is not None:
+            oprot.writeFieldBegin('storageId', TType.STRING, 8)
+            oprot.writeString(self.storageId.encode('utf-8') if sys.version_info[0] == 2 else self.storageId)
+            oprot.writeFieldEnd()
+        if self.experimentDataDir is not None:
+            oprot.writeFieldBegin('experimentDataDir', TType.STRING, 9)
+            oprot.writeString(self.experimentDataDir.encode('utf-8') if sys.version_info[0] == 2 else self.experimentDataDir)
+            oprot.writeFieldEnd()
+        if self.useUserCRPref is not None:
+            oprot.writeFieldBegin('useUserCRPref', TType.BOOL, 10)
+            oprot.writeBool(self.useUserCRPref)
+            oprot.writeFieldEnd()
+        oprot.writeFieldStop()
+        oprot.writeStructEnd()
+
+    def validate(self):
+        if self.airavataAutoSchedule is None:
+            raise TProtocolException(message='Required field airavataAutoSchedule is unset!')
+        if self.overrideManualScheduledParams is None:
+            raise TProtocolException(message='Required field overrideManualScheduledParams is unset!')
+        return
+
+    def __repr__(self):
+        L = ['%s=%r' % (key, value)
+             for key, value in self.__dict__.items()]
+        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
+
+    def __eq__(self, other):
+        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
+
+    def __ne__(self, other):
+        return not (self == other)
+
+
+class ExperimentModel(object):
+    """
+    A structure holding the experiment metadata and its child models.
+
+    userName:
+      The user name of the targeted gateway end user on whose behalf the experiment is being created.
+        the associated gateway identity can only be inferred from the security hand-shake so as to avoid
+        authorized Airavata Clients mimicking an unauthorized request. If a gateway is not registered with
+        Airavata, an authorization exception is thrown.
+
+    experimentName:
+      The name of the experiment as defined by the user. The name need not be unique as uniqueness is enforced
+         by the generated experiment id.
+
+    experimentDescription:
+       The verbose description of the experiment. This is an optional parameter.
+
+    Attributes:
+     - experimentId
+     - projectId
+     - gatewayId
+     - experimentType
+     - userName
+     - experimentName
+     - creationTime
+     - description
+     - executionId
+     - gatewayExecutionId
+     - gatewayInstanceId
+     - enableEmailNotification
+     - emailAddresses
+     - userConfigurationData
+     - experimentInputs
+     - experimentOutputs
+     - experimentStatus
+     - errors
+     - processes
+    """
+
+    thrift_spec = (
+        None,  # 0
+        (1, TType.STRING, 'experimentId', 'UTF8', "DO_NOT_SET_AT_CLIENTS", ),  # 1
+        (2, TType.STRING, 'projectId', 'UTF8', None, ),  # 2
+        (3, TType.STRING, 'gatewayId', 'UTF8', None, ),  # 3
+        (4, TType.I32, 'experimentType', None, 0, ),  # 4
+        (5, TType.STRING, 'userName', 'UTF8', None, ),  # 5
+        (6, TType.STRING, 'experimentName', 'UTF8', None, ),  # 6
+        (7, TType.I64, 'creationTime', None, None, ),  # 7
+        (8, TType.STRING, 'description', 'UTF8', None, ),  # 8
+        (9, TType.STRING, 'executionId', 'UTF8', None, ),  # 9
+        (10, TType.STRING, 'gatewayExecutionId', 'UTF8', None, ),  # 10
+        (11, TType.STRING, 'gatewayInstanceId', 'UTF8', None, ),  # 11
+        (12, TType.BOOL, 'enableEmailNotification', None, None, ),  # 12
+        (13, TType.LIST, 'emailAddresses', (TType.STRING, 'UTF8', False), None, ),  # 13
+        (14, TType.STRUCT, 'userConfigurationData', (UserConfigurationDataModel, UserConfigurationDataModel.thrift_spec), None, ),  # 14
+        (15, TType.LIST, 'experimentInputs', (TType.STRUCT, (apache.airavata.model.application.io.ttypes.InputDataObjectType, apache.airavata.model.application.io.ttypes.InputDataObjectType.thrift_spec), False), None, ),  # 15
+        (16, TType.LIST, 'experimentOutputs', (TType.STRUCT, (apache.airavata.model.application.io.ttypes.OutputDataObjectType, apache.airavata.model.application.io.ttypes.OutputDataObjectType.thrift_spec), False), None, ),  # 16
+        (17, TType.LIST, 'experimentStatus', (TType.STRUCT, (apache.airavata.model.status.ttypes.ExperimentStatus, apache.airavata.model.status.ttypes.ExperimentStatus.thrift_spec), False), None, ),  # 17
+        (18, TType.LIST, 'errors', (TType.STRUCT, (apache.airavata.model.commons.ttypes.ErrorModel, apache.airavata.model.commons.ttypes.ErrorModel.thrift_spec), False), None, ),  # 18
+        (19, TType.LIST, 'processes', (TType.STRUCT, (apache.airavata.model.process.ttypes.ProcessModel, apache.airavata.model.process.ttypes.ProcessModel.thrift_spec), False), None, ),  # 19
+    )
+
+    def __init__(self, experimentId=thrift_spec[1][4], projectId=None, gatewayId=None, experimentType=thrift_spec[4][4], userName=None, experimentName=None, creationTime=None, description=None, executionId=None, gatewayExecutionId=None, gatewayInstanceId=None, enableEmailNotification=None, emailAddresses=None, userConfigurationData=None, experimentInputs=None, experimentOutputs=None, experimentStatus=None, errors=None, processes=None,):
+        self.experimentId = experimentId
+        self.projectId = projectId
+        self.gatewayId = gatewayId
+        self.experimentType = experimentType
+        self.userName = userName
+        self.experimentName = experimentName
+        self.creationTime = creationTime
+        self.description = description
+        self.executionId = executionId
+        self.gatewayExecutionId = gatewayExecutionId
+        self.gatewayInstanceId = gatewayInstanceId
+        self.enableEmailNotification = enableEmailNotification
+        self.emailAddresses = emailAddresses
+        self.userConfigurationData = userConfigurationData
+        self.experimentInputs = experimentInputs
+        self.experimentOutputs = experimentOutputs
+        self.experimentStatus = experimentStatus
+        self.errors = errors
+        self.processes = processes
+
+    def read(self, iprot):
+        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
+            iprot._fast_decode(self, iprot, (self.__class__, self.thrift_spec))
+            return
+        iprot.readStructBegin()
+        while True:
+            (fname, ftype, fid) = iprot.readFieldBegin()
+            if ftype == TType.STOP:
+                break
+            if fid == 1:
+                if ftype == TType.STRING:
+                    self.experimentId = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 2:
+                if ftype == TType.STRING:
+                    self.projectId = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 3:
+                if ftype == TType.STRING:
+                    self.gatewayId = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 4:
+                if ftype == TType.I32:
+                    self.experimentType = iprot.readI32()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 5:
+                if ftype == TType.STRING:
+                    self.userName = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 6:
+                if ftype == TType.STRING:
+                    self.experimentName = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 7:
+                if ftype == TType.I64:
+                    self.creationTime = iprot.readI64()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 8:
+                if ftype == TType.STRING:
+                    self.description = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 9:
+                if ftype == TType.STRING:
+                    self.executionId = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 10:
+                if ftype == TType.STRING:
+                    self.gatewayExecutionId = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 11:
+                if ftype == TType.STRING:
+                    self.gatewayInstanceId = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 12:
+                if ftype == TType.BOOL:
+                    self.enableEmailNotification = iprot.readBool()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 13:
+                if ftype == TType.LIST:
+                    self.emailAddresses = []
+                    (_etype3, _size0) = iprot.readListBegin()
+                    for _i4 in range(_size0):
+                        _elem5 = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
+                        self.emailAddresses.append(_elem5)
+                    iprot.readListEnd()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 14:
+                if ftype == TType.STRUCT:
+                    self.userConfigurationData = UserConfigurationDataModel()
+                    self.userConfigurationData.read(iprot)
+                else:
+                    iprot.skip(ftype)
+            elif fid == 15:
+                if ftype == TType.LIST:
+                    self.experimentInputs = []
+                    (_etype9, _size6) = iprot.readListBegin()
+                    for _i10 in range(_size6):
+                        _elem11 = apache.airavata.model.application.io.ttypes.InputDataObjectType()
+                        _elem11.read(iprot)
+                        self.experimentInputs.append(_elem11)
+                    iprot.readListEnd()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 16:
+                if ftype == TType.LIST:
+                    self.experimentOutputs = []
+                    (_etype15, _size12) = iprot.readListBegin()
+                    for _i16 in range(_size12):
+                        _elem17 = apache.airavata.model.application.io.ttypes.OutputDataObjectType()
+                        _elem17.read(iprot)
+                        self.experimentOutputs.append(_elem17)
+                    iprot.readListEnd()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 17:
+                if ftype == TType.LIST:
+                    self.experimentStatus = []
+                    (_etype21, _size18) = iprot.readListBegin()
+                    for _i22 in range(_size18):
+                        _elem23 = apache.airavata.model.status.ttypes.ExperimentStatus()
+                        _elem23.read(iprot)
+                        self.experimentStatus.append(_elem23)
+                    iprot.readListEnd()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 18:
+                if ftype == TType.LIST:
+                    self.errors = []
+                    (_etype27, _size24) = iprot.readListBegin()
+                    for _i28 in range(_size24):
+                        _elem29 = apache.airavata.model.commons.ttypes.ErrorModel()
+                        _elem29.read(iprot)
+                        self.errors.append(_elem29)
+                    iprot.readListEnd()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 19:
+                if ftype == TType.LIST:
+                    self.processes = []
+                    (_etype33, _size30) = iprot.readListBegin()
+                    for _i34 in range(_size30):
+                        _elem35 = apache.airavata.model.process.ttypes.ProcessModel()
+                        _elem35.read(iprot)
+                        self.processes.append(_elem35)
+                    iprot.readListEnd()
+                else:
+                    iprot.skip(ftype)
+            else:
+                iprot.skip(ftype)
+            iprot.readFieldEnd()
+        iprot.readStructEnd()
+
+    def write(self, oprot):
+        if oprot._fast_encode is not None and self.thrift_spec is not None:
+            oprot.trans.write(oprot._fast_encode(self, (self.__class__, self.thrift_spec)))
+            return
+        oprot.writeStructBegin('ExperimentModel')
+        if self.experimentId is not None:
+            oprot.writeFieldBegin('experimentId', TType.STRING, 1)
+            oprot.writeString(self.experimentId.encode('utf-8') if sys.version_info[0] == 2 else self.experimentId)
+            oprot.writeFieldEnd()
+        if self.projectId is not None:
+            oprot.writeFieldBegin('projectId', TType.STRING, 2)
+            oprot.writeString(self.projectId.encode('utf-8') if sys.version_info[0] == 2 else self.projectId)
+            oprot.writeFieldEnd()
+        if self.gatewayId is not None:
+            oprot.writeFieldBegin('gatewayId', TType.STRING, 3)
+            oprot.writeString(self.gatewayId.encode('utf-8') if sys.version_info[0] == 2 else self.gatewayId)
+            oprot.writeFieldEnd()
+        if self.experimentType is not None:
+            oprot.writeFieldBegin('experimentType', TType.I32, 4)
+            oprot.writeI32(self.experimentType)
+            oprot.writeFieldEnd()
+        if self.userName is not None:
+            oprot.writeFieldBegin('userName', TType.STRING, 5)
+            oprot.writeString(self.userName.encode('utf-8') if sys.version_info[0] == 2 else self.userName)
+            oprot.writeFieldEnd()
+        if self.experimentName is not None:
+            oprot.writeFieldBegin('experimentName', TType.STRING, 6)
+            oprot.writeString(self.experimentName.encode('utf-8') if sys.version_info[0] == 2 else self.experimentName)
+            oprot.writeFieldEnd()
+        if self.creationTime is not None:
+            oprot.writeFieldBegin('creationTime', TType.I64, 7)
+            oprot.writeI64(self.creationTime)
+            oprot.writeFieldEnd()
+        if self.description is not None:
+            oprot.writeFieldBegin('description', TType.STRING, 8)
+            oprot.writeString(self.description.encode('utf-8') if sys.version_info[0] == 2 else self.description)
+            oprot.writeFieldEnd()
+        if self.executionId is not None:
+            oprot.writeFieldBegin('executionId', TType.STRING, 9)
+            oprot.writeString(self.executionId.encode('utf-8') if sys.version_info[0] == 2 else self.executionId)
+            oprot.writeFieldEnd()
+        if self.gatewayExecutionId is not None:
+            oprot.writeFieldBegin('gatewayExecutionId', TType.STRING, 10)
+            oprot.writeString(self.gatewayExecutionId.encode('utf-8') if sys.version_info[0] == 2 else self.gatewayExecutionId)
+            oprot.writeFieldEnd()
+        if self.gatewayInstanceId is not None:
+            oprot.writeFieldBegin('gatewayInstanceId', TType.STRING, 11)
+            oprot.writeString(self.gatewayInstanceId.encode('utf-8') if sys.version_info[0] == 2 else self.gatewayInstanceId)
+            oprot.writeFieldEnd()
+        if self.enableEmailNotification is not None:
+            oprot.writeFieldBegin('enableEmailNotification', TType.BOOL, 12)
+            oprot.writeBool(self.enableEmailNotification)
+            oprot.writeFieldEnd()
+        if self.emailAddresses is not None:
+            oprot.writeFieldBegin('emailAddresses', TType.LIST, 13)
+            oprot.writeListBegin(TType.STRING, len(self.emailAddresses))
+            for iter36 in self.emailAddresses:
+                oprot.writeString(iter36.encode('utf-8') if sys.version_info[0] == 2 else iter36)
+            oprot.writeListEnd()
+            oprot.writeFieldEnd()
+        if self.userConfigurationData is not None:
+            oprot.writeFieldBegin('userConfigurationData', TType.STRUCT, 14)
+            self.userConfigurationData.write(oprot)
+            oprot.writeFieldEnd()
+        if self.experimentInputs is not None:
+            oprot.writeFieldBegin('experimentInputs', TType.LIST, 15)
+            oprot.writeListBegin(TType.STRUCT, len(self.experimentInputs))
+            for iter37 in self.experimentInputs:
+                iter37.write(oprot)
+            oprot.writeListEnd()
+            oprot.writeFieldEnd()
+        if self.experimentOutputs is not None:
+            oprot.writeFieldBegin('experimentOutputs', TType.LIST, 16)
+            oprot.writeListBegin(TType.STRUCT, len(self.experimentOutputs))
+            for iter38 in self.experimentOutputs:
+                iter38.write(oprot)
+            oprot.writeListEnd()
+            oprot.writeFieldEnd()
+        if self.experimentStatus is not None:
+            oprot.writeFieldBegin('experimentStatus', TType.LIST, 17)
+            oprot.writeListBegin(TType.STRUCT, len(self.experimentStatus))
+            for iter39 in self.experimentStatus:
+                iter39.write(oprot)
+            oprot.writeListEnd()
+            oprot.writeFieldEnd()
+        if self.errors is not None:
+            oprot.writeFieldBegin('errors', TType.LIST, 18)
+            oprot.writeListBegin(TType.STRUCT, len(self.errors))
+            for iter40 in self.errors:
+                iter40.write(oprot)
+            oprot.writeListEnd()
+            oprot.writeFieldEnd()
+        if self.processes is not None:
+            oprot.writeFieldBegin('processes', TType.LIST, 19)
+            oprot.writeListBegin(TType.STRUCT, len(self.processes))
+            for iter41 in self.processes:
+                iter41.write(oprot)
+            oprot.writeListEnd()
+            oprot.writeFieldEnd()
+        oprot.writeFieldStop()
+        oprot.writeStructEnd()
+
+    def validate(self):
+        if self.experimentId is None:
+            raise TProtocolException(message='Required field experimentId is unset!')
+        if self.projectId is None:
+            raise TProtocolException(message='Required field projectId is unset!')
+        if self.gatewayId is None:
+            raise TProtocolException(message='Required field gatewayId is unset!')
+        if self.experimentType is None:
+            raise TProtocolException(message='Required field experimentType is unset!')
+        if self.userName is None:
+            raise TProtocolException(message='Required field userName is unset!')
+        if self.experimentName is None:
+            raise TProtocolException(message='Required field experimentName is unset!')
+        return
+
+    def __repr__(self):
+        L = ['%s=%r' % (key, value)
+             for key, value in self.__dict__.items()]
+        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
+
+    def __eq__(self, other):
+        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
+
+    def __ne__(self, other):
+        return not (self == other)
+
+
+class ExperimentSummaryModel(object):
+    """
+    Attributes:
+     - experimentId
+     - projectId
+     - gatewayId
+     - creationTime
+     - userName
+     - name
+     - description
+     - executionId
+     - resourceHostId
+     - experimentStatus
+     - statusUpdateTime
+    """
+
+    thrift_spec = (
+        None,  # 0
+        (1, TType.STRING, 'experimentId', 'UTF8', None, ),  # 1
+        (2, TType.STRING, 'projectId', 'UTF8', None, ),  # 2
+        (3, TType.STRING, 'gatewayId', 'UTF8', None, ),  # 3
+        (4, TType.I64, 'creationTime', None, None, ),  # 4
+        (5, TType.STRING, 'userName', 'UTF8', None, ),  # 5
+        (6, TType.STRING, 'name', 'UTF8', None, ),  # 6
+        (7, TType.STRING, 'description', 'UTF8', None, ),  # 7
+        (8, TType.STRING, 'executionId', 'UTF8', None, ),  # 8
+        (9, TType.STRING, 'resourceHostId', 'UTF8', None, ),  # 9
+        (10, TType.STRING, 'experimentStatus', 'UTF8', None, ),  # 10
+        None,  # 11
+        (12, TType.I64, 'statusUpdateTime', None, None, ),  # 12
+    )
+
+    def __init__(self, experimentId=None, projectId=None, gatewayId=None, creationTime=None, userName=None, name=None, description=None, executionId=None, resourceHostId=None, experimentStatus=None, statusUpdateTime=None,):
+        self.experimentId = experimentId
+        self.projectId = projectId
+        self.gatewayId = gatewayId
+        self.creationTime = creationTime
+        self.userName = userName
+        self.name = name
+        self.description = description
+        self.executionId = executionId
+        self.resourceHostId = resourceHostId
+        self.experimentStatus = experimentStatus
+        self.statusUpdateTime = statusUpdateTime
+
+    def read(self, iprot):
+        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
+            iprot._fast_decode(self, iprot, (self.__class__, self.thrift_spec))
+            return
+        iprot.readStructBegin()
+        while True:
+            (fname, ftype, fid) = iprot.readFieldBegin()
+            if ftype == TType.STOP:
+                break
+            if fid == 1:
+                if ftype == TType.STRING:
+                    self.experimentId = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 2:
+                if ftype == TType.STRING:
+                    self.projectId = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 3:
+                if ftype == TType.STRING:
+                    self.gatewayId = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 4:
+                if ftype == TType.I64:
+                    self.creationTime = iprot.readI64()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 5:
+                if ftype == TType.STRING:
+                    self.userName = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 6:
+                if ftype == TType.STRING:
+                    self.name = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 7:
+                if ftype == TType.STRING:
+                    self.description = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 8:
+                if ftype == TType.STRING:
+                    self.executionId = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 9:
+                if ftype == TType.STRING:
+                    self.resourceHostId = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 10:
+                if ftype == TType.STRING:
+                    self.experimentStatus = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 12:
+                if ftype == TType.I64:
+                    self.statusUpdateTime = iprot.readI64()
+                else:
+                    iprot.skip(ftype)
+            else:
+                iprot.skip(ftype)
+            iprot.readFieldEnd()
+        iprot.readStructEnd()
+
+    def write(self, oprot):
+        if oprot._fast_encode is not None and self.thrift_spec is not None:
+            oprot.trans.write(oprot._fast_encode(self, (self.__class__, self.thrift_spec)))
+            return
+        oprot.writeStructBegin('ExperimentSummaryModel')
+        if self.experimentId is not None:
+            oprot.writeFieldBegin('experimentId', TType.STRING, 1)
+            oprot.writeString(self.experimentId.encode('utf-8') if sys.version_info[0] == 2 else self.experimentId)
+            oprot.writeFieldEnd()
+        if self.projectId is not None:
+            oprot.writeFieldBegin('projectId', TType.STRING, 2)
+            oprot.writeString(self.projectId.encode('utf-8') if sys.version_info[0] == 2 else self.projectId)
+            oprot.writeFieldEnd()
+        if self.gatewayId is not None:
+            oprot.writeFieldBegin('gatewayId', TType.STRING, 3)
+            oprot.writeString(self.gatewayId.encode('utf-8') if sys.version_info[0] == 2 else self.gatewayId)
+            oprot.writeFieldEnd()
+        if self.creationTime is not None:
+            oprot.writeFieldBegin('creationTime', TType.I64, 4)
+            oprot.writeI64(self.creationTime)
+            oprot.writeFieldEnd()
+        if self.userName is not None:
+            oprot.writeFieldBegin('userName', TType.STRING, 5)
+            oprot.writeString(self.userName.encode('utf-8') if sys.version_info[0] == 2 else self.userName)
+            oprot.writeFieldEnd()
+        if self.name is not None:
+            oprot.writeFieldBegin('name', TType.STRING, 6)
+            oprot.writeString(self.name.encode('utf-8') if sys.version_info[0] == 2 else self.name)
+            oprot.writeFieldEnd()
+        if self.description is not None:
+            oprot.writeFieldBegin('description', TType.STRING, 7)
+            oprot.writeString(self.description.encode('utf-8') if sys.version_info[0] == 2 else self.description)
+            oprot.writeFieldEnd()
+        if self.executionId is not None:
+            oprot.writeFieldBegin('executionId', TType.STRING, 8)
+            oprot.writeString(self.executionId.encode('utf-8') if sys.version_info[0] == 2 else self.executionId)
+            oprot.writeFieldEnd()
+        if self.resourceHostId is not None:
+            oprot.writeFieldBegin('resourceHostId', TType.STRING, 9)
+            oprot.writeString(self.resourceHostId.encode('utf-8') if sys.version_info[0] == 2 else self.resourceHostId)
+            oprot.writeFieldEnd()
+        if self.experimentStatus is not None:
+            oprot.writeFieldBegin('experimentStatus', TType.STRING, 10)
+            oprot.writeString(self.experimentStatus.encode('utf-8') if sys.version_info[0] == 2 else self.experimentStatus)
+            oprot.writeFieldEnd()
+        if self.statusUpdateTime is not None:
+            oprot.writeFieldBegin('statusUpdateTime', TType.I64, 12)
+            oprot.writeI64(self.statusUpdateTime)
+            oprot.writeFieldEnd()
+        oprot.writeFieldStop()
+        oprot.writeStructEnd()
+
+    def validate(self):
+        if self.experimentId is None:
+            raise TProtocolException(message='Required field experimentId is unset!')
+        if self.projectId is None:
+            raise TProtocolException(message='Required field projectId is unset!')
+        if self.gatewayId is None:
+            raise TProtocolException(message='Required field gatewayId is unset!')
+        if self.userName is None:
+            raise TProtocolException(message='Required field userName is unset!')
+        if self.name is None:
+            raise TProtocolException(message='Required field name is unset!')
+        return
+
+    def __repr__(self):
+        L = ['%s=%r' % (key, value)
+             for key, value in self.__dict__.items()]
+        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
+
+    def __eq__(self, other):
+        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
+
+    def __ne__(self, other):
+        return not (self == other)
+
+
+class ExperimentStatistics(object):
+    """
+    Attributes:
+     - allExperimentCount
+     - completedExperimentCount
+     - cancelledExperimentCount
+     - failedExperimentCount
+     - createdExperimentCount
+     - runningExperimentCount
+     - allExperiments
+     - completedExperiments
+     - failedExperiments
+     - cancelledExperiments
+     - createdExperiments
+     - runningExperiments
+    """
+
+    thrift_spec = (
+        None,  # 0
+        (1, TType.I32, 'allExperimentCount', None, None, ),  # 1
+        (2, TType.I32, 'completedExperimentCount', None, None, ),  # 2
+        (3, TType.I32, 'cancelledExperimentCount', None, None, ),  # 3
+        (4, TType.I32, 'failedExperimentCount', None, None, ),  # 4
+        (5, TType.I32, 'createdExperimentCount', None, None, ),  # 5
+        (6, TType.I32, 'runningExperimentCount', None, None, ),  # 6
+        (7, TType.LIST, 'allExperiments', (TType.STRUCT, (ExperimentSummaryModel, ExperimentSummaryModel.thrift_spec), False), None, ),  # 7
+        (8, TType.LIST, 'completedExperiments', (TType.STRUCT, (ExperimentSummaryModel, ExperimentSummaryModel.thrift_spec), False), None, ),  # 8
+        (9, TType.LIST, 'failedExperiments', (TType.STRUCT, (ExperimentSummaryModel, ExperimentSummaryModel.thrift_spec), False), None, ),  # 9
+        (10, TType.LIST, 'cancelledExperiments', (TType.STRUCT, (ExperimentSummaryModel, ExperimentSummaryModel.thrift_spec), False), None, ),  # 10
+        (11, TType.LIST, 'createdExperiments', (TType.STRUCT, (ExperimentSummaryModel, ExperimentSummaryModel.thrift_spec), False), None, ),  # 11
+        (12, TType.LIST, 'runningExperiments', (TType.STRUCT, (ExperimentSummaryModel, ExperimentSummaryModel.thrift_spec), False), None, ),  # 12
+    )
+
+    def __init__(self, allExperimentCount=None, completedExperimentCount=None, cancelledExperimentCount=None, failedExperimentCount=None, createdExperimentCount=None, runningExperimentCount=None, allExperiments=None, completedExperiments=None, failedExperiments=None, cancelledExperiments=None, createdExperiments=None, runningExperiments=None,):
+        self.allExperimentCount = allExperimentCount
+        self.completedExperimentCount = completedExperimentCount
+        self.cancelledExperimentCount = cancelledExperimentCount
+        self.failedExperimentCount = failedExperimentCount
+        self.createdExperimentCount = createdExperimentCount
+        self.runningExperimentCount = runningExperimentCount
+        self.allExperiments = allExperiments
+        self.completedExperiments = completedExperiments
+        self.failedExperiments = failedExperiments
+        self.cancelledExperiments = cancelledExperiments
+        self.createdExperiments = createdExperiments
+        self.runningExperiments = runningExperiments
+
+    def read(self, iprot):
+        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
+            iprot._fast_decode(self, iprot, (self.__class__, self.thrift_spec))
+            return
+        iprot.readStructBegin()
+        while True:
+            (fname, ftype, fid) = iprot.readFieldBegin()
+            if ftype == TType.STOP:
+                break
+            if fid == 1:
+                if ftype == TType.I32:
+                    self.allExperimentCount = iprot.readI32()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 2:
+                if ftype == TType.I32:
+                    self.completedExperimentCount = iprot.readI32()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 3:
+                if ftype == TType.I32:
+                    self.cancelledExperimentCount = iprot.readI32()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 4:
+                if ftype == TType.I32:
+                    self.failedExperimentCount = iprot.readI32()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 5:
+                if ftype == TType.I32:
+                    self.createdExperimentCount = iprot.readI32()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 6:
+                if ftype == TType.I32:
+                    self.runningExperimentCount = iprot.readI32()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 7:
+                if ftype == TType.LIST:
+                    self.allExperiments = []
+                    (_etype45, _size42) = iprot.readListBegin()
+                    for _i46 in range(_size42):
+                        _elem47 = ExperimentSummaryModel()
+                        _elem47.read(iprot)
+                        self.allExperiments.append(_elem47)
+                    iprot.readListEnd()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 8:
+                if ftype == TType.LIST:
+                    self.completedExperiments = []
+                    (_etype51, _size48) = iprot.readListBegin()
+                    for _i52 in range(_size48):
+                        _elem53 = ExperimentSummaryModel()
+                        _elem53.read(iprot)
+                        self.completedExperiments.append(_elem53)
+                    iprot.readListEnd()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 9:
+                if ftype == TType.LIST:
+                    self.failedExperiments = []
+                    (_etype57, _size54) = iprot.readListBegin()
+                    for _i58 in range(_size54):
+                        _elem59 = ExperimentSummaryModel()
+                        _elem59.read(iprot)
+                        self.failedExperiments.append(_elem59)
+                    iprot.readListEnd()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 10:
+                if ftype == TType.LIST:
+                    self.cancelledExperiments = []
+                    (_etype63, _size60) = iprot.readListBegin()
+                    for _i64 in range(_size60):
+                        _elem65 = ExperimentSummaryModel()
+                        _elem65.

<TRUNCATED>