简单的python宏扩展

smx的Python项目详细描述


Build StatusCoverage

简单的python模板

example:
  - key : %os.environ.get(USER)
  - roaming : %if(sys.platform=='win32',1,0)
  %indent(%include(file_name))
  - other : %eval(1 + 1)
  %indent(%python("
import mod
f = open('myfile.in')
f.read()
output(mod.process(f))
 ")

允许以内联方式展开简单宏。您可以通过命令行from smx import Smx进行计算。从命令行导入所有env变量或模块的选项都可用。宏可以嵌套…所以%expand(%include(...))是一个有效的语法。

用于yml模板、配置文件、kubernate部署、简单的html页面等。

安装

pip install smx

使用

   > smx file.in > file.out
   > smx --help

或者来自python:

   from smx import Smx
   ctx = Smx()
   ctx.expand("%add(1,1)")
   ctx.expand_io(fin, fout)
   ctx.expand_file(filename, in_place=True)

包括代码和文件

MacroDescription
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

模块

MacroDescription
os....os functions are included by default, for example ^{}
sys....sys functions are included by default EG: ^{} can be used

其他

MacroDescription
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

目标

  • 语法应该是“macroy”而不是“pythony”…这样你就可以知道,当宏正在运行的时候…与Python的较量。
  • 通过从smx派生并使用@smx.macro decorator添加新函数,可以轻松添加自己的宏。
  • 易于导入python模块并在基本上任何字符串上下文中使用它们
  • json和yaml模板友好
  • 在大多数配置上下文中使用“原样”
  • 默认情况下是不安全的,但是使用“安全模式”允许不受信任地执行一组严格的宏扩展是微不足道的

注意事项

  • 重要的是要记住,所有宏都会产生“字符串”,而不是其他python类型。
  • 当面向上下文的模板编程变得复杂时,您可能不应该使用模板。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java重写父类中的特定行   java Apache Commons CLI订购帮助选项?   java如何将数据添加到网格视图   java如何在Apache Camel批处理后移动文件?   java如何为日期范围的between子句编写hql查询?   雅加达ee开始Java编程,我应该从哪里开始?   排序Java8+流:检查我的objectinstances的两个字段的列表顺序是否正确   java如何将json转换为Map<String,Object>确保整数为整数   java不能在Spring数据JPA批处理过程中创建TransactionException   java损坏的PDF文件从FTP下载到使用Apache Common Net的设备   java无法使用Spring批处理和Wso2为XML架构命名空间找到Spring NamespaceHandler   java Android ImageView未显示在SherlockFragment中   Maven在构建时出错=无法识别Java路径   java如何使用批处理文件调用关闭处理程序?   java admob广告横幅重叠我的游戏屏幕安卓