pyyaml自定义标记
pyyaml-tags的Python项目详细描述
pyyaml标记
添加到pyyaml自定义标记支持中
Branch | CI status |
---|---|
master | |
develop |
开始
pyyaml tags是一个用于python中高级yaml处理的库。它建立在成熟且功能齐全的PyYAML库上。
它有6个预定义的标签,允许您自己编写。只使用那些您需要的标记,或者使用一个简单的装饰器和meta-api同时连接所有标记。
安装
pip install pyyaml-tags
使用量
最甜蜜的部分readme.md
文件:)
库提供6个预定义标记:include
,env
,random_int
,randmom_float
,random_str
,time_now
。
API
默认情况下,所有pyyaml标记都处于disabled
状态。
这意味着安装库后它们将无法工作。
要使用标记,首先需要它们。 只需在程序中的任何位置运行以下代码:
fromyaml_tagsimporttag_registrytag_registry.require()# enable all tags # ortag_registry.require(tags='__all__')# same as above# ortag_registry.require('include,env,random_int')# enable 'include', 'env' and 'random_int' tags# ortag_registry.require(tags=['include','env'])# enable 'include', 'env' tags# ortag_registry.require('include','env','time_now')# enable 'include', 'env' and 'time_now' tags
然后在程序中调用yaml.load()(anywhere):
importyamlwithopen('data/a/b/c.yml')asfh:data=yaml.load(fh)print(data)
检查一下-它起作用了!
标记
include
标签include
标记允许您将一个yaml文件包含到另一个yaml文件中。样本:
humans:managers:<% include(path="path/to/managers.yaml") %>accountants:<% include(path="path/to/**/accountant*.yaml", recursive=True, encoding='ascii') %>aliens:<% include(aliens.txt)robots:-<% include(main-robot.yaml) %>-<% include(robots/robot*.yaml) %>
签名
Parameter Required Type Default Description path yes str Path to file. Supports glob syntax recursive no bool False If glob is used, defines is glob recursive or not encoding no str utf-8 Files encoding env
标签env
标记允许您将环境变量值传递到yaml文件中样本:
welcome:Hello, <% env('WORLD_VAR') %> !java_home:<% env('JAVA_HOME') %>
签名
Parameter Required Type Default Description var yes str Environment variable name random_int
标签random_int
标记生成随机的integer值并将它们传递到yaml文件中样本:
rolls:-roll_1:<% random_int %># feel free to omit brackets. It's ok-roll_2:And this is <% random_int() %> !! Am I lacky ?-roll_3:<% random_int(0, 10) %>-roll_4:<% random_int(-50) %>-final:Final one:<% random_int(-10, 10) %>
签名
Parameter Required Type Default Description a no int 0 Left bound b no int ^{ } Right bound random_float
标签random_float
标记生成随机的float值(介于0和1之间)并将它们传递到yaml文件中样本:
rolls:-roll_1:<% random_float %># Feel free to omit brackets-roll_2:Is it PI? <% random_float() %> ?? Nope ...
random_str
标签random_str
标记生成所需长度的随机值str并将其传递到yaml文件中样本:
rolls:-roll_1:<% random_str %># Feel free to omit brackets-roll_2:<% random_str(10) %>-roll_3:My value is <% random_str(5, True) %>-roll_5:And mine is <% random_str(20, False, True) %>-roll_6:<% random_str(uppercase=True) %>-roll_7:Hoho !!! <% random_str(10, lowercase=True) %> Haha !!!
签名
Parameter Required Type Default Description length no int 10 String length uppercase no bool False Convert text to uppercase lowercase no bool False Convert text to lowercase time_now
标签time_now
标记以所需格式获取当前时间戳并将其传递到yaml文件中样本:
context:-timestamp:<% time_now %># Feel free to omit brackets-datetime:<% time_now(False) %>-datetime_fmt:<% time_now(timestamp=False, fmt="%Y-%m-%d %H:%M:%S") %>
签名
Parameter Required Type Default Description timestamp no bool True Paste raw timestamp fmt no str %Y-%m-%d %H:%M:%S Format to use when timestamp=False
自己写标签
要编写自己的标记,请使用以下python模板之一:
使用
tag_registry
fromyaml_tagsimportBaseTag,tag_registry@tag_registry.register('my_own_tag')# you can set tag name hereclassMyOwnTag(BaseTag):# tag_name = 'my_own_tag' # or set it here as alternativedef_from_yaml(self,_loader,_work_dir,_prefix,_suffix,param1=None,param2=None,param3=False,param4='utf-8',*args,**kwargs):ifnotparam1:raiseValueError("Param1 is required")# your computations hereresult="smth"ifsome_condition(result):# it doesn't matter what condition is thisreturnresult# w/o prefix and suffixreturn_prefix+result+_suffix
使用
TagAutoRegister
元类。tag_name
属性在这里是必需的。fromsiximportwith_metaclassfromyaml_tagsimportBaseTag,TagAutoRegisterclassMyOwnTag(with_metaclass(TagAutoRegister(),BaseTag)):tag_name='my_own_tag'# tag namedef_from_yaml(self,_loader,_work_dir,_prefix,_suffix,param1=None,param2=None,param3=False,param4='utf-8',*args,**kwargs):ifnotparam1:raiseValueError("Param1 is required")# your computations hereresult="smth"ifsome_condition(result):# it doesn't matter what condition is thisreturnresult# w/o prefix and suffixreturn_prefix+result+_suffix
那就在某处需要你自己的标签:
fromyaml_tagsimporttag_registrytag_registry.require('my_own_tag')# ortag_registry.require(tags='__all__')# require all
并在您的yaml文件中这样使用:
my_own_data:<% my_own_tag(param1="test", param2=2, param3=True, param4='ascii') %>
就这些!
运行测试
我们正在使用Tox。它是一个通用的virtualenv管理和测试命令行工具。
单元测试
- 要运行测试,只需在命令shell中键入
tox
。 - 要运行特定python版本的测试,请使用以下命令:
- 对于python 2:
tox -e py2
(或py27
) - 对于python 3:
tox -e py3
(或者py34
,py35
,py36
,py37
)
- 对于python 2:
编码风格测试
要检查代码样式,只需在命令shell中运行tox -e pep8
。
覆盖范围
对于覆盖率,请使用tox -e codecov
命令。
使用
构建贡献
欢迎您的贡献!只要提交你的公关,成为一个派亚姆社区的一部分!
请阅读contributing.md了解有关我们的行为准则以及向我们提交请求的过程的详细信息。
版本控制
我们使用SemVer进行版本控制。有关可用的版本,请参见tags on this repository。
作者
- vadim fedorenko-Meiblorn-初始工作
另请参阅参与此项目的authors列表。
许可证
这个项目是U授权的在麻省理工学院的许可证下-有关详细信息,请参见LICENSE.md文件
致谢
- 这是我的第一个python开源项目。哈。 vadim fedorenko-Meiblorn-初始工作
1.0.0-第一次发布。增加了
include
,env
,random_int
,random_float
,random_str
和time_now
标记。1.0.1-添加了
readme.md
和contributing.md
文件。 更改了authors.md
和changelog.md
文件1.0.2-更改了Travis CI PYPI部署的配置
1.0.3-更改了travis ci pypi部署目标python版本。 重新配置“部署”条件。
1.0.4-更新setup.py flow。在readme.md文件中添加了覆盖徽章。 修复了readme.md文件中的标记链接。