我想使用一种配置文件格式,它支持键值对和可嵌套的,可重复的结构,并且尽可能地使用语法.我想象的是:
cachedir = /var/cache
mail_to = me@example.org
job {
name = my-media
frequency = 1 day
source {
from = /home/michael/Images
source { }
source { }
}
job { }
Run Code Online (Sandbox Code Playgroud)
我对使用重要空白的东西感到满意.
JSON需要太多明确的语法规则(引用,逗号等).YAML实际上非常好,但是需要将作业定义为YAML列表,我发现使用起来有些尴尬.
我的应用程序的用户可以通过格式字符串配置某些文件的布局.
例如,用户指定的配置值可能是:
layout = '%(group)s/foo-%(locale)s/file.txt'
Run Code Online (Sandbox Code Playgroud)
我现在需要找到已经存在的所有这些文件.使用glob模块这似乎很容易:
glob_pattern = layout % {'group': '*', 'locale': '*'}
glob.glob(glob_pattern)
Run Code Online (Sandbox Code Playgroud)
但是,现在出现了困难的部分:给定glob结果列表,我需要获得与给定占位符匹配的所有文件名部分,例如所有不同的"locale"值.
我以为我会为格式字符串生成一个正则表达式,然后我可以匹配glob结果列表(或者可能跳过glob并自己完成所有匹配).
但我找不到一个很好的方法来创建正则表达式与正确的组捕获,并逃避其余的输入.
例如,这可能会给我一个与语言环境匹配的正则表达式:
regex = layout % {'group': '.*', 'locale': (.*)}
Run Code Online (Sandbox Code Playgroud)
但是为了确保正则表达式是有效的,我需要通过re.escape()传递它,然后它也会转义我刚刚插入的正则表达式语法.调用re.escape()首先会破坏格式字符串.
我知道有fnmatch.translate(),它甚至会给我一个正则表达式 - 但不会返回正确的组.
有没有一个很好的方法来做到这一点,没有像使用正则表达式安全的唯一值替换占位符等黑客?
是否有某种方式(可能是第三方库?)允许以更灵活的方式解析格式字符串,例如在占位符位置拆分字符串?
我正在尝试使用Puppet脚本进行部署.
我发现编写这些脚本的过程中最困难的部分是迭代测试它们.
我不想puppet apply在我的本地开发机器上,容易搞砸东西.我有一个干净的远程盒子,我想申请.我也看不到木偶大师如何帮助我; 我可能会在以后使用puppetmaster进行生产部署,但是现在,我只想让我的代码正常工作.
所以我整理了一个快速的shell脚本,它将我的本地puppet模块路径中的不同目录与远程机器上的/ tmp进行rsync,然后运行puppet apply.这非常不方便.这很慢,特别是如果我们谈论语法错误.
我认为我真正想要的是像puppetd < - > puppetmaster连接,其中远程机器上的puppetd接收已编译的清单.只是一个通过SSH连接的adhoc-one,无需实际设置Puppetmaster,处理证书等puppet apply user@host.
似乎没有那种,但其他人如何处理这个?我在Puppet脚本上工作的经历对我来说非常令人沮丧.
我有一个具有抽象getType()方法的基类.我希望子类能够实现此方法并提供要使用的实际类.
在代码中,类似于以下内容:
public abstract class A {
public static interface Tile;
protected abstract Class<Tile> getTileClass();
}
public class B extends A {
public static class MyTile implements A.Tile { }
@Override
protected abstract Class<A.Tile> getTileClass() {
MyTile t = new MyTile(); // WORKS
return MyTile; // ERROR HERE
}
}
Run Code Online (Sandbox Code Playgroud)
这里的问题是我在标记的行中得到"MyTile无法解析".所以我试图回复这个:
返回新的MyTile().getClass()
但现在Eclipse告诉我:
类型不匹配:无法转换类
<捕获#1-of?将B.MyTile扩展>到Class<A.Tile>
我甚至不确定Eclipse中是否有可能存在错误(捕获#1?).
接下来,我放弃接口并尝试使用抽象基础Tile类.在Eclipse的帮助下,我最终得到了以下似乎编译的代码:
public abstract class A {
public static abstract class Tile;
protected abstract Class<? extends Tile> getTileClass();
} …Run Code Online (Sandbox Code Playgroud) 我正在SQLAlchemy中进行这样的连接:
items = Item.query\
.outerjoin((ItemInfo, ItemInfo.item_id==Item.id))
items.add_columns(ItemInfo.count)
Run Code Online (Sandbox Code Playgroud)
这会导致SQLAlchemy返回元组:
>>> items.first()
(<Item ...>, 2)
Run Code Online (Sandbox Code Playgroud)
我更喜欢它,如果"count"值将作为项目的属性返回,即我想做:
>>> items.first().count
2
Run Code Online (Sandbox Code Playgroud)
这支持吗?
假设我有两个异步生成器:
async def get_rules():
while True:
yield 'rule=1'
asyncio.sleep(2)
async def get_snapshots():
while True:
yield 'snapshot=1'
asyncio.sleep(5)
Run Code Online (Sandbox Code Playgroud)
我想将它们合并到一个异步生成器中,该生成器返回2元组,其中包含两个元组的最新值.排序combineLatest.
做这个的最好方式是什么?
python ×3
class ×1
config ×1
django ×1
formatting ×1
java ×1
nested-class ×1
oop ×1
orm ×1
parsing ×1
puppet ×1
python-3.x ×1
regex ×1
sqlalchemy ×1