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