def __get__(self, instance, owner):
if not hasattr(self, 'mapper'):
self.mapper = mapper(owner, self.table, **self.kwargs)
- print "HI"
self.mapper._init_class()
if self.mapper.class_ is not owner:
raise "no match " + repr(self.mapper.class_) + " " + repr(owner)
return self.mapper
_mappers = {}
-def mapper(class_, table = None, *args, **params):
+def mapper(class_, table = None, engine = None, autoload = False, *args, **params):
if table is None:
return class_mapper(class_)
+
+ if isinstance(table, str):
+ table = schema.Table(table, engine, autoload = autoload, mustexist = not autoload)
hashkey = mapper_hash_key(class_, table, *args, **params)
#print "HASHKEY: " + hashkey
def match_primaries(self, primary, secondary):
crit = []
-
for fk in secondary.foreign_keys:
if fk.column.table is primary:
crit.append(fk.column == fk.parent)
self.foreignkey = fk.parent
if len(crit) == 0:
- raise "Cant find any foreign key relationships between " + primary.table.name + " and " + secondary.table.name
+ raise "Cant find any foreign key relationships between '%s' (%s) and '%s' (%s)" % (primary.table.name, repr(primary.table), secondary.table.name, repr(secondary.table))
elif len(crit) == 1:
return (crit[0])
else:
elif self.foreignkey.table == self.parent.primarytable:
uowcommit.register_dependency(self.mapper, self.parent)
uowcommit.register_task(self.mapper, False, self, self.parent, False)
+ # TODO: private deletion thing for one-to-one relationship
#uowcommit.register_task(self.mapper, True, self, self.parent, False)
else:
raise " no foreign key ?"
class User(object):
def __init__(self):
pass
-
-# obtain a Mapper
-m = mapper(User, users)
-
+ mapper = assignmapper(users)
+
# select
-user = m.select(users.c.user_name == 'fred')[0]
+user = User.mapper.select(User.c.user_name == 'fred')[0]
# modify
def __init__(self, email_address = None):
self.email_address = email_address
+ mapper = assignmapper(addresses)
+
# obtain a Mapper. "private=True" means deletions of the user
# will cascade down to the child Address objects
-m = mapper(User, users, properties = dict(
- addresses = relation(Address, addresses, lazy=True, private=True)
+User.mapper = assignmapper(User, users, properties = dict(
+ addresses = relation(Address.mapper, lazy=True, private=True)
))
# select