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