{ "info": { "author": "Erik Aronesty", "author_email": "erik@q32.com", "bugtrack_url": null, "classifiers": [ "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Programming Language :: Python", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "[![Build Status](https://travis-ci.com/earonesty/python-smx.svg?branch=master)](https://travis-ci.com/earonesty/python-smx)\n[![Coverage](https://codecov.io/gh/earonesty/python-smx.svg/branch/master/graph/badge.svg)](https://codecov.io/earonesty/python-smx)\n\n### Simple python templates\n\n example:\n - key : %os.environ.get(USER)\n - roaming : %if(sys.platform=='win32',1,0)\n %indent(%include(file_name))\n - other : %eval(1 + 1)\n %indent(%python(\"\n import mod\n f = open('myfile.in')\n f.read()\n output(mod.process(f))\n \")\n\nAllows 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.\n\nUsed for yml templates, config files, kubernates deployments, simple HTML pages, etc.\n\n### Install\n pip install smx\n\n### Use\n\n```\n > smx file.in > file.out\n > smx --help\n```\n\nOr from python:\n\n```\n from smx import Smx\n ctx = Smx()\n ctx.expand(\"%add(1,1)\")\n ctx.expand_io(fin, fout)\n ctx.expand_file(filename, in_place=True)\n```\n\n### Including code and files\n\n| Macro | Description |\n| :--- | :- |\n| indent(str) | each line of the indented string is indented at the level where the indent function was called. | \n| include(str) | include the specified file | \n| strip(str) | strip a string | \n| expand(str) | string is expanded using smx syntax | \n| python(str) | string is expanded using python syntax | \n| module(str) | string is interpreted as a module and imported | \n\n### Modules\n\n| Macro | Description |\n| :--- | :- |\n| os.... | os functions are included by default, for example `%os.path.basename(...)` | \n| sys.... | sys functions are included by default EG: `%sys.platform%` can be used| \n\n### Misc\n\n| Macro | Description |\n| :--- | :- |\n| for(name, range, loop) | loop code is expanded for each value in the range | \n| if(val, true-val, false-val) | if val is expanded to non-empty, true-val is executed | \n| add(a, b) | numbers are added | \n| sub(a, b) | numbers are subtracted | \n\n### Goals \n\n - 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.\n - Easy to add your own macros by deriving from Smx and adding new functions with the @smx.macro decorator.\n - Easy to import python modules and use them in basically any string context\n - JSON and YAML template friendly\n - Use \"as is\" in most configuration contexts\n - Unsafe by default, but trivial to use \"Safe mode\" allowing untrusted execution of a strict set of macro expansions\n\n### Caveats\n\n - Important to remember that all macros result in \"strings\", not other python types.\n - When context-oriented template programming gets complex, you probably shouldn't be using templates.\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/earonesty/python-smx", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "smx", "package_url": "https://pypi.org/project/smx/", "platform": "", "project_url": "https://pypi.org/project/smx/", "project_urls": { "Homepage": "https://github.com/earonesty/python-smx" }, "release_url": "https://pypi.org/project/smx/0.9.0/", "requires_dist": null, "requires_python": "", "summary": "Simple python macro expansion", "version": "0.9.0" }, "last_serial": 5194058, "releases": { "0.8": [ { "comment_text": "", "digests": { "md5": "4727afe31d31620067253953858631c6", "sha256": "b1830d24c8dea98bf1adeaa9faa81ceb4c9947ca6f8981aa0d9fdb150a36f65a" }, "downloads": -1, "filename": "smx-0.8-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "4727afe31d31620067253953858631c6", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 10513, "upload_time": "2019-03-05T22:00:22", "url": "https://files.pythonhosted.org/packages/d5/b8/0f37a0370dc88d8c879f88fc8ebbd9cb88811eddca6a64baf90a63674e0d/smx-0.8-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4392e12f2467cbf9c1bd349bd3b46a21", "sha256": "6e4cf891dc9164bc6c86ce24b4d49ac18bdda0b0142b30872838d41cf9366d46" }, "downloads": -1, "filename": "smx-0.8.tar.gz", "has_sig": false, "md5_digest": "4392e12f2467cbf9c1bd349bd3b46a21", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3888, "upload_time": "2019-03-05T22:00:43", "url": "https://files.pythonhosted.org/packages/41/cc/af2cba6a4f182ca43e335a7d92d69fab06509d89db0e3f76d41a7dd087dc/smx-0.8.tar.gz" } ], "0.8.2": [ { "comment_text": "", "digests": { "md5": "311a986339aa67f0215c226fd16124b8", "sha256": "8e0d178b69222ffa93fb4b6fc3f71386e4636c340292fecca013360f0d0eb9f6" }, "downloads": -1, "filename": "smx-0.8.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "311a986339aa67f0215c226fd16124b8", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 10794, "upload_time": "2019-03-05T23:02:40", "url": "https://files.pythonhosted.org/packages/0c/31/8e93b4032f0b9d44a8383269a3f82ff94aac6839ff23a414cbf3da9be33a/smx-0.8.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c48bba4fc73d3bb9d79fad20114889f2", "sha256": "32824cde31b9a5902b4983b495fafebb86d37a5b00f46138638e161b271b46a3" }, "downloads": -1, "filename": "smx-0.8.2.tar.gz", "has_sig": false, "md5_digest": "c48bba4fc73d3bb9d79fad20114889f2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4905, "upload_time": "2019-03-05T23:02:45", "url": "https://files.pythonhosted.org/packages/49/29/ba7a1eac9f8d218b848848331278271aa467241c4c448a104d2b5a44465e/smx-0.8.2.tar.gz" } ], "0.8.3": [ { "comment_text": "", "digests": { "md5": "6ad32b5d9166845cbf6339f34f168f83", "sha256": "20976b366fd1eb30d7a91b544556310048e2b8d8a8543fb7f7ccd209bb7a8082" }, "downloads": -1, "filename": "smx-0.8.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "6ad32b5d9166845cbf6339f34f168f83", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 14526, "upload_time": "2019-03-06T14:38:35", "url": "https://files.pythonhosted.org/packages/34/ad/86d47e4b78a3fb242e20e6fbb94d0d8620d1781dd8c644aad7facd2a6c71/smx-0.8.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "87fd8d0d3e91ef560d01e9d35fbe6d58", "sha256": "2daeb649f620908be9700b1728f256427d6e8984a8d39b48d910b80aba199062" }, "downloads": -1, "filename": "smx-0.8.3.tar.gz", "has_sig": false, "md5_digest": "87fd8d0d3e91ef560d01e9d35fbe6d58", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5680, "upload_time": "2019-03-06T14:38:36", "url": "https://files.pythonhosted.org/packages/0b/ca/8ede77bf9baaef0ef502066af2ddc3283f41712950942bae5959ce587a32/smx-0.8.3.tar.gz" } ], "0.8.4": [ { "comment_text": "", "digests": { "md5": "03c59dab65165d1c947b46b0d0eeb1ec", "sha256": "49440c434ce7253bd25f76fc325f953ce259c405e66463cc8026ecab8aabff53" }, "downloads": -1, "filename": "smx-0.8.4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "03c59dab65165d1c947b46b0d0eeb1ec", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 16452, "upload_time": "2019-03-06T21:10:43", "url": "https://files.pythonhosted.org/packages/8d/63/1cb32e8d460baf6a675ac69464a5ca31a529363a044a20267668b0b86aeb/smx-0.8.4-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "531248c3a7d9d256c5e0b6548c699000", "sha256": "a370001ccefe1f72de1b985a14380e26926bfebec4e568c23ef78a6f01081f0a" }, "downloads": -1, "filename": "smx-0.8.4.tar.gz", "has_sig": false, "md5_digest": "531248c3a7d9d256c5e0b6548c699000", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6102, "upload_time": "2019-03-06T21:10:44", "url": "https://files.pythonhosted.org/packages/07/bc/02110db0eaf80aeb0487039f97d257858b57b1e9e64b9d1ce3b583a5ad64/smx-0.8.4.tar.gz" } ], "0.8.5": [ { "comment_text": "", "digests": { "md5": "e003d90ab3154123b9c2278d88a97d8d", "sha256": "948262564cf34270e46aeb907e5b723b3898429145ad0f5c0971c31d9cc20a16" }, "downloads": -1, "filename": "smx-0.8.5-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "e003d90ab3154123b9c2278d88a97d8d", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 16898, "upload_time": "2019-03-06T21:30:50", "url": "https://files.pythonhosted.org/packages/62/f0/f74fb990e7c5e059e68fff38655ee315b15514432d0592c934e80c3b0ef0/smx-0.8.5-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e0ab25cbd869a30a1d2627984411ed37", "sha256": "234271450be34f8d0e7a3e18b57d40e211736483b36ab8a8b96033d875ed1a8b" }, "downloads": -1, "filename": "smx-0.8.5.tar.gz", "has_sig": false, "md5_digest": "e0ab25cbd869a30a1d2627984411ed37", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6329, "upload_time": "2019-03-06T21:30:51", "url": "https://files.pythonhosted.org/packages/be/bf/eaa4a8b52ceec4bf76041c76ac6b469dce33064efc035377e93040bbcb93/smx-0.8.5.tar.gz" } ], "0.9.0": [ { "comment_text": "", "digests": { "md5": "d48bfdfadb5e67cde18db02feee407be", "sha256": "31703f416558afa230bcb427440fd0ce9b3b941d3dfaeba040a40835fcabd1d9" }, "downloads": -1, "filename": "smx-0.9.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "d48bfdfadb5e67cde18db02feee407be", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 17033, "upload_time": "2019-04-26T16:57:44", "url": "https://files.pythonhosted.org/packages/34/4d/5bfff26a3f34d296b4bd7bfb2524a4ce177f1843472c007b82a09ac38b41/smx-0.9.0-py2.py3-none-any.whl" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "d48bfdfadb5e67cde18db02feee407be", "sha256": "31703f416558afa230bcb427440fd0ce9b3b941d3dfaeba040a40835fcabd1d9" }, "downloads": -1, "filename": "smx-0.9.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "d48bfdfadb5e67cde18db02feee407be", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 17033, "upload_time": "2019-04-26T16:57:44", "url": "https://files.pythonhosted.org/packages/34/4d/5bfff26a3f34d296b4bd7bfb2524a4ce177f1843472c007b82a09ac38b41/smx-0.9.0-py2.py3-none-any.whl" } ] }