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