rarfile history

Version 2.6 (2013-04-10)

  • Add context manager support for RarFile class. Both RarFile and RarExtFile support with statement now. (Wentao Han)
  • RarFile.volumelist() method, returns filenames of archive volumes.
  • Re-throw clearer error in case unrar is not found in PATH.
  • Sync new unrar4.x error code from rar.txt.
  • Use Sphinx for documentation, push docs to rtfd.org

Version 2.5 (2012-01-19)

Fixes:

  • .read() and .readinto() now do looping read to work properly on short reads. Important for Python 3.2+ where read from pipe can return short result even on blocking file descriptor.
  • Proper error reporting in .extract(), .extractall(), .testrar()
  • .read() from unrar pipe: prefer to return unrar error code, if thats not available, do own error checks.
  • Avoid string addition in .read(), instead use always list+join to merge multi-part reads.
  • dumprar: dont re-encode byte strings (python 2.x). This avoids unneccessary failure when printing invalid unicode.

Version 2.4 (2011-11-05)

Fixes:

  • USE_DATETIME: survive bad values from RAR
  • Fix bug in corrupt unicode filename handling
  • dumprar: make unicode chars work with both pipe and console

Version 2.3 (2011-07-03)

Features:

  • Support .seek() method on file streams. (Kristian Larsson)
  • Support .readinto() method on file streams. Optimized implementation is available on Python 2.6+ where memoryview is available.
  • Support file comments - RarInfo.comment contains decompressed data if available.
  • File objects returned by RarFile.open() are io.RawIOBase-compatible. They can further wrapped with io.BufferedReader` and ``io.TextIOWrapper.
  • Now .getinfo() uses dict lookup instead of sequential scan when searching archive entry. This speeds up prococessing for archives that have many entries.
  • Option rarfile.UNICODE_COMMENTS to decode both archive and file comments to unicode. It uses TRY_ENCODINGS for list of encodings to try. If off, comments are left as byte strings. Default: 0
  • Option rarfile.PATH_SEP to change path separator. Default: r'\', set rarfile.PATH_SEP='/' to be compatibe with zipfile.
  • Option rarfile.USE_DATETIME to convert timestamps to datetime objects. Default: 0, timestamps are tuples.
  • Option rarfile.TRY_ENCODINGS to allow tuning attempted encoding list.
  • Reorder RarInfo fiels to better show zipfile-compatible fields.
  • Standard regtests to make sure various features work

Compatibility:

  • Drop RarInfo.unicode_filename, plain RarInfo.filename is already unicode since 2.0.
  • .read(-1) reads now until EOF. Previously it returned empty buffer.

Fixes:

  • Make encrypted headers work with Python 3.x bytes() and with old 2.x ‘sha’ module.
  • Simplify subprocess.Popen() usage when launching unrar. Previously it tried to optimize and work around OS/Python bugs, but this is not maintainable.
  • Use temp rar file hack on multi-volume archives too.
  • Always .wait() on unrar, to avoid zombies
  • Convert struct.error to BadRarFile
  • Plug some fd leaks. Affected: Jython, PyPy.
  • Broken archives are handled more robustly.

Version 2.2 (2010-08-19)

Fixes:

  • Relaxed volume naming. Now it just calculates new volume name by finding number in old one and increasing it, without any expectations what that number should be.
  • Files with 4G of compressed data in one colume were handled wrong. Fix.
  • DOS timestamp seconds need to be multiplied with 2.
  • Correct EXTTIME parsing.

Cleanups:

  • Compressed size is per-volume, sum them together, so that user sees complete compressed size for files split over several volumes.
  • dumprar: Show unknown bits.
  • Use struct.Struct() to cache unpack formats.
  • Support missing os.devnull. (Python 2.3)

Version 2.1 (2010-07-31)

Features:

  • Minimal implmentation for .extract(), .extractall(), .testrar(). They are simple shortcuts to unrar invocation.
  • Accept RarInfo object where filename is expected.
  • Include dumprar.py in .tgz. It can be used to visualize RAR structure and test module.
  • Support for encrypted file headers.

Fixes:

  • Don’t read past ENDARC, there could be non-RAR data there.
  • RAR 2.x: It does not write ENDARC, but our volume code expected it. Fix that.
  • RAR 2.x: Support more than 200 old-style volumes.

Cleanups:

  • Load comment only when requested.
  • Cleanup of internal config variables. They should have now final names.
  • .open(): Add mode=r argument to match zipfile.
  • Doc and comments cleanup, minimize duplication.
  • Common wrappers for both compressed and uncompressed files, now .open() also does CRC-checking.

Version 2.0 (2010-04-29)

Features:

  • Python 3 support. Still works with 2.x.
  • Parses extended time fields. (.mtime, .ctime, .atime)
  • .open() method. This makes possible to process large entries that do not fit into memory.
  • Supports password-protected archives.
  • Supports archive comments.

Cleanups:

  • Uses subprocess module to launch unrar.
  • .filename is always Unicode string, .unicode_filename is now deprecated.
  • .CRC is unsigned again, as python3 crc32() is unsigned.

Version 1.1 (2008-08-31)

Fixes:

  • Replace os.tempnam() with tempfile.mkstemp(). (Jason Moiron)
  • Fix infinite loop in _extract_hack on unexpected EOF
  • RarInfo.CRC is now signed value to match crc32()
  • RarFile.read() now checks file crc

Cleanups:

  • more docstrings
  • throw proper exceptions (subclasses of rarfile.Error)
  • RarInfo has fields pre-initialized, so they appear in help()
  • rename RarInfo.data to RarInfo.header_data
  • dont use “print” when header parsing fails
  • use try/finally to delete temp rar

Version 1.0 (2005-08-08)

  • First release.