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