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