iro/offer/provider.py
author Sandro Knauß <knauss@netzguerilla.net>
Fri, 23 Mar 2012 16:22:32 +0100
branchdevel
changeset 244 48fba7b4afe9
parent 220 602720314930
child 253 e8d56537c9cc
permissions -rw-r--r--
all magic utf-8 stuff is now in iro.model.message

from functools import partial

from ..error import NoRoute, NoTyp, ValidateException, NoProvider
from ..config import Option, Config

class Provider(Config):
    def __init__(self, name, typs={}):
        Config.__init__(self, name)
        self.typs=typs
        self.testmode = False

        self.options = {
                "typ":Option(vProvider, long="One available provider typ.", must=True, default=name)
                }

        self.order = ["typ"]

    def send(self, typ, route, recipient, message):
        pass

    def getSendFunc(self, typ, route):
        try:
            if route not in self.typs[typ]:
                raise NoRoute(route)
        except KeyError:
            raise NoTyp(route)
        return partial(self.send, typ, route)

def getProvider(name, typ, config):
    try:
        p = providers[typ](name)
        p.load(config)
        return p
    except KeyError:
        raise NoProvider(typ)

def vProvider(typ, field):
    if typ not in providers.keys():
        raise ValidateException()
    return typ

providers={}