[python-debian/master] deb822: Correctly handle deletion of keys that only exist in a pre-parsed dictionary

John Wright jsw at debian.org
Wed Jan 7 23:18:32 UTC 2009


---
 debian/changelog        |    7 +++++++
 debian_bundle/deb822.py |    7 ++++++-
 tests/test_deb822.py    |    8 +++++---
 3 files changed, 18 insertions(+), 4 deletions(-)

diff --git a/debian/changelog b/debian/changelog
index e235ce8..ebf3a7b 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,10 @@
+python-debian (0.1.13) UNRELEASED; urgency=low
+
+  * deb822: Correctly handle deletion of keys that only exist in a pre-parsed
+    dictionary
+
+ -- John Wright <jsw at debian.org>  Wed, 07 Jan 2009 16:11:31 -0700
+
 python-debian (0.1.12) unstable; urgency=low
 
   [ Filippo Giunchedi ]
diff --git a/debian_bundle/deb822.py b/debian_bundle/deb822.py
index a202ac1..cfd470f 100644
--- a/debian_bundle/deb822.py
+++ b/debian_bundle/deb822.py
@@ -146,8 +146,13 @@ class Deb822Dict(object, UserDict.DictMixin):
 
     def __delitem__(self, key):
         key = _strI(key)
-        del self.__dict[key]
         self.__keys.remove(key)
+        try:
+            del self.__dict[key]
+        except KeyError:
+            # If we got this far, the key was in self.__keys, so it must have
+            # only been in the self.__parsed dict.
+            pass
 
     def has_key(self, key):
         key = _strI(key)
diff --git a/tests/test_deb822.py b/tests/test_deb822.py
index 8280338..10e98c5 100755
--- a/tests/test_deb822.py
+++ b/tests/test_deb822.py
@@ -472,14 +472,16 @@ class TestDeb822(unittest.TestCase):
 
     def test__delitem__(self):
         parsed = deb822.Deb822(UNPARSED_PACKAGE.splitlines())
+        deriv = deb822.Deb822(_parsed=parsed)
         dict_ = PARSED_PACKAGE.copy()
 
         for key in ('Package', 'MD5sum', 'Description'):
-            del parsed[key]
             del dict_[key]
+            for d in (parsed, deriv):
+                del d[key]
+                d.keys() # ensure this does not raise error
+                self.assertWellParsed(d, dict_)
 
-            parsed.keys() # ensure this does not raise error
-            self.assertWellParsed(parsed, dict_)
 
     def test_policy_compliant_whitespace(self):
         string = (
-- 
1.5.6.5




More information about the pkg-python-debian-commits mailing list