#!/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
