]> granicus.if.org Git - python/commitdiff
#21991: make headerregistry params property MappingProxyType.
authorR David Murray <rdmurray@bitdance.com>
Fri, 17 Oct 2014 23:30:13 +0000 (19:30 -0400)
committerR David Murray <rdmurray@bitdance.com>
Fri, 17 Oct 2014 23:30:13 +0000 (19:30 -0400)
It is unlikely anyone is using the fact that the dictionary returned
by the 'params' attribute was previously writable, but even if someone
is the API is provisional so this kind of change is acceptable (and
needed, to get the API "right" before it becomes official).

Patch by Stéphane Wirtel.

Lib/email/headerregistry.py
Lib/test/test_email/test_headerregistry.py
Misc/NEWS

index 1fae950820a7b37608a424f425beaa3bfdcd33de..911a2afea7349ce206e83e1859c667379e0bb015 100644 (file)
@@ -7,6 +7,7 @@ Eventually HeaderRegistry will be a public API, but it isn't yet,
 and will probably change some before that happens.
 
 """
+from types import MappingProxyType
 
 from email import utils
 from email import errors
@@ -454,7 +455,7 @@ class ParameterizedMIMEHeader:
 
     @property
     def params(self):
-        return self._params.copy()
+        return MappingProxyType(self._params)
 
 
 class ContentTypeHeader(ParameterizedMIMEHeader):
index 7d64a3829c3d11081809ba05a5d1936761c412ed..55ecdea9aacb50514d8996d116ca5f0d63d07976 100644 (file)
@@ -1,6 +1,7 @@
 import datetime
 import textwrap
 import unittest
+import types
 from email import errors
 from email import policy
 from email.message import Message
@@ -235,6 +236,8 @@ class TestContentTypeHeader(TestHeaderBase):
         self.assertEqual(h.maintype, maintype)
         self.assertEqual(h.subtype, subtype)
         self.assertEqual(h.params, parmdict)
+        with self.assertRaises(TypeError):
+            h.params['abc'] = 'xyz'   # params is read-only.
         self.assertDefectsEqual(h.defects, defects)
         self.assertEqual(h, decoded)
         self.assertEqual(h.fold(policy=policy.default), folded)
index 2f02651ccc0f32587d1b6ba93eb4c12b74dedbda..e04f4cc02d3b08a4ae4ff30ede9dc26a343acd3e 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -33,6 +33,10 @@ Core and Builtins
 Library
 -------
 
+- Issue #21991: Make email.headerregistry's header 'params' attributes
+  be read-only (MappingProxyType).  Previously the dictionary was modifiable
+  but a new one was created on each access of the attribute.
+
 - Issue #22641: In asyncio, the default SSL context for client connections
   is now created using ssl.create_default_context(), for stronger security.