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