From d2bd1395c65b2c298a1deef54fd1d04bbf54697f Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Fri, 9 Sep 2011 16:11:13 -0400 Subject: [PATCH] - Identity map .discard() uses dict.pop(,None) internally instead of "del" to avoid KeyError/warning during a non-determinate gc teardown [ticket:2267] --- CHANGES | 4 ++++ lib/sqlalchemy/orm/identity.py | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) 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): -- 2.47.3