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