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