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