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