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