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