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