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