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"