私はこれを理解していると思っていましたが、不思議に思っています!
repoze.catalog docoの例を考えると:
from repoze.catalog.catalog import FileStorageCatalogFactory
from repoze.catalog.catalog import ConnectionManager
from repoze.catalog.indexes.field import CatalogFieldIndex
from repoze.catalog.indexes.text import CatalogTextIndex
factory = FileStorageCatalogFactory('catalog.db', 'mycatalog')
_initialized = False
def initialize_catalog():
global _initialized
if not _initialized:
# create a catalog
manager = ConnectionManager()
catalog = factory(manager)
# set up indexes
catalog['flavors'] = CatalogFieldIndex('flavor')
catalog['texts'] = CatalogTextIndex('text')
# commit the indexes
manager.commit()
manager.close()
_initialized = True
class Content(object):
def __init__(self, flavor, text):
self.flavor = flavor
self.text = text
if __name__ == '__main__':
initialize_catalog()
manager = ConnectionManager()
catalog = factory(manager)
content = {
1:Content('peach', 'i am so very very peachy'),
2:Content('pistachio', 'i am nutty'),
}
for docid, doc in content.items():
catalog.index_doc(docid, doc)
manager.commit()
これは、Content クラスの 2 つのインスタンスのカタログ エントリを生成する方法を示していますが、オブジェクトを実際に保存するための正しいメカニズムは何ですか?
repoze.catalog の下にカタログ化するために使用される docid をキーとするオブジェクトを格納する、完全に別個の ZODB データベースを持つことから始めましたが、トランザクションに関しては、オブジェクトを追加するときにコミットを発行する必要があるため、これは満足のいくものではありません。オブジェクトを格納するために使用されているカタログと ZODB データベースの両方。
repoze.catalog 構造内にある ZODB カタログにアクセスし、それを使用して実際のオブジェクトを格納できると想定していましたが、その方法を見つけるのに苦労しています。