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