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