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