可扩展的配置文件格式

ya的Python项目详细描述


yay的变更日志

3.1.1(2013-11-06)

  • 什么都没变。

3.1.0(2013-11-06)

  • 现在支持Python3.2和Python3.3(除了2.6、2.7和 PyPy)
  • 对yaml多行块模式的许多修正
  • 大量测试覆盖率改进
  • 移除扩展切片不必要的支撑
  • 命令行输出更漂亮

3.0.1(2013-09-04)

  • 什么都没变。

3.0(2013-09-04)

  • 这是对ply解析框架的完全重写。

0.0.62(2012-09-27)

  • 请先尝试导入,因为它可能会产生命中率并节省检查Internet的时间 为了一些事情。

0.0.61(2012-09-15)

  • 早期版本添加了验证,以停止使用映射替换列表 反之亦然。然而,实现并没有考虑到 扩展来自查找的映射。

0.0.60(2012-09-15)

  • 修复筛选器节点。它以前在扩展和 这使得它的孩子们无法在全球范围内查找价值观 名称空间。

0.0.59(2012-09-01)

  • 修复设置gpg tty。

0.0.58(2012-08-15)

  • 捕获GPG失败并引发异常。不幸的是没有和你说话 在FD状态下,我们无法获得关于出了什么问题的更多信息。
  • 以批处理模式运行。这将阻止gpg忽略stdout/stderr重定向 但这意味着您现在必须使用gpg代理,因为它不再提示 密码短语。
  • gpg_tty已设置-这意味着gpg代理现在可以实际提示。
  • 修复使用嵌套字典时的配置添加。

0.0.57(2012-08-02)

  • 向根配置对象添加新的延迟查找方法。如果你 在建洛杉矶字典键上的zy迭代器:

    def example_iterator(self, expression):
        try:
            for item in expression.expand():
                resolved = item.resolve()
                create_obj_from_settings(resolved)
        except CreateObjectError:
            # You can get line and column from the item object!
        except yay.errors.Error:
            # Ideal place to wrap Yay errors in your apps exceptions
    
    example_iterator(config.lookup("somekey"))
    

    您可以在这里看到,api允许您延迟任何混乱的"找不到密钥" 在迭代器需要访问它们之前出现异常-迭代器 已经有适当的异常处理。

  • 为向后兼容性添加其他测试用例

0.0.56(2012-07-31)

  • 代码路径现在用跟踪上下文修饰。这个上下文 元数据让人感觉到Yay失控时在做什么。

0.0.55(2012-07-25)

  • 修复packageIndex,使其在缺少包时不发出警告()-我们捕获此 我们自己!

0.0.54(2012年7月22日)

  • 行号和文件信息应可用于 克隆会导致更有用的错误输出。
  • 将正确处理序列节点上的索引错误
  • 将序列作为映射节点将触发相应的yay错误。

0.0.53(2012年7月21日)

  • 允许使用yay的python代码为打开程序设置默认配置

0.0.52(2012年7月21日)

  • 包中修复现有用户的回归。//

0.0.51(2012-07-19)

  • 引入一种延迟评估的机制来扩展搜索路径:

    .search:
      - package://some.egg/
      - http://raw.github.com/isotoma/yay/
    

    任何随后的 .import 语句都将使用修改后的搜索路径。

  • 如果包指定为.include的一部分或.search的一部分 在sys.path上不可用,则将尝试安装它。

  • 可以使用 .config 将配置传递给开放器后端。例如,您可以 想让 程序包:// 打开程序使用您的内部程序包 存储库:

    .config:
        openers:
            packages:
                index: https://my-python-mirror/simple/
                username: joe
                password: penguin55
    

    您可以使用变量substitution并在gpg中定义密码。 加密的yay文件或从正在使用的应用程序中推送变量 YA.< /P>

  • yay openers支持url中的基本身份验证。如果与一起使用,则包括 提示连接以隐藏密码的秘密:

    # Define ${password} in a GPG armored file
    .include: home://.credentials.yay.gpg
    
    .search:
      - https://username:${password}@svn.yourcompany.org/svn/cookbook/trunk
    
  • 。include 。search 可以是单个标量值,而不是列表 如果您愿意。

0.0.50(2012-07-10)

  • 允许表达式返回空字典:

    result: ${site.vhosts else {}}
    

0.0.49(2012-06-27)

  • 添加了一个字符串替换函数,允许人们执行如下操作:

    something: jolly good show
    slug: ${replace(something, " ", "-")}
    

    此后, slug 的值将是 非常好的显示

0.0.48(2012-04-07)

  • foreach期间的操作员支持:

    result.foreach v in somevalues if v in somelist: ${v}.
    

0.0.47(2012-04-06)

  • 允许表达式包含文本字符串和浮点数:

    result: ${site.description else "No description"}
    result2: ${3.212121}
    
  • 允许表达式返回空列表:

    result: ${site.vhosts else []}
    
  • 允许未定义键的相等检查在没有 引发不匹配异常:

    def example_iterator(self, expression):
        try:
            for item in expression.expand():
                resolved = item.resolve()
                create_obj_from_settings(resolved)
        except CreateObjectError:
            # You can get line and column from the item object!
        except yay.errors.Error:
            # Ideal place to wrap Yay errors in your apps exceptions
    
    example_iterator(config.lookup("somekey"))
    
    0

    res1将为空,因为part1和part2都没有值为的字段 2,res2将包含part1和part2,因为两者都没有带a的c字段 值1。

  • 添加一个未定义的 在解决时引发NoMatch异常。这个 允许根据映射中是否存在密钥进行筛选。

    < Buff行情> < DL>
    数据:
    < D> > DL>
    第1部分:

    a:1

    第2部分:

    c:2

    res.foreach p in data if data[p].c=未定义:${p}

    res将包含part1,因为part1没有c字段。

0.0.46(2012-04-04)

  • 修复 中的 else 表达式。E

0.0.45(2012-03-22)

  • 现在可以将ETag传递给 openers 的open方法。这会导致 如果etag匹配显示请求uri未更改,则为notmodified异常。 这可以用来实现缓存策略并减少数据量 网络连接中断:

    def example_iterator(self, expression):
        try:
            for item in expression.expand():
                resolved = item.resolve()
                create_obj_from_settings(resolved)
        except CreateObjectError:
            # You can get line and column from the item object!
        except yay.errors.Error:
            # Ideal place to wrap Yay errors in your apps exceptions
    
    example_iterator(config.lookup("somekey"))
    
    1
  • 所有的开场白现在都有一个ETag属性。如果 无法提供合适的ETag。否则应该是一些散列 保证文件的状态,以便以后的请求可以询问"have it" 在这种状态下发生了变化"。获取ETag:

    def example_iterator(self, expression):
        try:
            for item in expression.expand():
                resolved = item.resolve()
                create_obj_from_settings(resolved)
        except CreateObjectError:
            # You can get line and column from the item object!
        except yay.errors.Error:
            # Ideal place to wrap Yay errors in your apps exceptions
    
    example_iterator(config.lookup("somekey"))
    
    2

0.0.44(2012-03-17)

  • 修正。选择解析的值是复杂表达式的时间。
  • 当您意外地混淆了列表和映射类型时,可以更好地进行验证。

0.0.43(2012-02-12)

  • 修复在没有方案的情况下对searchpath上的路径的处理。

0.0.42(2012-01-01)

  • 更改django boxing的工作方式,以便 拳击机制工作。这允许推送原始django mdoel 使用 将API从0.0.41添加到yay中。

0.0.41(2011年12月21日)

  • 您可以将python对象注入yay配置对象,只要yay 知道如何包装它们。如果你有这样一个yay文件:

    def example_iterator(self, expression):
        try:
            for item in expression.expand():
                resolved = item.resolve()
                create_obj_from_settings(resolved)
        except CreateObjectError:
            # You can get line and column from the item object!
        except yay.errors.Error:
            # Ideal place to wrap Yay errors in your apps exceptions
    
    example_iterator(config.lookup("somekey"))
    
    3

    以及以下python代码:

    def example_iterator(self, expression):
        try:
            for item in expression.expand():
                resolved = item.resolve()
                create_obj_from_settings(resolved)
        except CreateObjectError:
            # You can get line and column from the item object!
        except yay.errors.Error:
            # Ideal place to wrap Yay errors in your apps exceptions
    
    example_iterator(config.lookup("somekey"))
    
    4

    则以下断言为真:

    def example_iterator(self, expression):
        try:
            for item in expression.expand():
                resolved = item.resolve()
                create_obj_from_settings(resolved)
        except CreateObjectError:
            # You can get line and column from the item object!
        except yay.errors.Error:
            # Ideal place to wrap Yay errors in your apps exceptions
    
    example_iterator(config.lookup("somekey"))
    
    5

0.0.40(2011-12-13)

  • 修复了调用其他文件中定义的宏的问题。

0.0.39(2011年11月30日)

  • 修复字符串生成器,以便可以pickle包含机密的配置。

0.0.38(2011-11-22)

  • 这是一个bug修复版本,用于改进现有功能,特别是 外部数据。
  • 将更多代码从直接使用 boxed 移到 boxingfactory.box
  • 将任何字典对象包装在映射对象中,以便它们可以与 来自yay内部的其他映射。

0.0.37(2011-11-20)

  • 释放棕色纸袋以去除杂散的打印。

0.0.36(2011-11-20)

  • 现在有一个url处理程序。对于我的笔记本电脑,这意味着:

    def example_iterator(self, expression):
        try:
            for item in expression.expand():
                resolved = item.resolve()
                create_obj_from_settings(resolved)
        except CreateObjectError:
            # You can get line and column from the item object!
        except yay.errors.Error:
            # Ideal place to wrap Yay errors in your apps exceptions
    
    example_iterator(config.lookup("somekey"))
    
    6

    相当于:

    def example_iterator(self, expression):
        try:
            for item in expression.expand():
                resolved = item.resolve()
                create_obj_from_settings(resolved)
        except CreateObjectError:
            # You can get line and column from the item object!
        except yay.errors.Error:
            # Ideal place to wrap Yay errors in your apps exceptions
    
    example_iterator(config.lookup("somekey"))
    
    7
  • 改进搜索路径处理以更好地处理uri。

  • 根据yep2在表达式中添加对 else 关键字的支持:

    def example_iterator(self, expression):
        try:
            for item in expression.expand():
                resolved = item.resolve()
                create_obj_from_settings(resolved)
        except CreateObjectError:
            # You can get line and column from the item object!
        except yay.errors.Error:
            # Ideal place to wrap Yay errors in your apps exceptions
    
    example_iterator(config.lookup("somekey"))
    
    8

    这对于在食谱中提供合理的默认值很有用。

  • 循环块现在正在自动展平。这意味着 列表列表将通过 .foreach 转换为一维列表。为了 例子:

    def example_iterator(self, expression):
        try:
            for item in expression.expand():
                resolved = item.resolve()
                create_obj_from_settings(resolved)
        except CreateObjectError:
            # You can get line and column from the item object!
        except yay.errors.Error:
            # Ideal place to wrap Yay errors in your apps exceptions
    
    example_iterator(config.lookup("somekey"))
    
    9

    其他列表现在包含:

    .search:
      - package://some.egg/
      - http://raw.github.com/isotoma/yay/
    
    0

    前面的行为可以通过 修饰符获得:

    .search:
      - package://some.egg/
      - http://raw.github.com/isotoma/yay/
    
    1
  • 添加一个简单的宏语言。这是高度实验性的 频繁的语法调整。您可以定义一个可重用的配置块 使用.define语句。在yaybu中创建可重用的 虚拟化步骤:

    .search:
      - package://some.egg/
      - http://raw.github.com/isotoma/yay/
    
    2

    宏可以作为表达式的一部分内联调用。例如:

    .search:
      - package://some.egg/
      - http://raw.github.com/isotoma/yay/
    
    3

    同样,您也可以这样做:

    .search:
      - package://some.egg/
      - http://raw.github.com/isotoma/yay/
    
    4

0.0.35(2011-11-12)

  • 这个版本重构了protectedstring,使它在yay之外更加有用。 与其导入yay.protectedstring.protectedstring,不如导入 导入

  • 现在可以将字符串传递给构造函数,它们将自动 包裹。以前,您必须将stringpart的传递给构造函数。那就是 现在是一个内部爆炸齿向细节。

  • 现在有一个extend()函数。它接受包含混合物的列表 原始字符串和其他 字符串 对象:

    .search:
      - package://some.egg/
      - http://raw.github.com/isotoma/yay/
    
    5
  • 现在有一个as_list()函数。这将返回您添加的所有部分 一根绳子。如果要生成要传递到的命令行,则这非常有用 子流程:

    .search:
      - package://some.egg/
      - http://raw.github.com/isotoma/yay/
    
    6
  • 现在有一个 秘密 调用yay来执行秘密yay 需要使用gpg。这主要用于测试目的,但如果 你有一根弦,虽然没有严格保密,但你不想要它们 在日志中显示。要使用它,请执行以下操作:

    .search:
      - package://some.egg/
      - http://raw.github.com/isotoma/yay/
    
    7

    这个例子来自yaybu,它会阻止yaybu记录您的svn 密码。

0.0.34(2011年11月10日)

  • compose现在重用opener(),而不是为每个流创建一个新的opener 加载。

0.0.33(2011年11月10日)

  • 现在您可以将 searchpath 传递到 config 对象。

0.0.32(2011年11月10日)

  • 工作包://imports

0.0.31(2011年11月10日)

  • 更好的绝对路径处理

0.0.30(2011年11月10日)

  • api返回的任何流对象现在都有一个len属性。

  • 内部的 openers() api现在可以从python路径上的任何包加载:

    .search:
      - package://some.egg/
      - http://raw.github.com/isotoma/yay/
    
    8

0.0.29(2011年11月10日)

  • 内部 openers() api现在支持搜索路径:

    .search:
      - package://some.egg/
      - http://raw.github.com/isotoma/yay/
    
    9
  • openers() api现在支持 https://

0.0.28(2011-11-07)

  • 完全移除所有映射默认crud

0.0.27(2011-11-03)

  • 修复${django.somemodel}以正确解析

0.0.26(2011-11-03)

  • 添加对django数据存储的支持
  • 允许从python公开对象,包括简单的方法调用

0.0.25(2011-10-28)

  • 在.append中修复回归

0.0.24(2011-10-22)

  • 现在可以在映射上foreach
  • 如果x.z=a,则在y中添加x
  • 添加"。表达式为foo:"
  • 将chain和nochain模式添加到foreach。默认为"链"。
  • 主要重构,不再需要上下文变量来解析图形
  • "semi_resolve"api现在更正确地命名为"expand"

0.0.23(2011-07-26)

  • $$转义$-so$${foo}被视为字符串,而不是变量查找

0.0.22(2011-07-19)

  • 删除虚假的调试消息
  • 固定.foreach上的导入

0.0.21(2011-07-19)

  • new.include指令,它可以使用变量并显示在文件中的任何位置

0.0.20(2011-06-29)

  • 将protectedstring更改为从basestring继承

0.0.19(2011-06-29)

  • 受保护的yay文件的概念,其中的任何字符串最终都包含 秘密将被掩盖
  • protectedstring,处理受保护字符串和未受保护字符串的连接
  • gpg用于解密.yay.gpg文件,它们生成的任何变量都受到保护

0.0.18(2011-06-10)

  • 拆除杂散调试脚手架的棕色纸袋

0.0.17(2011-06-10)

  • 修正追加到"无"
  • 修复列表已部分解析的列表访问

0.0.16(2011-06-10)

  • 添加范围测试,修复ed range()作为${}扩展
  • 添加sum()(但没有语法糖)
  • 允许对筛选器执行索引操作
  • 修复了在flatten()节点上迭代的问题
  • 修复在foreach()节点上迭代的问题
  • 对漏掉的空文档添加测试

0.0.15(2011-05-18)

  • 如果字段访问无效,则引发错误
  • 添加语言错误以在yay文件时显示有用的消息 错误
  • 如果我们提出一个错误 是。错误。错误

0.0.14(2011-05-12)

  • 空的时候不要打断(例如{})

0.0.13(2011-03-06)

  • 修复附加节点

0.0.12(2011-03-03)

  • 导出该方法;)

0.0.11(2011-03-03)

  • 除非需要,否则不要使用Unicode
  • 添加dump()方法

0.0.10(2011-02-22)

  • 不要在括号内的表达式中选择空格

0.0.9(2011-02-22)

  • 不要在模板字符串中选择空格

0.0.8(2011-02-18)

  • 将"foreach bar as foo"替换为"foreach foo in bar"

0.0.7(2011-02-16)

  • 从0开始的数字被视为基数8。

0.0.6(2011-02-13)

  • 尽可能避免使用Unicode映射键-它们在py2.x中会破坏Kwargs

0.0.5(2011-02-09)

  • 添加对嵌套foreach的支持
  • 至少现在,支持ruby风格。

0.0.4(2011-02-04)

  • {foo}可以由yaml解释为映射。现在,我们将使用${foo}来避免这种情况
  • 对python的函数调用已经实现-现在有range()
  • 现在有一个foo.select键,因此可以使用switch语句

0.0.3(2011-01-24)

  • 鸡蛋包装修复

0.0.2(2011-01-24)

  • 更多用于表达式求值和表达式解析的单元测试
  • 放弃对OrderedDict的依赖

0.0.1

  • 这仍然是预发行版,没有API或语言稳定性保证
  • 变量解析现在在表达式树中完成,没有单独的解析阶段
  • 使用pyparsing分析{foo[bar][@.baz>;5]}类型语法

0.0.0

  • 这是一个预先的alpha版本,用于实验我们能做什么和不能做什么。
  • 新的pyyaml加载程序子类,用于获取没有丑陋的有序映射!!omap标记
  • 解析yaml节点中的{}标记
  • 懒洋洋地计算.copy、.append和.remove指令

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

推荐PyPI第三方库


热门话题
如何在Java和Javascript之间共享常量   c#无法使用Gson反序列化字节[]   如果字符串是实十进制数字,则在Java中仅显示十进制数字   与Android Studio的java FireBase同步失败   web应用程序的Java Oracle数据库更改通知问题   数组中缺少整数的java嵌套循环   zos在z/os上以TOD格式(一天中的时间)转换Java时间戳   java JAXB未根据注释生成XML(JDK 1.7)   java使用Twitter4j和Geolocation查找在该地区发布推文的用户,但如何获取用户ID?   在Libgdx中实现简单运动模糊的java意外结果   java在Android数据库中插入另一个EditText值?   java标准偏差数组(我的算法错误)   java如何修复M1 Mac的Ant javascript标记?   java遍历树标记值的长度   java理解Springboot中的Cron,自动发送电子邮件   java如何将“Data.Json”文件从资产保存到内部存储器,然后将其用于读/写   java代码在编写FirstDuplicate方法时会遇到时间限制问题   java将HTML转换为PDF并将其添加到段落中   javascript css()未设置正文标记的背景属性