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