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