Class PythonSyncProcessService

All Implemented Interfaces:
GenericMultiTypeService, ParameterConfigurerProvider, Service, ServiceBase

public class PythonSyncProcessService extends AbstractPythonProcessService
Generic command-line-based Python integration for multiple data types. Conventions:
  • Python is determined by PythonUtils.getPythonExecutable(). The default is "ServiceEnvironment.py" which must run for this integration with "--mode console".
  • A synchronous Python program receives the data including the symbolic type name as last (for "ServiceEnvironment.py" qualified by "--data") command line argument and returns the result on the command line including the symbolic type name.
  • The Python program runs until the input data is processed.
Author:
Holger Eichelberger, SSE
  • Field Details

    • timeout

      private int timeout
    • timeoutUnit

      private TimeUnit timeoutUnit
    • reconfValues

      private Map<String,String> reconfValues
  • Constructor Details

    • PythonSyncProcessService

      public PythonSyncProcessService(String serviceId, InputStream ymlFile)
      Creates an instance from a service id and a YAML artifact.
      Parameters:
      serviceId - the service id
      ymlFile - the YML file containing the YAML artifact with the service descriptor
    • PythonSyncProcessService

      public PythonSyncProcessService(YamlService yaml)
      Creates an abstract service from YAML information.
      Parameters:
      yaml - the service information as read from YAML. By default, the Python executable is "ServiceEnvironment.py", which can be overridden by YamlProcess.getExecutable(). YamlProcess.getHomePath() is set to the home path where the executable was extracted to. Further, YamlProcess.getCmdArg() are taken over if given.
  • Method Details

    • migrate

      public void migrate(String resourceId) throws ExecutionException
      Description copied from interface: Service
      Migrates a service. However, it may be required to migrate/move the containing artifact. [adaptation]
      Parameters:
      resourceId - the target resource id, e.g., a device
      Throws:
      ExecutionException - if migration fails
    • update

      public void update(URI location) throws ExecutionException
      Description copied from interface: Service
      Updates the service by the service in the given location. This operation is responsible for stopping the running service (if needed), replacing it, starting the new service.
      Parameters:
      location - the location of the new service, e.g., an URL
      Throws:
      ExecutionException - if the given service cannot be updated for some reason, e.g., because the replacement service is not an evolved version of the running service
    • switchTo

      public void switchTo(String targetId) throws ExecutionException
      Description copied from interface: Service
      Switches to an interface-compatible service. This method cares for stopping the old service, performing a handover if adequate, starting the target service. [adaptation]
      Parameters:
      targetId - the id of the target service
      Throws:
      ExecutionException - if switching the service cannot be performed for some reason
    • reconfigure

      public void reconfigure(Map<String,String> values) throws ExecutionException
      Description copied from interface: Service
      Reconfigures the service. [adaptation]
      Specified by:
      reconfigure in interface Service
      Overrides:
      reconfigure in class AbstractService
      Parameters:
      values - the (service-specific) name-value mapping that shall lead to a reconfiguration of the service; values come either as primitive values or as JSON structures complying with the parameter descriptor. The service is responsible for correct JSON de-serialization according to the respective descriptor.
      Throws:
      ExecutionException - if reconfiguration fails
    • getLogger

      protected static de.iip_ecosphere.platform.support.logging.Logger getLogger()
      Returns the logger.
      Returns:
      the logger
    • processImpl

      private <I, O> O processImpl(String inType, I data) throws ExecutionException
      Requests processing a data item.
      Type Parameters:
      I - the input data type
      O - the output data type
      Parameters:
      inType - the name of inType in the configuration model
      data - the data item to be processed
      Returns:
      the output, always null in case of asynchronous processing as the result is passed to a registered ingestor
      Throws:
      ExecutionException - if the execution fails for some reason, e.g., because type translators are not registered (@link #registerInputTypeTranslator(Class, Class, TypeTranslator, TypeTranslator)}
    • process

      public <I> void process(String inType, I data) throws ExecutionException
      Description copied from interface: GenericMultiTypeService
      Requests asynchronous processing a data item.
      Type Parameters:
      I - the input data type
      Parameters:
      inType - the name of inType in the configuration model
      data - the data item to be processed
      Throws:
      ExecutionException - if the execution fails for some reason, e.g., because type translators are not registered (@link #registerInputTypeTranslator(Class, Class, TypeTranslator, TypeTranslator)}
    • processSync

      public <I, O> O processSync(String inType, I data, String outType) throws ExecutionException
      Description copied from interface: GenericMultiTypeService
      Requests synchronous processing a data item.
      Type Parameters:
      I - the input data type
      O - the output data type
      Parameters:
      inType - the name of inType in the configuration model
      data - the data item to be processed
      outType - the name of outType in the configuration model
      Returns:
      the output, always null in case of asynchronous processing as the result is passed to a registered ingestor
      Throws:
      ExecutionException - if the execution fails for some reason, e.g., because type translators are not registered (@link #registerInputTypeTranslator(Class, Class, TypeTranslator, TypeTranslator)}