From: Mike Bayer Date: Fri, 9 Sep 2011 20:11:13 +0000 (-0400) Subject: - Identity map .discard() uses dict.pop(,None) X-Git-Tag: rel_0_7_3~57 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d2bd1395c65b2c298a1deef54fd1d04bbf54697f;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git - Identity map .discard() uses dict.pop(,None) internally instead of "del" to avoid KeyError/warning during a non-determinate gc teardown [ticket:2267] --- diff --git a/CHANGES b/CHANGES index 8e0398d89a..11f1173472 100644 --- a/CHANGES +++ b/CHANGES @@ -15,6 +15,10 @@ CHANGES when the Session.is_active is True. [ticket:2241] + - Identity map .discard() uses dict.pop(,None) + internally instead of "del" to avoid KeyError/warning + during a non-determinate gc teardown [ticket:2267] + - Fixed regression in new composite rewrite where deferred=True option failed due to missing import [ticket:2253] diff --git a/lib/sqlalchemy/orm/identity.py b/lib/sqlalchemy/orm/identity.py index 8f000e419c..136bb7f014 100644 --- a/lib/sqlalchemy/orm/identity.py +++ b/lib/sqlalchemy/orm/identity.py @@ -193,7 +193,7 @@ class WeakInstanceDict(IdentityMap): def discard(self, state): st = dict.get(self, state.key, None) if st is state: - dict.__delitem__(self, state.key) + dict.pop(self, state.key, None) self._manage_removed_state(state) def prune(self): @@ -234,7 +234,7 @@ class StrongInstanceDict(IdentityMap): if obj is not None: st = attributes.instance_state(obj) if st is state: - dict.__delitem__(self, state.key) + dict.pop(self, state.key, None) self._manage_removed_state(state) def prune(self):