def list_value_changed(self, obj, key, listval):
pass
-# uow().modified_lists.append(self)
def setattr(self, value):
self.obj.__dict__[self.key] = value
# else:
# self.register_new(obj)
+ def create_prop(self, key, uselist):
+ return SmartProperty(self).property(key, uselist)
+
def create_list(self, obj, key, list_):
return ListElement(obj, key, list_)
return p
def register_attribute(self, class_, key, uselist):
- setattr(class_, key, SmartProperty(self).property(key, uselist))
+ setattr(class_, key, self.create_prop(key, uselist))
import sqlalchemy.objectstore as objectstore
import random, copy, types
-__ALL__ = ['eagermapper', 'eagerloader', 'lazymapper', 'lazyloader', 'eagerload', 'lazyload', 'mapper', 'lazyloader', 'lazymapper']
+__ALL__ = ['eagermapper', 'eagerloader', 'lazymapper', 'lazyloader', 'eagerload', 'lazyload', 'mapper', 'lazyloader', 'lazymapper', 'clear_mappers']
def relation(*args, **params):
if isinstance(args[0], Mapper):
def relation_mapper(class_, selectable, secondary = None, primaryjoin = None, secondaryjoin = None, table = None, properties = None, lazy = True, uselist = True, foreignkey = None, primary_keys = None, **options):
return relation_loader(mapper(class_, selectable, table=table, properties=properties, primary_keys=primary_keys, **options), secondary, primaryjoin, secondaryjoin, lazy = lazy, uselist = uselist, foreignkey = foreignkey, **options)
+# TODO: where do we want to register these mappers, register them against their classes/objects etc
_mappers = {}
def mapper(*args, **params):
hashkey = mapper_hash_key(*args, **params)
except KeyError:
m = Mapper(hashkey, *args, **params)
return _mappers.setdefault(hashkey, m)
-
+
+def clear_mappers():
+ _mappers.clear()
+
def eagerload(name):
return EagerLazySwitcher(name, toeager = True)
def init(self):
[prop.init(key, self) for key, prop in self.props.iteritems()]
+ print "well hi!"
self.class_._mapper = self.hashkey
def instances(self, cursor, db = None):
insert = []
update = []
for obj in objects:
+
+# print "SAVE_OBJ we are " + hash_key(self) + " obj: " + obj.__class__.__name__ + repr(id(obj))
params = {}
for col in table.columns:
params[col.key] = self._getattrbycolumn(obj, col)
def getlist(obj):
if self.uselist:
- return uowcommit.uow.manager.get_list_history(obj, self.key)
+ return uowcommit.uow.attributes.get_list_history(obj, self.key)
else:
- return uowcommit.uow.manager.get_history(obj, self.key)
+ return uowcommit.uow.attributes.get_history(obj, self.key)
clearkeys = False
elif self.foreignkey.table == self.parent.table:
for child in deplist:
childlist = getlist(child)
+ try:
+ print "got a list and its " + repr(childlist)
+ except:
+ pass
for obj in childlist.added_items():
associationrow = {}
self.primaryjoin.accept_visitor(setter)
else:
return False
+class UOWSmartProperty(attributes.SmartProperty):
+ def attribute_registry(self):
+ return uow().attributes
+
class UOWListElement(attributes.ListElement):
def list_value_changed(self, obj, key, listval):
uow().modified_lists.append(self)
else:
self.uow.register_new(obj)
+ def create_prop(self, key, uselist):
+ return UOWSmartProperty(self).property(key, uselist)
+
def create_list(self, obj, key, list_):
return UOWListElement(obj, key, list_)
else:
for obj in [n for n in self.new] + [d for d in self.dirty]:
commit_context.append_task(obj)
+ print "COMMIT append " + obj.__class__.__name__ + " " + repr(id(obj))
for item in self.modified_lists:
- obj = item.obj()
+ obj = item.obj
commit_context.append_task(obj)
engines = util.HashSet()
def __iadd__(self, other):
raise NotImplementedError()
-class PropHistory(object):
- def __init__(self, current):
- self.added = None
- self.current = current
- self.deleted = None
- def setattr_clean(self, value):
- self.current = value
- def setattr(self, value):
- self.deleted = self.current
- self.current = None
- self.added = value
- def delattr(self):
- self.deleted = self.current
- self.current = None
- def rollback(self):
- if self.deleted is not None:
- self.current = self.deleted
- self.deleted = None
- else:
- self.current = None
- self.added = None
- self.deleted = None
- def clear_history(self):
- if self.added is not None:
- self.current = self.added
- self.added = None
- self.deleted = None
- def added_items(self):
- if self.added is not None:
- return [self.added]
- else:
- return []
- def deleted_items(self):
- if self.deleted is not None:
- return [self.deleted]
- else:
- return []
- def unchanged_items(self):
- if self.current is not None:
- return [self.current]
- else:
- return []
class ScopedRegistry(object):
def __init__(self, createfunc, defaultscope):
def setUp(self):
objectstore.clear()
-
+ clear_mappers()
+
def testbasic(self):
# save two users
u = User()
m = mapper(User, users, properties = dict(
addresses = relation(Address, addresses, lazy = True)
))
+ print "TESTONETOMANY, mapper is " + repr(id(m))
u = User()
u.user_name = 'one2manytester'
u.addresses = []
a2 = Address()
a2.email_address = 'lala@test.org'
u.addresses.append(a2)
-
+ print repr(u.addresses)
+ print repr(u.addresses.added_items())
objectstore.uow().commit()
usertable = engine.ResultProxy(users.select(users.c.user_id.in_(u.user_id)).execute()).fetchall()