diff options
| author | Mike Bayer <mike_mp@zzzcomputing.com> | 2006-02-19 01:25:56 +0000 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2006-02-19 01:25:56 +0000 |
| commit | 36383494b512143328d3c14022d4db3ccedfdf06 (patch) | |
| tree | f9471040e6fc2c3b6e9fb7dae529fdb2cad013f3 /lib/sqlalchemy/mapping | |
| parent | bca0afa1cedc38247dc7af4e53dec7faf1aca42f (diff) | |
| download | sqlalchemy-36383494b512143328d3c14022d4db3ccedfdf06.tar.gz | |
some comments, changed SmartProperty to be smarter, UOW
version has "property" accessor which returns MapperProperty at
the class level
Diffstat (limited to 'lib/sqlalchemy/mapping')
| -rw-r--r-- | lib/sqlalchemy/mapping/mapper.py | 5 | ||||
| -rw-r--r-- | lib/sqlalchemy/mapping/objectstore.py | 15 | ||||
| -rw-r--r-- | lib/sqlalchemy/mapping/properties.py | 4 |
3 files changed, 22 insertions, 2 deletions
diff --git a/lib/sqlalchemy/mapping/mapper.py b/lib/sqlalchemy/mapping/mapper.py index 5fed7c7f2..88b803b37 100644 --- a/lib/sqlalchemy/mapping/mapper.py +++ b/lib/sqlalchemy/mapping/mapper.py @@ -178,6 +178,11 @@ class Mapper(object): engines = property(lambda s: [t.engine for t in s.tables]) def add_property(self, key, prop): + """adds an additional property to this mapper. this is the same as if it were + specified within the 'properties' argument to the constructor. if the named + property already exists, this will replace it. Useful for + circular relationships, or overriding the parameters of auto-generated properties + such as backreferences.""" if sql.is_column(prop): self.columns[key] = prop prop = ColumnProperty(prop) diff --git a/lib/sqlalchemy/mapping/objectstore.py b/lib/sqlalchemy/mapping/objectstore.py index 8f5f4eb0b..94e2f966b 100644 --- a/lib/sqlalchemy/mapping/objectstore.py +++ b/lib/sqlalchemy/mapping/objectstore.py @@ -243,6 +243,12 @@ def instance_key(instance): def import_instance(instance): return get_session().import_instance(instance) +class UOWProperty(attributes.SmartProperty): + def __init__(self, class_, *args, **kwargs): + super(UOWProperty, self).__init__(*args, **kwargs) + self.class_ = class_ + property = property(lambda s:class_mapper(s.class_).props[s.key], doc="returns the MapperProperty object associated with this property") + class UOWListElement(attributes.ListElement): def __init__(self, obj, key, data=None, deleteremoved=False, **kwargs): attributes.ListElement.__init__(self, obj, key, data=data, **kwargs) @@ -269,6 +275,9 @@ class UOWAttributeManager(attributes.AttributeManager): get_session(obj).register_dirty(obj) else: get_session(obj).register_new(obj) + + def create_prop(self, class_, key, uselist, **kwargs): + return UOWProperty(class_, self, key, uselist) def create_list(self, obj, key, list_, **kwargs): return UOWListElement(obj, key, list_, **kwargs) @@ -991,15 +1000,17 @@ class UOWTask(object): class DependencySorter(topological.QueueDependencySorter): pass - + def mapper(*args, **params): return sqlalchemy.mapperlib.mapper(*args, **params) def object_mapper(obj): return sqlalchemy.mapperlib.object_mapper(obj) -global_attributes = UOWAttributeManager() +def class_mapper(class_): + return sqlalchemy.mapperlib.class_mapper(class_) +global_attributes = UOWAttributeManager() session_registry = util.ScopedRegistry(Session) # Default session registry _sessions = weakref.WeakValueDictionary() # all referenced sessions (including user-created) diff --git a/lib/sqlalchemy/mapping/properties.py b/lib/sqlalchemy/mapping/properties.py index 65f9cbdc2..3a2aaab2f 100644 --- a/lib/sqlalchemy/mapping/properties.py +++ b/lib/sqlalchemy/mapping/properties.py @@ -219,6 +219,7 @@ class PropertyLoader(MapperProperty): objectstore.uow().register_attribute(class_, key, uselist = self.uselist, deleteremoved = self.private, extension=self.attributeext) def _get_direction(self): + """determines our 'direction', i.e. do we represent one to many, many to many, etc.""" # print self.key, repr(self.parent.table.name), repr(self.parent.primarytable.name), repr(self.foreignkey.table.name) if self.parent.table is self.target: if self.foreignkey.primary_key: @@ -391,6 +392,9 @@ class PropertyLoader(MapperProperty): return (obj2, obj1) def process_dependencies(self, task, deplist, uowcommit, delete = False): + """this method is called during a commit operation to synchronize data between a parent and child object. + it also can establish child or parent objects within the unit of work as "to be saved" or "deleted" + in some cases.""" #print self.mapper.table.name + " " + self.key + " " + repr(len(deplist)) + " process_dep isdelete " + repr(delete) + " direction " + repr(self.direction) def getlist(obj, passive=True): |
