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