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