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