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