[Zope] Learning to use a BTreeFolder2

Mr SZ sk8in_zombi at yahoo.com.au
Tue Nov 25 17:42:07 EST 2008

Hi All,

I am writing a product to manage the back end operations of users.I need to store lots of user info.My first plan was to use ZSQL but then I read about ZODB and more specifically OOBTrees and BTreeFolder2. My objective is to store user related stuff on ZODB but not litter the ZODB but to instead organize into folders. I read the test code and the BTreeFolder.py to figure out the API.

I have a few doubts to clarify:

In this method I tried to add two BTFs and an OOBTree:
def test3():
    f = BTreeFolder2('sufest')
    f2 = BTreeFolder2('somefolder')
    f3 = BTreeFolder2('somefolder2')
    f._setObject(f2.id, f2)
    f._setObject(f3.id, f3)    
    uniq_id = f.generateId()
    obT = OOBTree()
    obT['Auth'] = {'a':1,'b':2}
    f._setOb(uniq_id, obT) 
    lst = f.objectMap()
    return f._getOb(uniq_id)

Now the functions returns an error:
Traceback (innermost last):
  Module ZPublisher.Publish, line 115, in publish
  Module ZPublisher.mapply, line 88, in mapply
  Module ZPublisher.Publish, line 41, in call_object
  Module Products.ExternalMethod.ExternalMethod, line 225, in __call__
   - __traceback_info__: ((), {}, None)
  Module /var/lib/zope2.9/instance/sandbox/Products/Test/Extensions/Tst.py, line 40, in test3
  Module Products.BTreeFolder2.BTreeFolder2, line 211, in _getOb
AttributeError: 'BTrees._OOBTree.OOBTree' object has no attribute '__of__'

I beleive this is because OOBTrees don't have a meta_type which the _getOb function tries to access. Enlighten me :)

Other methods like objectMap and getBatchObjectListing work fine though.

My question is how do we properly a store any item other than zope objects like strings,dicts or OOBTrees in a BTreeFolder2 and how to retrieve them back.

Zope seems interesting to work with but at times really confuses me especially acquisition concepts.   


" life isn't heavy enough,it flies away and floats far above action"

      Start your day with Yahoo!7 and win a Sony Bravia TV. Enter now http://au.docs.yahoo.com/homepageset/?p1=other&p2=au&p3=tagline

More information about the Zope mailing list