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