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