Patch #1436130: codecs.lookup() now returns a CodecInfo object (a subclass
of tuple) that provides incremental decoders and encoders (a way to use
stateful codecs without the stream API). Functions
codecs.getincrementaldecoder() and codecs.getincrementalencoder() have
been added.
diff --git a/Lib/encodings/utf_8.py b/Lib/encodings/utf_8.py
index 9cb0b4b..1bf6336 100644
--- a/Lib/encodings/utf_8.py
+++ b/Lib/encodings/utf_8.py
@@ -15,6 +15,13 @@
 def decode(input, errors='strict'):
     return codecs.utf_8_decode(input, errors, True)
 
+class IncrementalEncoder(codecs.IncrementalEncoder):
+    def encode(self, input, final=False):
+        return codecs.utf_8_encode(input, self.errors)[0]
+
+class IncrementalDecoder(codecs.BufferedIncrementalDecoder):
+    _buffer_decode = codecs.utf_8_decode
+
 class StreamWriter(codecs.StreamWriter):
     encode = codecs.utf_8_encode
 
@@ -24,5 +31,12 @@
 ### encodings module API
 
 def getregentry():
-
-    return (encode,decode,StreamReader,StreamWriter)
+    return codecs.CodecInfo(
+        name='utf-8',
+        encode=encode,
+        decode=decode,
+        incrementalencoder=IncrementalEncoder,
+        incrementaldecoder=IncrementalDecoder,
+        streamreader=StreamReader,
+        streamwriter=StreamWriter,
+    )