pyyaml自定义标记

pyyaml-tags的Python项目详细描述


pyyaml标记

添加到pyyaml自定义标记支持中

BranchCI status
masterBuild Statuscodecov
developBuild Statuscodecov

开始

pyyaml tags是一个用于python中高级yaml处理的库。它建立在成熟且功能齐全的PyYAML库上。

它有6个预定义的标签,允许您自己编写。只使用那些您需要的标记,或者使用一个简单的装饰器和meta-api同时连接所有标记。

安装

pip install pyyaml-tags

使用量

最甜蜜的部分readme.md文件:)

库提供6个预定义标记:includeenvrandom_intrandmom_floatrandom_strtime_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) %>
    签名
    ParameterRequiredTypeDefaultDescription
    pathyesstrPath to file. Supports glob syntax
    recursivenoboolFalseIf glob is used, defines is glob recursive or not
    encodingnostrutf-8Files encoding
  • env标签

    env标记允许您将环境变量值传递到yaml文件中

    样本:
    welcome:Hello, <% env('WORLD_VAR') %> !java_home:<% env('JAVA_HOME') %>
    签名
    ParameterRequiredTypeDefaultDescription
    varyesstrEnvironment 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) %>
    签名
    ParameterRequiredTypeDefaultDescription
    anoint0Left bound
    bnoint^{}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 !!!
    签名
    ParameterRequiredTypeDefaultDescription
    lengthnoint10String length
    uppercasenoboolFalseConvert text to uppercase
    lowercasenoboolFalseConvert 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") %>
    签名
    ParameterRequiredTypeDefaultDescription
    timestampnoboolTruePaste raw timestamp
    fmtnostr%Y-%m-%d %H:%M:%SFormat 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(或者py34py35py36py37

编码风格测试

要检查代码样式,只需在命令shell中运行tox -e pep8

覆盖范围

对于覆盖率,请使用tox -e codecov命令。

使用

构建
  • PyYAML-python编程语言的全功能yaml框架。
  • AST-帮助python应用程序处理python抽象语法树。
  • Path.py-python 2.x的路径对象

贡献

欢迎您的贡献!只要提交你的公关,成为一个派亚姆社区的一部分!

请阅读contributing.md了解有关我们的行为准则以及向我们提交请求的过程的详细信息。

版本控制

我们使用SemVer进行版本控制。有关可用的版本,请参见tags on this repository

作者

另请参阅参与此项目的authors列表。

许可证

这个项目是U授权的在麻省理工学院的许可证下-有关详细信息,请参见LICENSE.md文件

致谢

  • 这是我的第一个python开源项目。哈。 vadim fedorenko-Meiblorn-初始工作
  • 1.0.0-第一次发布。增加了includeenvrandom_intrandom_floatrandom_strtime_now标记。

  • 1.0.1-添加了readme.mdcontributing.md文件。 更改了authors.mdchangelog.md文件

  • 1.0.2-更改了Travis CI PYPI部署的配置

  • 1.0.3-更改了travis ci pypi部署目标python版本。 重新配置“部署”条件。

  • 1.0.4-更新setup.py flow。在readme.md文件中添加了覆盖徽章。 修复了readme.md文件中的标记链接。

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

推荐PyPI第三方库


热门话题
java是安卓的子类。所容纳之物ClipData或ClipData。项目   毕加索中的java错误get()无法应用于(安卓.content.Context)   管道接受来自控制台和管道文本文件的Java输入   Java Windows文件权限   java如何在Selenium中找到此按钮?我尝试了partiallinktext并多次尝试cssSelector   java如何在spring jdbc模板中生成流式sql?   方法中的java全局值变为null   java设备“Mobile Intel(R)4 Series Express芯片组系列”(\\.\DISPLAY1)初始化失败:   java查找单独文件夹中的资源到类文件   java iCal4j添加会议说明   java如何处理InvalidTokenException?   oop如果Java不支持运算符重载,增量运算符如何在整数实例上工作?   java如何在Hibernate中获取<map>