i found on internet something like :
models/db.py
from gluon.dal import Table
class TreeProxy(object):
skeleton = Table(None, 'tree',
Field('ileft', 'integer'),
Field('iright', 'integer'))
def __init__(self, table):
self.table = table
def ancestors(self, node):
db = self.table._db
return db(self.table.ileft <= node.ileft)(self.table.iright > node.iright)
def descendants(self, node):
db = self.table._db
return db(self.table.ileft >= node.ileft)(self.table.iright < node.iright)
def add_leaf(self, parent_id = None, **fields):
if not parent_id:
nrecords = self.table._db(self.table).count()
fields.update(dict(ileft = nrecords, iright = nrecords))
else:
node = self.table(parent_id)
fields.update(dict(ileft = node.iright, iright = node.iright))
node.update_record(iright = node.iright + 1)
ancestors = self.ancestors(node).select()
for ancestor in ancestors:
ancestor.update_record(iright = ancestor.iright + 1)
ancestors = self.ancestors(node).select()
for ancestor in ancestors:
ancestor.update_record(iright = ancestor.iright + 1)
return self.table.insert(**fields)
def del_node(self, node):
delta = node.iright - node.ileft
deleted = self.descendants(node).delete()
db = self.table._db
db(self.table.iright > node.iright).update(iright = self.table.iright -
delta)
del self.table[node.id]
return deleted + 1
treeproxy = TreeProxy(db.define_table('mytree', Field('name'),
TreeProxy.skeleton))
if db(db.mytree).isempty():
id = treeproxy.add_leaf(name = "root")
treeproxy.add_leaf(parent_id = id, name = "child1")
treeproxy.add_leaf(parent_id = id, name = "child2")
for node in treeproxy.ancestors(db.mytree(id)).select():
print node.name
for node in treeproxy.descendants(db.mytree(id)).select():
print node.name
treeproxy.del_node(db.mytree(id))
but it return an error :
AttributeError: 'NoneType' object has no attribute 'iright'
how should i use it on?
ref:
http://www.packtpub.com/sites/default/files/5467OS-Chapter-3-Database-Abstraction-Layer.pdf
thanks and best regards,
stifan
--
Resources:
- http://web2py.com
- http://web2py.com/book (Documentation)
- http://github.com/web2py/web2py (Source code)
- https://code.google.com/p/web2py/issues/list (Report Issues)
---
You received this message because you are subscribed to the Google Groups
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.