Before you begin

The clara framework needs xMsg v2.4.1 to run. xMsg is a lightweight, yet full featured publish/subscribe messaging system, presenting asynchronous publish/subscribe inter-process communication protocol: an API layer in Java, Python and C++. Please refer to xMsg Python for installation instructions.

To install clara-python in your system, run:

$ pip install -r requirements.txt
$ ./setup.py install

Starting a DPE

Every data processing environment contains proxy, shared memory map, as well as registration databases for both publishers and subscribers. DPE subscribes control requests, such as “create a container”. DPE can create multiple containers. Every container defines a map of locally deployed service objects. Each service object creates and manages object and thread pools for every service-engine object, ready to run within a service. The number of service-engine objects and the size of the thread pool is set by the user, that is recommended to be less or equal to the number of the processor cores.

$ p_dpe # or python clara/sys/Dpe.py

Writing your Clara Engine

This is a very simple example of a Clara engine in python. User should create an engine class with a proper name, then add it to the $CLARA_SERVICES folder for the DPE to find it.

from clara.base.ClaraUtils import ClaraUtils
from clara.engine.Engine import Engine
from clara.engine.EngineDataType import EngineDataType, Mimetype

class Engine(Engine):
    def __init__(self):
        super(Engine1, self).__init__()

    def configure(self, engine_data):
        # This method gets values to configure the service:
        # For example
        # self.some_configurable_val = engine_data.get_data()
        pass

    def execute(self, engine_data):
        # This service receives an integer and increase the value by one
        # The increased value is then returned.
        data = engine_data.get_data() + 1
        engine_data.set_data(Mimetype.SINT32, data)
        return engine_data

    def execute_group(self, data_array):
        pass

    def get_input_data_types(self):
        # Declares the accepted input datatypes for the engine
        return ClaraUtils.build_data_types(EngineDataType.SINT32())

    def get_output_data_types(self):
        # Declares the accepted output datatypes for the engine
        return ClaraUtils.build_data_types(EngineDataType.SINT32())

    def get_states(self):
        pass

    def get_description(self):
        # Some description of what the engine does.
        return "Some engine1 description"

    def get_version(self):
        # The version of the written engine
        return "v1.0"

    def get_author(self):
        # Information about the author
        return "royarzun"

    def reset(self):
        # Method to reset the engine to its default values
        pass

    def destroy(self):
        # Destructor method for engine
        pass