2012-12-13 72 views
1

我正在使用Flask-MongoAlchemy作爲個人項目。我有一些.cfg輸入文件,我想解析並製作成mongodb文檔條目。不幸的是,.cfg文件是平坦的,我想從每個文件中創建多個不同的文檔。我想在一個地方定義我想要使用的結構(在單獨的.cfg文件中),1)在解析輸入文件的同時將輸入文件轉換爲這種格式,以及2)使用此結構創建MongoAlchemy文檔類。我只有在#2時遇到麻煩,但我願意接受解決這兩個目標的其他實現。在Flask-MongoAlchemy中創建動態文檔

這是我的輸入.cfg文件。我想將其製作成多個mongodb文檔。

[foo] 
a = val1 
b = val2 
c = val3 
d = val4 

這裏是定義結構的documents.cfg。這些值是用於區分類型的數字。

[foo] 
    [[bar]] 
    a = 1 
    b = 1 
    [[baz]] 
    c = 2 
    d = 1 

下面是類定義

class Bar(db.Document): 
    # add class attributes from kwargs 
    @classmethod 
    def init(cls, **kwargs): 
     for k, v in kwargs.items(): 
      if v == 1: 
       setattr(cls, k, db.IntField(min_value=0)) 

class Baz(db.Document): 
    # add class attributes from kwargs 
    @classmethod 
    def init(cls, **kwargs): 
     for k, v in kwargs.items(): 
      if v == 1: 
       setattr(cls, k, db.IntField(min_value=0)) 
      elif v == 2: 
       setattr(cls, k, db.StringField()) 

我解析documents.cfg創建兩個類型的字典:

bar_dict = {'a': '1', 'b': '1'} 
baz_dict = {'c': '2', 'd': '1'} 

我然後傳遞這些到相應的init()方法

Bar.init(**bar_dict) 
Baz.init(**baz_dict) 

這次成功完全添加屬性。但是,當創建一個Bar(或Baz)的實例時,我得到這個錯誤。

mongoalchemy.exceptions.ExtraValueException: a 

我的猜測是,這與MongoAlchemy字段應該是類屬性而不是實例屬性有關。任何幫助?

回答

0
class Bar(db.Document): 
    config_extra_fields = 'ignore' 
    ... 

class Baz(db.Document): 
    config_extra_fields = 'ignore' 
    ...