ecto is a dynamically configurable Directed Acyclic processing Graph (DAG) framework. Users may write reusable ecto::modules which become the nodes in the DAG, or ecto::plasm. Modules may be written in c++ as boost::python extensions, or in pure python, and python is used for the declaration of the DAG.
building client_usage auto_docs tendril tendrils module plasm
- Simple processing node interface for building your own modules.
- Inputs, outputs and parameters are templated, and type erasing, giving typesafety and the ability to use your own data types..
- Python is used as the plugin architecture of ecto. Exposing your modules to python is dead simple. The use of boost::python means that the python bindings for your data types are an optional powerful tool.
- ecto forces your modules to be somewhat self documenting, and allows full introspection from python and c++, including type names, docstrings and variable names.
- The plasm (DAG) executes in compiled code.
- Python is used for declaring the processing graph, or as its known to ecto, the plasm.
#!/usr/bin/env python import ecto #ecto core library import hello_ecto #a user library, that has a few ecto modules #instantiate a plasm, our DAG structure plasm = ecto.Plasm() #instantiate processing modules r = hello_ecto.Reader() #notice the keyword args, these get mapped #as parameters p = hello_ecto.Printer(str="default") #connect outputs to inputs plasm.connect(r, "output", p, "str") #an execution loop print "Enter input, q to quit" while r.outputs.output != 'q': plasm.execute() #this executes the graph
- The ecto::plasm is easily inspected using graphviz tools.
- Each module is self documenting by design.