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