#!/usr/bin/env python3

# compressor.py
from subprocess import Popen, PIPE

def compress(value):
    """Compresses a byte array with the xz binary"""

    process = Popen(["xz", "--compress", "--force"], stdin=PIPE, stdout=PIPE)
    return process.communicate(value)[0]

def decompress(value):
    """Decompresses a byte array 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

import os
import sys
from optparse import OptionParser
from sys import argv
import base64
try:
    import cPickle as pickle
except ImportError:
    import pickle
from io import BytesIO

from os.path import basename
from errno import EPIPE

def load():
    ppds_compressed = base64.b64decode(ppds_compressed_b64)
    ppds_decompressed = decompress(ppds_compressed)
    ppds = pickle.loads(ppds_decompressed)
    return ppds

def ls():
    binary_name = basename(argv[0])
    ppds = load()
    for key, value in ppds.items():
        if key == 'ARCHIVE': continue
        for ppd in value[2]:
            try:
                print(ppd.replace('"', '"' + binary_name + ':', 1))
            except IOError as e:
                # Errors like broken pipes (program which takes the standard
                # output terminates before this program terminates) should not
                # generate a traceback.
                if e.errno == EPIPE: exit(0)
                raise

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'] = BytesIO(decompress(ppds['ARCHIVE']))

    if ppd in ppds:
        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 1.0.2\n" \
              "Copyright (c) 2013 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])
        try:
            # avoid any assumption of encoding or system locale; just print the
            # bytes of the PPD as they are
            if sys.version_info.major < 3:
                sys.stdout.write(ppd)
            else:
                sys.stdout.buffer.write(ppd)
        except IOError as e:
            # Errors like broken pipes (program which takes the standard output
            # terminates before this program terminates) should not generate a
            # traceback.
            if e.errno == EPIPE: exit(0)
            raise
    else:
        parser.error("argument " + args[0] + " invalid")

# PPDs Archive
ppds_compressed_b64 = b"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"

if __name__ == "__main__":
    try:
        main()
    except KeyboardInterrupt:
        # We don't want a KeyboardInterrupt throwing a
        # traceback into stdout.
        pass
