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