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