__author__ = "Nadeem Vawda <nadeem.vawda@gmail.com>"
from builtins import open as _builtin_open
+from compression._common import _streams
import io
import os
-import _compression
from _bz2 import BZ2Compressor, BZ2Decompressor
_MODE_WRITE = 3
-class BZ2File(_compression.BaseStream):
+class BZ2File(_streams.BaseStream):
"""A file object providing transparent bzip2 (de)compression.
raise TypeError("filename must be a str, bytes, file or PathLike object")
if self._mode == _MODE_READ:
- raw = _compression.DecompressReader(self._fp,
+ raw = _streams.DecompressReader(self._fp,
BZ2Decompressor, trailing_error=OSError)
self._buffer = io.BufferedReader(raw)
else:
Line separators are not added between the written byte strings.
"""
- return _compression.BaseStream.writelines(self, seq)
+ return _streams.BaseStream.writelines(self, seq)
def seek(self, offset, whence=io.SEEK_SET):
"""Change the file position.
-"""Internal classes used by the gzip, lzma and bz2 modules"""
+"""Internal classes used by compression modules"""
import io
import sys
--- /dev/null
+import bz2
+__doc__ = bz2.__doc__
+del bz2
+
+from bz2 import *
--- /dev/null
+import gzip
+__doc__ = gzip.__doc__
+del gzip
+
+from gzip import *
--- /dev/null
+import lzma
+__doc__ = lzma.__doc__
+del lzma
+
+from lzma import *
--- /dev/null
+import zlib
+__doc__ = zlib.__doc__
+del zlib
+
+from zlib import *
# based on Andrew Kuchling's minigzip.py distributed with the zlib module
-import _compression
import builtins
import io
import os
import time
import weakref
import zlib
+from compression._common import _streams
__all__ = ["BadGzipFile", "GzipFile", "open", "compress", "decompress"]
return True
-class GzipFile(_compression.BaseStream):
+class GzipFile(_streams.BaseStream):
"""The GzipFile class simulates most of the methods of a file object with
the exception of the truncate() method.
return last_mtime
-class _GzipReader(_compression.DecompressReader):
+class _GzipReader(_streams.DecompressReader):
def __init__(self, fp):
super().__init__(_PaddedFile(fp), zlib._ZlibDecompressor,
wbits=-zlib.MAX_WBITS)
import builtins
import io
import os
+from compression._common import _streams
from _lzma import *
from _lzma import _encode_filter_properties, _decode_filter_properties # noqa: F401
-import _compression
# Value 0 no longer used
_MODE_WRITE = 3
-class LZMAFile(_compression.BaseStream):
+class LZMAFile(_streams.BaseStream):
"""A file object providing transparent LZMA (de)compression.
raise TypeError("filename must be a str, bytes, file or PathLike object")
if self._mode == _MODE_READ:
- raw = _compression.DecompressReader(self._fp, LZMADecompressor,
+ raw = _streams.DecompressReader(self._fp, LZMADecompressor,
trailing_error=LZMAError, format=format, filters=filters)
self._buffer = io.BufferedReader(raw)
from test.support import import_helper
from test.support import threading_helper
from test.support.os_helper import unlink, FakePath
-import _compression
+from compression._common import _streams
import sys
def testReadMonkeyMultiStream(self):
# Test BZ2File.read() on a multi-stream archive where a stream
# boundary coincides with the end of the raw read buffer.
- buffer_size = _compression.BUFFER_SIZE
- _compression.BUFFER_SIZE = len(self.DATA)
+ buffer_size = _streams.BUFFER_SIZE
+ _streams.BUFFER_SIZE = len(self.DATA)
try:
self.createTempFile(streams=5)
with BZ2File(self.filename) as bz2f:
self.assertRaises(TypeError, bz2f.read, float())
self.assertEqual(bz2f.read(), self.TEXT * 5)
finally:
- _compression.BUFFER_SIZE = buffer_size
+ _streams.BUFFER_SIZE = buffer_size
def testReadTrailingJunk(self):
self.createTempFile(suffix=self.BAD_DATA)
def testDecompressLimited(self):
"""Decompressed data buffering should be limited"""
bomb = bz2.compress(b'\0' * int(2e6), compresslevel=9)
- self.assertLess(len(bomb), _compression.BUFFER_SIZE)
+ self.assertLess(len(bomb), _streams.BUFFER_SIZE)
decomp = BZ2File(BytesIO(bomb))
self.assertEqual(decomp.read(1), b'\0')
-import _compression
import array
from io import BytesIO, UnsupportedOperation, DEFAULT_BUFFER_SIZE
import os
import sys
from test import support
import unittest
+from compression._common import _streams
from test.support import _4G, bigmemtest
from test.support.import_helper import import_module
def test_read_multistream_buffer_size_aligned(self):
# Test the case where a stream boundary coincides with the end
# of the raw read buffer.
- saved_buffer_size = _compression.BUFFER_SIZE
- _compression.BUFFER_SIZE = len(COMPRESSED_XZ)
+ saved_buffer_size = _streams.BUFFER_SIZE
+ _streams.BUFFER_SIZE = len(COMPRESSED_XZ)
try:
with LZMAFile(BytesIO(COMPRESSED_XZ * 5)) as f:
self.assertEqual(f.read(), INPUT * 5)
finally:
- _compression.BUFFER_SIZE = saved_buffer_size
+ _streams.BUFFER_SIZE = saved_buffer_size
def test_read_trailing_junk(self):
with LZMAFile(BytesIO(COMPRESSED_XZ + COMPRESSED_BOGUS)) as f:
def test_decompress_limited(self):
"""Decompressed data buffering should be limited"""
bomb = lzma.compress(b'\0' * int(2e6), preset=6)
- self.assertLess(len(bomb), _compression.BUFFER_SIZE)
+ self.assertLess(len(bomb), _streams.BUFFER_SIZE)
decomp = LZMAFile(BytesIO(bomb))
self.assertEqual(decomp.read(1), b'\0')
"_collections_abc",
"_colorize",
"_compat_pickle",
-"_compression",
"_contextvars",
"_csv",
"_ctypes",
"collections",
"colorsys",
"compileall",
+"compression",
"concurrent",
"configparser",
"contextlib",