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