]> granicus.if.org Git - python/commitdiff
Added codec for bz2 compression.
authorRaymond Hettinger <python@rcn.com>
Tue, 23 Sep 2003 20:21:01 +0000 (20:21 +0000)
committerRaymond Hettinger <python@rcn.com>
Tue, 23 Sep 2003 20:21:01 +0000 (20:21 +0000)
Doc/lib/libcodecs.tex
Lib/encodings/aliases.py
Lib/encodings/bz2_codec.py [new file with mode: 0644]
Misc/NEWS

index 284164333cf9cf202982356bb448abf659f95cfa..c67bcccfb12b802df771ec6888bfbab02d389a70 100644 (file)
@@ -804,6 +804,11 @@ listed as operand type in the table.
          {byte string}
          {Convert operand to MIME base64}
 
+\lineiv{bz2_codec}
+         {bz2}
+         {byte string}
+         {Compress the operand using bz2}
+
 \lineiv{hex_codec}
          {hex}
          {byte string}
index 6620c2e4f4627ad9f635f252327569c55cd90159..b304f15638627b693727ace11eeb1bd0268b5fb7 100644 (file)
@@ -41,6 +41,9 @@ aliases = {
     'base64'             : 'base64_codec',
     'base_64'            : 'base64_codec',
 
+    # bz2_codec codec
+    'bz2'                : 'bz2_codec',
+
     # cp037 codec
     'csibm037'           : 'cp037',
     'ebcdic_cp_ca'       : 'cp037',
diff --git a/Lib/encodings/bz2_codec.py b/Lib/encodings/bz2_codec.py
new file mode 100644 (file)
index 0000000..3d1f75e
--- /dev/null
@@ -0,0 +1,64 @@
+""" Python 'bz2_codec' Codec - bz2 compression encoding
+
+    Unlike most of the other codecs which target Unicode, this codec
+    will return Python string objects for both encode and decode.
+
+    Adapted by Raymond Hettinger from bz2_codec which was written
+    by Marc-Andre Lemburg (mal@lemburg.com).
+
+"""
+import codecs
+import bz2 # this codec needs the optional bz2 module !
+
+### Codec APIs
+
+def bz2_encode(input,errors='strict'):
+
+    """ Encodes the object input and returns a tuple (output
+        object, length consumed).
+
+        errors defines the error handling to apply. It defaults to
+        'strict' handling which is the only currently supported
+        error handling for this codec.
+
+    """
+    assert errors == 'strict'
+    output = bz2.compress(input)
+    return (output, len(input))
+
+def bz2_decode(input,errors='strict'):
+
+    """ Decodes the object input and returns a tuple (output
+        object, length consumed).
+
+        input must be an object which provides the bf_getreadbuf
+        buffer slot. Python strings, buffer objects and memory
+        mapped files are examples of objects providing this slot.
+
+        errors defines the error handling to apply. It defaults to
+        'strict' handling which is the only currently supported
+        error handling for this codec.
+
+    """
+    assert errors == 'strict'
+    output = bz2.decompress(input)
+    return (output, len(input))
+
+class Codec(codecs.Codec):
+
+    def encode(self, input, errors='strict'):
+        return bz2_encode(input, errors)
+    def decode(self, input, errors='strict'):
+        return bz2_decode(input, errors)
+
+class StreamWriter(Codec,codecs.StreamWriter):
+    pass
+
+class StreamReader(Codec,codecs.StreamReader):
+    pass
+
+### encodings module API
+
+def getregentry():
+
+    return (bz2_encode,bz2_decode,StreamReader,StreamWriter)
index 2c9c9c873a917520f7a7335467930f24702ec21b..9b06c700de66d29d70083c9e0965e089ae7fb4dc 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -46,6 +46,9 @@ Extension modules
 Library
 -------
 
+- encodings.bz2_codec was added for access to bz2 compression
+  using "a long string".encode('bz2')
+
 - Various improvements to unittest.py, realigned with PyUnit CVS.
 
 - dircache now passes exceptions to the caller, instead of returning