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