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