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