-from sqlalchemy import *
-import sqlalchemy.util as util
-import string, sys
-
"""a basic Adjacency List model tree."""
+from sqlalchemy import *
+from sqlalchemy.util import OrderedDict
+
metadata = BoundMetaData('sqlite:///', echo=True)
trees = Table('treenodes', metadata,
Column('node_name', String(50), nullable=False),
)
-class NodeList(util.OrderedDict):
+class NodeList(OrderedDict):
"""subclasses OrderedDict to allow usage as a list-based property."""
def append(self, node):
self[node.name] = node
class TreeNode(object):
"""a rich Tree class which includes path-based operations"""
- children = NodeList
def __init__(self, name):
self.children = NodeList()
self.name = name
def _getstring(self, level, expand = False):
s = (' ' * level) + "%s (%s,%s, %d)" % (self.name, self.id,self.parent_id,id(self)) + '\n'
if expand:
- s += string.join([n._getstring(level+1, True) for n in self.children.values()], '')
+ s += ''.join([n._getstring(level+1, True) for n in self.children.values()])
return s
def print_nodes(self):
return self._getstring(0, True)
id=trees.c.node_id,
name=trees.c.node_name,
parent_id=trees.c.parent_node_id,
- children=relation(TreeNode, cascade="all", backref=backref("parent", foreignkey=trees.c.node_id)),
+ children=relation(TreeNode, cascade="all", backref=backref("parent", foreignkey=trees.c.node_id), collection_class=NodeList),
))
print "\n\n\n----------------------------"
-from sqlalchemy import *
-import sqlalchemy.util as util
-import string, sys, time
-
"""a more advanced example of basic_tree.py. treenodes can now reference their "root" node, and
introduces a new selection method which selects an entire tree of nodes at once, taking
advantage of a custom MapperExtension to assemble incoming nodes into their correct structure."""
+from sqlalchemy import *
+from sqlalchemy.util import OrderedDict
+
engine = create_engine('sqlite:///:memory:', echo=True)
metadata = BoundMetaData(engine)
)
-class NodeList(util.OrderedDict):
+class NodeList(OrderedDict):
"""subclasses OrderedDict to allow usage as a list-based property."""
def append(self, node):
self[node.name] = node
def _getstring(self, level, expand = False):
s = (' ' * level) + "%s (%s,%s,%s, %d): %s" % (self.name, self.id,self.parent_id,self.root_id, id(self), repr(self.data)) + '\n'
if expand:
- s += string.join([n._getstring(level+1, True) for n in self.children.values()], '')
+ s += ''.join([n._getstring(level+1, True) for n in self.children.values()])
return s
def print_nodes(self):
return self._getstring(0, True)
children=relation(TreeNode, primaryjoin=trees.c.parent_node_id==trees.c.node_id, lazy=None, uselist=True, cascade="delete,save-update", collection_class=NodeList),
data=relation(mapper(TreeData, treedata, properties=dict(id=treedata.c.data_id)), cascade="delete,delete-orphan,save-update", lazy=False)
-), extension = TreeLoader()).compile()
+), extension = TreeLoader())
session = create_session()
session.save(node)
session.flush()
-#sys.exit()
+
print "\n\n\n----------------------------"
print "Tree After Save:"
print "----------------------------"