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