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