Simple python macro expansion
Project description
Simple python macro expansion
example:
- key : %os.environ.get(USER)
%indent(%include(file_name))
- other : %iadd(1, 1)
%indent(%python("
import mod
f = open('myfile.in')
f.read()
output(mod.process(f))
")
Allows simple macros to be expanded inline. You can from smx import Smx
to evaluate, or evaluate from the command line. Options to import all env vars, or modules from the command line are available. Macros can be nested... so %expand(%include(...))
is a valid syntax.
Used for yml templates, config files, kubernates deployments, simple HTML pages, etc.
Install
pip install smx
Use
> smx file.in > file.out
> smx --help
Or from python:
from smx import Smx
ctx = Smx()
ctx.expand("%add(1,1)")
ctx.expand_io(fin, fout)
ctx.expand_file(filename, in_place=True)
Including code and files
Macro | Description |
---|---|
indent(str) | each line of the indented string is indented at the level where the indent function was called. |
include(str) | include the specified file |
strip(str) | strip a string |
expand(str) | string is expanded using smx syntax |
python(str) | string is expanded using python syntax |
module(str) | string is interpreted as a module and imported |
Modules
Macro | Description |
---|---|
os.... | os functions are included by default, for example os.path.basename(...) |
sys.... | sys functions are included by default |
Misc
Macro | Description |
---|---|
for(name, range, loop) | loop code is expanded for each value in the range |
if(val, true-val, false-val) | if val is expanded to non-empty, true-val is executed |
add(a, b) | numbers are added |
sub(a, b) | numbers are subtracted |
Goals
- The syntax should be "macroy" not "pythony" ... that way you can tell, at a glance when there's macros going on... vs python going on.
- Easy to add your own macros by deriving from Smx and adding new functions with the @smx.macro decorator.
- Easy to import python modules and use them in basically any string context
- JSON and YAML template friendly
- Use "as is" in most configuration contexts
- Unsafe by default, but trivial to use "Safe mode" allowing untrusted execution of a strict set of macro expansions
Caveats
Important to remember that all macros result in "strings", so when dealing with macros.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
smx-0.8.5.tar.gz
(6.3 kB
view details)
Built Distribution
smx-0.8.5-py2.py3-none-any.whl
(16.9 kB
view details)
File details
Details for the file smx-0.8.5.tar.gz
.
File metadata
- Download URL: smx-0.8.5.tar.gz
- Upload date:
- Size: 6.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: python-requests/2.21.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 234271450be34f8d0e7a3e18b57d40e211736483b36ab8a8b96033d875ed1a8b |
|
MD5 | e0ab25cbd869a30a1d2627984411ed37 |
|
BLAKE2b-256 | bebfeaa4a8b52ceec4bf76041c76ac6b469dce33064efc035377e93040bbcb93 |
File details
Details for the file smx-0.8.5-py2.py3-none-any.whl
.
File metadata
- Download URL: smx-0.8.5-py2.py3-none-any.whl
- Upload date:
- Size: 16.9 kB
- Tags: Python 2, Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: python-requests/2.21.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 948262564cf34270e46aeb907e5b723b3898429145ad0f5c0971c31d9cc20a16 |
|
MD5 | e003d90ab3154123b9c2278d88a97d8d |
|
BLAKE2b-256 | 62f0f74fb990e7c5e059e68fff38655ee315b15514432d0592c934e80c3b0ef0 |