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