]> granicus.if.org Git - python/commitdiff
Issue #6213: Implement getstate() and setstate() methods of utf-8-sig and
authorVictor Stinner <victor.stinner@haypocalc.com>
Wed, 28 Jul 2010 01:39:45 +0000 (01:39 +0000)
committerVictor Stinner <victor.stinner@haypocalc.com>
Wed, 28 Jul 2010 01:39:45 +0000 (01:39 +0000)
utf-16 incremental encoders.

Lib/encodings/utf_16.py
Lib/encodings/utf_8_sig.py
Lib/test/test_io.py
Misc/NEWS

index b145a5d6f0a3bab1c0f7e08c014dbe1a40e1862e..f3fadff6153bb96f8afeceef0952c7b9b7958805 100644 (file)
@@ -34,6 +34,22 @@ class IncrementalEncoder(codecs.IncrementalEncoder):
         codecs.IncrementalEncoder.reset(self)
         self.encoder = None
 
+    def getstate(self):
+        # state info we return to the caller:
+        # 0: stream is in natural order for this platform
+        # 2: endianness hasn't been determined yet
+        # (we're never writing in unnatural order)
+        return (2 if self.encoder is None else 0)
+
+    def setstate(self, state):
+        if state:
+            self.encoder = None
+        else:
+            if sys.byteorder == 'little':
+                self.encoder = codecs.utf_16_le_encode
+            else:
+                self.encoder = codecs.utf_16_be_encode
+
 class IncrementalDecoder(codecs.BufferedIncrementalDecoder):
     def __init__(self, errors='strict'):
         codecs.BufferedIncrementalDecoder.__init__(self, errors)
index 697ba95b4d3864d993b565968efad546b3bd1bf3..8784694f02663451bd9196c03039ea8f4a7738e4 100644 (file)
@@ -25,18 +25,24 @@ def decode(input, errors='strict'):
 class IncrementalEncoder(codecs.IncrementalEncoder):
     def __init__(self, errors='strict'):
         codecs.IncrementalEncoder.__init__(self, errors)
-        self.first = True
+        self.first = 1
 
     def encode(self, input, final=False):
         if self.first:
-            self.first = False
+            self.first = 0
             return codecs.BOM_UTF8 + codecs.utf_8_encode(input, self.errors)[0]
         else:
             return codecs.utf_8_encode(input, self.errors)[0]
 
     def reset(self):
         codecs.IncrementalEncoder.reset(self)
-        self.first = True
+        self.first = 1
+
+    def getstate(self):
+        return self.first
+
+    def setstate(self, state):
+        self.first = state
 
 class IncrementalDecoder(codecs.BufferedIncrementalDecoder):
     def __init__(self, errors='strict'):
index 2874d79d95d31178e3e666f371ba2c1aa693347a..b6bf6863c1bae988c20c0e0860e8a9ab02bd2b1a 100644 (file)
@@ -2087,7 +2087,6 @@ class TextIOWrapperTest(unittest.TestCase):
 
         self.assertEqual(buffer.seekable(), txt.seekable())
 
-    @unittest.skip("Issue #6213 with incremental encoders")
     def test_append_bom(self):
         # The BOM is not written again when appending to a non-empty file
         filename = support.TESTFN
@@ -2103,7 +2102,6 @@ class TextIOWrapperTest(unittest.TestCase):
             with self.open(filename, 'rb') as f:
                 self.assertEquals(f.read(), 'aaaxxx'.encode(charset))
 
-    @unittest.skip("Issue #6213 with incremental encoders")
     def test_seek_bom(self):
         # Same test, but when seeking manually
         filename = support.TESTFN
index 58abb15151ff51a940e981946bfdc1895ead1630..02472c8079350f767dc6c8676adcd60473ed79fd 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -18,6 +18,9 @@ Core and Builtins
 Library
 -------
 
+- Issue #6213: Implement getstate() and setstate() methods of utf-8-sig and
+  utf-16 incremental encoders.
+
 - Issue #7113: Speed up loading in ConfigParser. Patch by Ćukasz Langa.
 
 - Issue #3704: cookielib was not properly handling URLs with a / in the