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