From: Mike Bayer Date: Mon, 16 Apr 2007 22:35:53 +0000 (+0000) Subject: - removed meaningless entity_name argument from session.delete() X-Git-Tag: rel_0_3_7~68 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=86fef1e4593a6c25e83b2aca7577c62bec9fa2a9;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git - removed meaningless entity_name argument from session.delete() - session.merge() propigates given entity_name to locate that mapper if the given object is transient (and therefore has no entity_name) - some fixes to MockEngine which still is mostly useless for most cases. - unitofwork test used incorrect session.delete() signature --- diff --git a/lib/sqlalchemy/engine/strategies.py b/lib/sqlalchemy/engine/strategies.py index 1b760fca8b..ba9b0968a5 100644 --- a/lib/sqlalchemy/engine/strategies.py +++ b/lib/sqlalchemy/engine/strategies.py @@ -180,9 +180,12 @@ class MockEngineStrategy(EngineStrategy): engine = property(lambda s: s) dialect = property(lambda s:s._dialect) - def contextual_connect(self): + def contextual_connect(self, **kwargs): return self + def compiler(self, statement, parameters, **kwargs): + return self._dialect.compiler(statement, parameters, engine=self, **kwargs) + def create(self, entity, **kwargs): kwargs['checkfirst'] = False entity.accept_visitor(self.dialect.schemagenerator(self, **kwargs)) diff --git a/lib/sqlalchemy/orm/mapper.py b/lib/sqlalchemy/orm/mapper.py index 0279cca53b..2bffef815c 100644 --- a/lib/sqlalchemy/orm/mapper.py +++ b/lib/sqlalchemy/orm/mapper.py @@ -1803,12 +1803,17 @@ def has_mapper(object): return hasattr(object, '_entity_name') -def object_mapper(object, raiseerror=True): +def object_mapper(object, entity_name=None, raiseerror=True): """Given an object, return the primary Mapper associated with the object instance. object The object instance. + entity_name + Entity name of the mapper to retrieve, if the given instance is + transient. Otherwise uses the entity name already associated + with the instance. + raiseerror Defaults to True: raise an ``InvalidRequestError`` if no mapper can be located. If False, return None. @@ -1816,10 +1821,10 @@ def object_mapper(object, raiseerror=True): """ try: - mapper = mapper_registry[ClassKey(object.__class__, getattr(object, '_entity_name', None))] + mapper = mapper_registry[ClassKey(object.__class__, getattr(object, '_entity_name', entity_name))] except (KeyError, AttributeError): if raiseerror: - raise exceptions.InvalidRequestError("Class '%s' entity name '%s' has no mapper associated with it" % (object.__class__.__name__, getattr(object, '_entity_name', None))) + raise exceptions.InvalidRequestError("Class '%s' entity name '%s' has no mapper associated with it" % (object.__class__.__name__, getattr(object, '_entity_name', entity_name))) else: return None return mapper.compile() diff --git a/lib/sqlalchemy/orm/session.py b/lib/sqlalchemy/orm/session.py index d1639d395a..35b35201d8 100644 --- a/lib/sqlalchemy/orm/session.py +++ b/lib/sqlalchemy/orm/session.py @@ -437,7 +437,7 @@ class Session(object): else: self._update_impl(object, entity_name=entity_name) - def delete(self, object, entity_name=None): + def delete(self, object): """Mark the given instance as deleted. The delete operation occurs upon ``flush()``. @@ -446,7 +446,7 @@ class Session(object): for c in [object] + list(_object_mapper(object).cascade_iterator('delete', object)): self.uow.register_deleted(c) - def merge(self, object, entity_name=None, _recursive=None): + def merge(self, object,entity_name=None, _recursive=None): """Copy the state of the given `object` onto the persistent object with the same identifier. @@ -462,7 +462,7 @@ class Session(object): if _recursive is None: _recursive = util.Set() - mapper = _object_mapper(object) + mapper = _object_mapper(object, entity_name=entity_name) key = getattr(object, '_instance_key', None) if key is None: merged = mapper._create_instance(self) diff --git a/test/orm/unitofwork.py b/test/orm/unitofwork.py index fd97c9c1a9..a54daa41a8 100644 --- a/test/orm/unitofwork.py +++ b/test/orm/unitofwork.py @@ -110,7 +110,8 @@ class VersioningTest(UnitOfWorkTest): f1_s.value='f1rev4' s2.flush() - s.delete(f1, f2) + s.delete(f1) + s.delete(f2) success = False try: s.flush()