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