Skip to main content

Simple python macro expansion

Project description

Build Status

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


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)

Uploaded Source

Built Distribution

smx-0.8.5-py2.py3-none-any.whl (16.9 kB view details)

Uploaded Python 2 Python 3

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

Hashes for smx-0.8.5.tar.gz
Algorithm Hash digest
SHA256 234271450be34f8d0e7a3e18b57d40e211736483b36ab8a8b96033d875ed1a8b
MD5 e0ab25cbd869a30a1d2627984411ed37
BLAKE2b-256 bebfeaa4a8b52ceec4bf76041c76ac6b469dce33064efc035377e93040bbcb93

See more details on using hashes here.

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

Hashes for smx-0.8.5-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 948262564cf34270e46aeb907e5b723b3898429145ad0f5c0971c31d9cc20a16
MD5 e003d90ab3154123b9c2278d88a97d8d
BLAKE2b-256 62f0f74fb990e7c5e059e68fff38655ee315b15514432d0592c934e80c3b0ef0

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page