Skip to main content

PyYAML 自定义标签

项目描述

PyYAML-标签

添加到 PyYAML 自定义标签支持

分支 CI 状态
掌握 构建状态编解码器
开发 构建状态编解码器

入门

PyYAML-Tags是 Python 中用于高级 YAML 处理的库。它建立在成熟且功能齐全的PyYAML库之上。

它带有 6 个预定义的标签,并允许您编写自己的标签。仅使用您需要的那些标签,或者使用出色而简单的装饰器和元 API 一次性连接所有标签。

安装

pip install pyyaml-tags

用法

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

库提供 6 个预定义标签:includeenvrandom_intrandmom_floatrandom_strtime_now

API

默认情况下,所有 PyYAML 标签都处于disabled状态。这意味着在您安装库后它们将无法工作。

要使用标签,您需要先要求它们。只需在程序中的任何位置运行以下代码:

from yaml_tags import tag_registry

tag_registry.require() # enable all tags 
# or
tag_registry.require(tags='__all__') # same as above
# or
tag_registry.require('include,env,random_int') # enable 'include', 'env' and 'random_int' tags
# or
tag_registry.require(tags=['include', 'env']) # enable 'include', 'env' tags
# or
tag_registry.require('include', 'env', 'time_now') # enable 'include', 'env' and 'time_now' tags

然后在你的程序中调用 yaml.load() (任何地方):

import yaml

with open('data/a/b/c.yml') as fh:
    data = yaml.load(fh)

print(data)

并检查 - 它有效!

标签

  • include标签

    include标签允许您将一个 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) %> 
    
    签名
    范围 必需的 类型 默认 描述
    小路 是的 字符串 文件路径。支持全局语法
    递归的 布尔 错误的 如果使用glob,则定义是否为 glob 递归
    编码 字符串 UTF-8 文件编码
  • env标签

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

    样本:
    welcome: Hello, <% env('WORLD_VAR') %> !
    java_home: <% env('JAVA_HOME') %>
    
    签名
    范围 必需的 类型 默认 描述
    变量 是的 字符串 环境变量名称
  • random_int标签

    random_int标签生成随机数值并将它们传递到 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) %> 
    
    签名
    范围 必需的 类型 默认 描述
    一个 整数 0 左界
    b 整数 sys.maxsize 右界
  • random_float标签

    random_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 !!!
    
    签名
    范围 必需的 类型 默认 描述
    长度 整数 10 字符串长度
    大写 布尔 错误的 将文本转换为大写
    小写 布尔 错误的 将文本转换为小写
  • 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") %> 
    
    签名
    范围 必需的 类型 默认 描述
    时间戳 布尔 真的 粘贴原始时间戳
    fmt 字符串 %Y-%m-%d %H:%M:%S 当 timestamp=False 时使用的格式

编写自己的标签

要编写您自己的标签,请使用以下 Python 模板之一:

  • 使用tag_registry

    from yaml_tags import BaseTag, tag_registry
    
    @tag_registry.register('my_own_tag') # you can set tag name here
    class MyOwnTag(BaseTag):
        # tag_name = 'my_own_tag' # or set it here as alternative
    
        def _from_yaml(self, _loader, _work_dir, _prefix, _suffix,
                   param1=None, param2=None, param3=False, param4='utf-8',
                   *args, **kwargs):
    
            if not param1:
                raise ValueError("Param1 is required")
    
            # your computations here
            result = "smth"
    
            if some_condition(result): # it doesn't matter what condition is this
                return result # w/o prefix and suffix
    
            return _prefix + result + _suffix
    
  • 使用TagAutoRegister元类。tag_name属性在这里是必需的。

    from six import with_metaclass
    from yaml_tags import BaseTag, TagAutoRegister
    
    class MyOwnTag(with_metaclass(TagAutoRegister(), BaseTag)):
        tag_name = 'my_own_tag' # tag name
    
        def _from_yaml(self, _loader, _work_dir, _prefix, _suffix,
                   param1=None, param2=None, param3=False, param4='utf-8',
                   *args, **kwargs):
    
            if not param1:
                raise ValueError("Param1 is required")
    
            # your computations here
            result = "smth"
    
            if some_condition(result): # it doesn't matter what condition is this
                return result # w/o prefix and suffix
    
            return _prefix + result + _suffix
    

然后在某处需要你自己的标签:

from yaml_tags import tag_registry

tag_registry.require('my_own_tag')
# or
tag_registry.require(tags='__all__') # require all

并在您的 yaml 文件中使用它,如下所示:

my_own_data: <% my_own_tag(param1="test", param2=2, param3=True, param4='ascii') %>

就这样 !

运行测试

我们正在使用Tox。它是一个通用的 virtualenv 管理和测试命令行工具。

单元测试

  • 要运行测试,只需键入tox命令 shell。
  • 要运行特定 Python 版本的测试,请使用以下命令:
    • 对于 Python 2:(tox -e py2py27
    • 对于 Python 3:(tox -e py3py34, py35, py36, py37

编码风格测试

要检查您的代码样式,只需tox -e pep8在您的命令外壳中运行。

覆盖范围

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

内置

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

贡献

欢迎您投稿!只需提交您的 PR 并成为 PyYAML 社区的一员!

请阅读贡献.md 了解我们的行为准则的详细信息,以及向我们提交拉取请求的过程。

版本控制

我们使用SemVer进行版本控制。有关可用版本,请参阅此存储库上的标签

作者

  • Vadim Fedorenko - Meiblorn -初步工作

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

执照

该项目在 MIT 许可下获得许可 - 请参阅LICENSE.md文件了解详细信息

致谢

  • 这是我的第一个 Python 开源项目。哈。 Vadim Fedorenko - Meiblorn -初步工作
  • 1.0.0 — 首次发布。添加了、includeenvrandom_intrandom_float标签 。random_strtime_now

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

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

  • 1.0.3 - 更改了 Travis CI PyPI 部署目标 Python 版本。重新配置“deploy_on”条件。

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

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

pyyaml-tags-1.0.4.tar.gz (21.6 kB 查看哈希

已上传 source

内置分布

pyyaml_tags-1.0.4-py2.py3-none-any.whl (11.6 kB 查看哈希

已上传 py2 py3