Development with the patoolib library
======================================

The patool funtionality can also be used in other Python programs.
To do this, install the patool program, import the library and
use one or more of the convenience functions.

import patoolib
if patoolib.extract("myarchive.zip", verbose=True) == 0:
    print "Success."
else:
    print "Error."

General rules for all convenience functions:

* All convenience function return zero when no error occurred, else
  an integer unequal zero.

* Error messages are printed on stderr, informative messages
  are printed on stdout.

* All file arguments are filenames. File objects are not accepted
  as input.

* Filenames can be relative or absolute.

The convenience functions are:

* ``def extract(archive, verbose=False, outdir=None)``
  
  Extracts the given archive filename to the current working directory
  or if specified to the given directory name in outdir.
  If verbose operation is set to True, additional output of the archive
  program is shown.
  Checks that the archive exists and is readable before extracting it.

* ``def list(archive, verbose=False)``
  
  Lists the contents of the given archive filename on stdout.
  If verbose operation is set to True, additional output of the archive
  program is shown.
  Checks that the archive exists and is readable before listing it.

* ``def test(archive, verbose=False)``
  
  Tests the given archive filename.
  If verbose operation is set to True, additional output of the archive
  program is shown.
  Checks that the archive exists and is readable before testing it.

* ``def create(archive, *filenames, **kwargs)``
  
  Creates a new archive. The type of archive is determined
  by the archive filename extension.
  If verbose operation is set to True, additional output of the archive
  program is shown.
  Checks that the archive is not already existing to avoid overwriting it.
  Also checks that the filename list is not empty and that all files exist
  and are readable.

* ``def diff(archive1, archive2, verbose=False)``
  
  This function lists differences in the content of the two archives.
  Both archives are extracted and the contents are compared
  recursively with the diff(1) program.
  If verbose operation is set to True, additional output of the archive
  program is shown.
  Checks that both archives exist and are readable.

* ``def repack(archive1, archive2, verbose=False)``
  
  This function extracts the contents of archive1 and packs them
  into archive2.
  If verbose operation is set to True, additional output of the archive
  program is shown.
  Checks that archive1 exists and is readable. Also checks that
  archive2 does not exist to avoid overwriting it.

