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