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