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