Skip to content

rodar-project/rodar_python

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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 RestrictedPython package 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 pip dependencies per-process or require a pre-configured Python environment.

License

Apache-2.0 — see LICENSE.

About

Python script engine for Rodar Workflow execution engine

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages