从配置文件或数据库中读取Colander Schema

时间:2011-10-15 11:53:38

标签: python schema pyramid colander

我用谷歌搜索了一段时间,但我找不到如何从配置文件或数据库中检索漏勺模式的参考。我认为这并不难实现,但我可能忽视了一些事情。也许某人已经做过或看过类似的事情,并且可能会分享一些见解。

这是一个漏勺模式的示例:

class PageSchema(colander.MappingSchema):
    title = SchemaNode(String(),
                       title='Page title',
                       description='The title of the page',
                       )
    description  = SchemaNode(String(),
                              title='A short description', 
                              description='Keep it under 60 characters or so',
                              missing = u'',
                              validator=colander.Length(max=79)
                              )
    body = colander.SchemaNode(colander.String(),
                               description='Tell the world',
                               missing = u'')

3 个答案:

答案 0 :(得分:1)

正如米歇尔所说,它可能不受支持。如果你真的需要它。这里有一些指示。

按名称将模式保存在数据库中,例如:“PageSchema”。使用所有必需参数将其所有记录保存在数据库中。

你必须做那样的事情:

for row in rows:
    attrinbutes[row['name']] = build_attribute(row)

schemas[schema_name] = type(schema_name, (colander.MappingSchema,), attributes)
exec('%s = schemas[schema_name]' % schema_name)

换句话说,它加载所有属性并使用类型运算符构建类。这种任务非常简单,应该与习惯class语法一样好。 exec来电只是为了推动当地人的名字。您可以使用locals()[schema_name] = schmea甚至其他范围。

这样,您可以根据需要从任何地方加载架构。你可以建立一个像:

这样的工厂
    如果可能,将返回模式的
  • schemas.get('PageSchema')如果不存在则返回None。

这就是它!

答案 1 :(得分:0)

滤锅不支持此功能。我在这方面知道的一件事就是“limone”包装,它恰恰相反。它能够从漏勺模式生成任意python对象

答案 2 :(得分:0)

ColanderAlchemy可能会满足您的需求。它需要SQLAlchemy对象并从中生成Colander模式。但是,从SQLAlchemy对象生成并不完全是“来自数据库”。