mirror of
https://github.com/python/cpython.git
synced 2025-08-04 08:59:19 +00:00

When the new policies are used (and only when the new policies are explicitly used) headers turn into objects that have attributes based on their parsed values, and can be set using objects that encapsulate the values, as well as set directly from unicode strings. The folding algorithm then takes care of encoding unicode where needed, and folding according to the highest level syntactic objects. With this patch only date and time headers are parsed as anything other than unstructured, but that is all the helper methods in the existing API handle. I do plan to add more parsers, and complete the set specified in the RFC before the package becomes stable.
57 lines
1.6 KiB
Python
57 lines
1.6 KiB
Python
import unittest
|
|
import textwrap
|
|
import copy
|
|
import pickle
|
|
from email import policy
|
|
from email import message_from_string
|
|
from email._headerregistry import HeaderRegistry
|
|
from test.test_email import TestEmailBase
|
|
|
|
class TestPickleCopyHeader(TestEmailBase):
|
|
|
|
unstructured = HeaderRegistry()('subject', 'this is a test')
|
|
|
|
def test_deepcopy_unstructured(self):
|
|
h = copy.deepcopy(self.unstructured)
|
|
self.assertEqual(str(h), str(self.unstructured))
|
|
|
|
def test_pickle_unstructured(self):
|
|
p = pickle.dumps(self.unstructured)
|
|
h = pickle.loads(p)
|
|
self.assertEqual(str(h), str(self.unstructured))
|
|
|
|
address = HeaderRegistry()('from', 'frodo@mordor.net')
|
|
|
|
def test_deepcopy_address(self):
|
|
h = copy.deepcopy(self.address)
|
|
self.assertEqual(str(h), str(self.address))
|
|
|
|
def test_pickle_address(self):
|
|
p = pickle.dumps(self.address)
|
|
h = pickle.loads(p)
|
|
self.assertEqual(str(h), str(self.address))
|
|
|
|
|
|
class TestPickleCopyMessage(TestEmailBase):
|
|
|
|
testmsg = message_from_string(textwrap.dedent("""\
|
|
From: frodo@mordor.net
|
|
To: bilbo@underhill.org
|
|
Subject: help
|
|
|
|
I think I forgot the ring.
|
|
"""), policy=policy.default)
|
|
|
|
def test_deepcopy(self):
|
|
msg2 = copy.deepcopy(self.testmsg)
|
|
self.assertEqual(msg2.as_string(), self.testmsg.as_string())
|
|
|
|
def test_pickle(self):
|
|
p = pickle.dumps(self.testmsg)
|
|
msg2 = pickle.loads(p)
|
|
self.assertEqual(msg2.as_string(), self.testmsg.as_string())
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main()
|