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