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