Rodar Python
Python script engine adapter for Rodar.
Enables Python scripts in BPMN ScriptTask elements by implementing the
Rodar.Expression.ScriptEngine behaviour.
Status
Not yet implemented. The engine stub is in place but returns {:error, :not_implemented}.
Planned Approach
Use Erlport to communicate with a Python interpreter via Erlang ports. This provides process isolation and leverages the full Python ecosystem.
Alternative: Pythonx — embeds Python via NIF for lower-latency calls, at the cost of tighter coupling.
Installation
Once published, add to your mix.exs:
{:rodar_python, "~> 0.1.0"}Usage
Register the engine on application start:
Rodar.Expression.ScriptRegistry.register("python", RodarPython.Engine)
Then use scriptFormat="python" in your BPMN diagrams:
<scriptTask id="task1" name="Python Task" scriptFormat="python">
<script>result = data["count"] + 1</script>
</scriptTask>Key Considerations
- Process management: Python interpreter lifecycle — pool of persistent workers vs spawn-per-eval. Consider using a pool library like Poolboy.
- Sandboxing: Restrict imports and builtins for untrusted scripts. Python's
RestrictedPythonpackage can help. - Data marshalling: Use JSON for safe serialization between BEAM and Python. Complex types (dates, decimals) need explicit conversion.
- Timeouts: Python scripts should have execution timeouts to prevent runaway processes.
- Dependencies: Consider whether to support
pipdependencies per-process or require a pre-configured Python environment.
License
Apache-2.0 — see LICENSE.