5
我使用YAML作爲Python項目的配置文件格式。爲什麼這不是Rx的有效模式?
最近我發現Rx是唯一可用於Python和YAML的模式驗證程序。 : -/Kwalify適用於YAML,但僅適用於Ruby和Java。 :(
我一直在閱讀他們缺乏資料一整天,只是似乎無法寫一個有效的模式來表示我的文件結構幫助
我有以下YAML配置文件:?
cmd:
exec: mycmd
aliases: [my, cmd]
filter:
sms: 'regex .*'
load:
exec: load
filter:
sms: 'load: .*$'
echo:
exec: echo %
我無法表示一個嵌套結構我想要的是最外層項目(cmd,load和echo,在這種情況下)是一個任意的字符串,它包含其他項目'exec'是一個固定的字符串和必需的項目;'別名'和'過濾器'也是固定的,但應該是可選的。用Rx代表這個?
到目前爲止,我有以下模式(在YAML),它的Rx無法編譯:
type: //rec
required:
type: //rec
required:
exec: //str
optional:
aliases:
type: //arr
contents: //str
length: {min: 1, max: 10}
filter:
type: //rec
optional:
sms: //str
email: //str
all: //str
測試這在IPython中給了我這樣的:
/Rx.py in make_schema(self, schema)
68 raise Error('invalid schema argument to make_schema')
69
---> 70 uri = self.expand_uri(schema["type"])
71
72 if not self.type_registry.get(uri): raise "unknown type %s" % uri
KeyError: 'type'
這使我相信我'm沒有在某處指定「類型」。 :-S
任何想法?
我很累這場戰鬥...有沒有其他的方式可以寫一個模式,並用它來驗證我的配置文件?
由於提前,
伊凡
是的,這工作!我從來沒有想過用這種方式使用//地圖;過於專注於// rec類型。 Rx的作者Ricardo Signes向我發送了一個有幫助的迴應,我想我會與任何可能在未來出現類似問題的人分享一個小竅門:http://pastebin.com/ f13421133。我希望他不介意我這樣做。 謝謝你的回答,丹尼爾!你救了我的一天! :D – imiric 2009-06-30 16:04:44