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