env-pipes

Environmental Shell Piping


Keywords
env, environ, environmental_variables
License
BSD-2-Clause
Install
pip install env-pipes==0.1.2

Documentation

env_pipes

Use complex data structures on your environmental variables.

Actions available

Currently the module insludes some utilitary functions.

pack_path(*paths_to_pack, base64_result = False, quote_result = False)

This function will accept any number of paths as paths_to_pack and create a JSON object with all the content. The files will be encoded as base64 and the directory structure will be preserved.

All the paths provided, regardless of the original location, will end up at the root of the package; when unpacked they will all end up on the same target directory, completelly different from the tar command. This can be leveraged to pack a group of files instead of a directory by doing paths_to_pack path/to/some/dir/*.* which will then can be unpacked in any other directory (disregarding tree structure).

The base64_result flag will trigger an extra encoding layer, by encoding the resulting object with base64 and returning a safe string.

The quote_result flag will pass the result through shlex.quote. That function's behavior will change depending on the shell being used, so plan accordingly.

The quoting feature, if requested, is applied after base64_result, so if both flags are supplied the JSON object is encoded and then quoted.

unpack_path(destination, content_file, create_destination = False, base64_decode = False)

This is the reverse of pack_path: it will take a JSON packed content_file and dump the decoded files into destination.

The create_destination flag will create the destination, including all the missing parents, if it doesn't exists.

With base64_decode you can undo a paths_to_pack --base64_result result: the supplied content_file is base64 decoded first, then parsed as a JSON file.

vars_from_file(file_with_vars, sep = ' ')

Load variables from a file (JSON) and outputs a line usable by env. You could use a different separator for other use cases: vars_from_file --sep "\n", on a shell/command that understand \n as a new line character, would generate a list, useful for scripting, maybe.

Examples

Creating a JSON object from the files and directories in path_to_abc_dir/*

$python -m env_pipes pack_path path_to_abc_dir/*
{"a": {"a.txt": "YQo="}, "b.txt": "Ygo=", "c": {"c sub": {"c.txt": "IGMK"}}}

Unpack the previous result into ~/Desktop/test

$echo '{"a": {"a.txt": "YQo="}, "b.txt": "Ygo=", "c": {"c sub": {"c.txt": "IGMK"}}}' | python -m env_pipes unpack_path ~/Desktop/test/ -
[PosixPath('/home/user/Desktop/test/a'),
 PosixPath('/home/user/Desktop/test/a/a.txt'),
 PosixPath('/home/user/Desktop/test/b.txt'),
 PosixPath('/home/user/Desktop/test/c'),
 PosixPath('/home/user/Desktop/test/c/c sub'),
 PosixPath('/home/user/Desktop/test/c/c sub/c.txt')]

Unpack the same results from a file

$python -m env_pipes unpack_path ~/Desktop/test/ packed_abc.json
[PosixPath('/home/user/Desktop/test/a'),
 PosixPath('/home/user/Desktop/test/a/a.txt'),
 PosixPath('/home/user/Desktop/test/b.txt'),
 PosixPath('/home/user/Desktop/test/c'),
 PosixPath('/home/user/Desktop/test/c/c sub'),
 PosixPath('/home/user/Desktop/test/c/c sub/c.txt')]