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