[Checkins] SVN: z3c.dobbin/trunk/src/z3c/dobbin/mapper.py Seperated
internal collection methods from external.
Malthe Borch
mborch at gmail.com
Wed May 21 13:14:37 EDT 2008
Log message for revision 86881:
Seperated internal collection methods from external.
Changed:
U z3c.dobbin/trunk/src/z3c/dobbin/mapper.py
-=-
Modified: z3c.dobbin/trunk/src/z3c/dobbin/mapper.py
===================================================================
--- z3c.dobbin/trunk/src/z3c/dobbin/mapper.py 2008-05-21 17:13:59 UTC (rev 86880)
+++ z3c.dobbin/trunk/src/z3c/dobbin/mapper.py 2008-05-21 17:14:37 UTC (rev 86881)
@@ -51,20 +51,43 @@
@property
def adapter(self):
return self._sa_adapter
+
+ # orm collection support
- @orm.collections.collection.internally_instrumented
@orm.collections.collection.appender
+ def _appender(self, item):
+ self.data.append(item)
+
+ @orm.collections.collection.iterator
+ def _iterator(self):
+ return iter(self.data)
+
+ @orm.collections.collection.remover
+ def _remover(self, item):
+ self.data.remove(item)
+
+ # python list api
+
def append(self, item, _sa_initiator=None):
+ # make sure item is mapped
if not IMapped.providedBy(item):
item = relations.persist(item)
+ # fire append event
self.adapter.fire_append_event(item, _sa_initiator)
- relation = self._create_relation(item)
+ # set up relation
+ relation = bootstrap.Relation()
+ relation.target = item
+ relation.order = len(self.data)
+
+ # save to session
+ session = Session()
+ session.save(relation)
+
+ # add relation to internal list
self.data.append(relation)
- @orm.collections.collection.internally_instrumented
- @orm.collections.collection.remover
def remove(self, item, _sa_initiator=None):
if IMapped.providedBy(item):
uuid = item.uuid
@@ -91,9 +114,8 @@
def extend(self, items):
map(self.append, items)
- @orm.collections.collection.iterator
def __iter__(self):
- return iter(self.data)
+ return (relation.target for relation in iter(self.data))
def __len__(self):
return len(self.data)
@@ -104,17 +126,6 @@
def __setitem__(self, index, value):
return NotImplementedError("Setting items at an index is not implemented.")
- def _create_relation(self, item):
- relation = bootstrap.Relation()
-
- relation.target = item
- relation.order = len(self.data)
-
- session = Session()
- session.save(relation)
-
- return relation
-
class ObjectTranslator(object):
def __init__(self, column_type=None):
self.column_type = column_type
More information about the Checkins
mailing list