#!/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
import json
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 = json.loads(ppds_decompressed.decode(encoding='ASCII'))
    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()
    # Encode to binary, decode base64, decompress and convert to bytes again
    ppds['ARCHIVE'] = BytesIO(decompress(base64.b64decode(ppds['ARCHIVE'].encode('ASCII'))))

    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 1.0.2\n" \
              "Copyright (c) 2013 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
