#!/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.1\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
