2011-10-15 99 views
2

我搜索了一段時間,但找不到有關如何從配置文件或數據庫檢索Colander Schema的參考。我認爲這不難實現,但我可能忽略了一些東西。也許有人做過或看過類似的東西,可能會分享一些見解。從配置文件或數據庫中讀取Colander Schema

這裏漏勺模式的樣本:

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'') 

回答

0

這不是由漏勺支持。我在這方面知道的一件事就是「limone」套餐,而這個套餐正好相反。它能夠從生成一個漏勺模式的任意python對象

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'),將返回一個模式,如果可能的或無,如果不存在。

這就好了!

0

ColanderAlchemy可能會做你所需要的。它需要SQLAlchemy對象並從它們生成一個Colander模式。但是,從SQLAlchemy對象生成不完全是「來自數據庫」。