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