#!/usr/bin/env python

# compressor.py
from subprocess import Popen, PIPE

def compress(value):
    """Compresses a string with the xz binary"""

    process = Popen(["xz", "--compress", "--force"], stdin=PIPE, stdout=PIPE)
    return process.communicate(value)[0]

def decompress(value):
    """Decompresses a string with the xz binary"""

    process = Popen(["xz", "--decompress", "--stdout", "--force"],
                    stdin=PIPE, stdout=PIPE)
    return process.communicate(value)[0]

def compress_file(path):
    """Compress the file at 'path' with the xz binary"""

    process = Popen(["xz", "--compress", "--force", "--stdout", path], stdout=PIPE)
    return process.communicate()[0]

# compressor.py

from optparse import OptionParser
from sys import argv
import base64
import cPickle
from cStringIO import StringIO
from os.path import basename

def load():
    ppds_compressed = base64.b64decode(ppds_compressed_b64)
    ppds_decompressed = decompress(ppds_compressed)
    ppds = cPickle.loads(ppds_decompressed)
    return ppds

def ls():
    binary_name = basename(argv[0])
    ppds = load()
    for key, value in ppds.iteritems():
        if key == 'ARCHIVE': continue
        for ppd in value[2]:
            print ppd.replace('"', '"' + binary_name + ':', 1)

def cat(ppd):
    # Ignore driver's name, take only PPD's
    ppd = ppd.split(":")[-1]
    # Remove also the index
    ppd = "0/" + ppd[ppd.find("/")+1:]

    ppds = load()
    ppds['ARCHIVE'] = StringIO(decompress(ppds['ARCHIVE']))

    if ppds.has_key(ppd):
        start = ppds[ppd][0]
        length = ppds[ppd][1]
        ppds['ARCHIVE'].seek(start)
        return ppds['ARCHIVE'].read(length)

def main():
    usage = "usage: %prog list\n" \
            "       %prog cat URI"
    version = "%prog 0.4.9\n" \
              "Copyright (c) 2010 Vitor Baptista.\n" \
              "This is free software; see the source for copying conditions.\n" \
              "There is NO warranty; not even for MERCHANTABILITY or\n" \
              "FITNESS FOR A PARTICULAR PURPOSE."
    parser = OptionParser(usage=usage,
                          version=version)
    (options, args) = parser.parse_args()

    if len(args) == 0 or len(args) > 2:
        parser.error("incorrect number of arguments")

    if args[0].lower() == 'list':
        ls()
    elif args[0].lower() == 'cat':
        if not len(args) == 2:
            parser.error("incorrect number of arguments")
        ppd = cat(args[1])
        if not ppd:
            parser.error("Printer '%s' does not have default driver!" % args[1])
        print ppd
    else:
        parser.error("argument " + args[0] + " invalid")

# PPDs Archive
ppds_compressed_b64 = "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"

if __name__ == "__main__":
    try:
        main()
    except (IOError, KeyboardInterrupt):
        # We don't want neither IOError nor KeyboardInterrupt throwing a
        # traceback into stdout.
        pass
