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