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