PyYAML 自定义标签
项目描述
PyYAML-标签
添加到 PyYAML 自定义标签支持
| 分支 | CI 状态 |
|---|---|
| 掌握 | |
| 开发 |
入门
PyYAML-Tags是 Python 中用于高级 YAML 处理的库。它建立在成熟且功能齐全的PyYAML库之上。
它带有 6 个预定义的标签,并允许您编写自己的标签。仅使用您需要的那些标签,或者使用出色而简单的装饰器和元 API 一次性连接所有标签。
安装
pip install pyyaml-tags
用法
文件中最甜蜜的部分readme.md:)
库提供 6 个预定义标签:include、env、random_int、randmom_float、random_str、time_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_registryfrom 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 py2或py27) - 对于 Python 3:(
tox -e py3或py34,py35,py36,py37)
- 对于 Python 2:(
编码风格测试
要检查您的代码样式,只需tox -e pep8在您的命令外壳中运行。
覆盖范围
对于覆盖使用tox -e codecov命令。
内置
贡献
欢迎您投稿!只需提交您的 PR 并成为 PyYAML 社区的一员!
请阅读贡献.md 了解我们的行为准则的详细信息,以及向我们提交拉取请求的过程。
版本控制
我们使用SemVer进行版本控制。有关可用版本,请参阅此存储库上的标签。
作者
- Vadim Fedorenko - Meiblorn -初步工作
另请参阅参与此项目的作者列表。
执照
该项目在 MIT 许可下获得许可 - 请参阅LICENSE.md文件了解详细信息
致谢
- 这是我的第一个 Python 开源项目。哈。 Vadim Fedorenko - Meiblorn -初步工作
-
1.0.0 — 首次发布。添加了、
include、env、random_int和random_float标签 。random_strtime_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 版本。重新配置“deploy_on”条件。
-
1.0.4 - 更新 setup.py 流程。在 readme.md 文件中添加了覆盖标记。修复了 readme.md 文件中的标签链接。
项目详情
下载文件
下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。
源分布
内置分布
pyyaml_tags -1.0.4-py2.py3-none-any.whl 的哈希值
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | c377408c0c6c4b8498b4fd0224c086a36d10e18f0685a66c872b47a2f8b69d79 |
|
| MD5 | dd97496b8989437f7d2a351010c68395 |
|
| 布莱克2-256 | 39ce5264aa26038144a7f73adc04e14aba60b65778dca6c2114b817d52bd2530 |