Writing import modules with Python
Here's an example of a Python import module that could serve as an skeleton.
It should be compatible with both Python 2 and 3.
#!/usr/bin/env python
import os
import json
input = json.loads( raw_input() )
print( "Hello {0} from my module".format( input["quux"] ) )
output = { "foo": { "bar": input["quux"] } }
print( json.dumps({ os.environ["CLARIVE_RETURN"]: output }) )
Warning
Don't forget to apply the execute flag +x to your import modules.
Clarive rules can only invoke modules that are executable.
Make sure that the shebang #! definition points to a valid
binary in the docker container image that will be used with
your module.
To test the above Python import module from the command line, try the following command:
echo '{ "quux": 123 }' | CLARIVE_RETURN=1234 ./hello.py
If everything went well, the following output should be shown.
Hello from my module
{"1234": {"myvar": {"bar": 123 }}}
Using Python imports in your rulebook¶
To use a Python module you have to first check it into a Git repository managed by Clarive.
Let's suppose there is a project called MyProject set up in your system, and
that the project has a Git repository called MyRepo. Therefore the path to your
rulebook and module would be:
/MyProject/MyRepo/.clarive.yml
/MyProject/MyRepo/.clarive/python/hello.py
Now in your rulebook import the Python file with the import: directive.
You can try this using the the REPL.
image: python
workspace:
- MyProject/MyRepo
import:
- /MyProject/MyRepo/.clarive/python
do:
- echo: "and now for something completely different:"
- hello:
quux: "world"