iro/offer/provider.py
author Sandro Knauß <knauss@netzguerilla.net>
Thu, 23 Feb 2012 16:57:57 +0100
branchdevel
changeset 183 07ee5543751b
parent 180 55ab949cf0f8
child 186 b381eaa774ab
permissions -rw-r--r--
offer.provider now handles the options dict and loadConfig is only in Provider class
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
161
072ee139eb67 sending part now in provoder class
Sandro Knauß <knauss@netzguerilla.net>
parents: 159
diff changeset
     1
from functools import partial
072ee139eb67 sending part now in provoder class
Sandro Knauß <knauss@netzguerilla.net>
parents: 159
diff changeset
     2
183
07ee5543751b offer.provider now handles the options dict and loadConfig is only in Provider class
Sandro Knauß <knauss@netzguerilla.net>
parents: 180
diff changeset
     3
from ..error import NoRoute, NoTyp, ValidateException, NoProvider, NeededOption
07ee5543751b offer.provider now handles the options dict and loadConfig is only in Provider class
Sandro Knauß <knauss@netzguerilla.net>
parents: 180
diff changeset
     4
from ..config import Option
07ee5543751b offer.provider now handles the options dict and loadConfig is only in Provider class
Sandro Knauß <knauss@netzguerilla.net>
parents: 180
diff changeset
     5
157
0192f9107870 model.offer.loadOffers implemented
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     6
class Provider():
169
aabc04843d25 complete offer.smtp tests
Sandro Knauß <knauss@netzguerilla.net>
parents: 166
diff changeset
     7
    def __init__(self, name, config, typs={}):
157
0192f9107870 model.offer.loadOffers implemented
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     8
        self.name = name
0192f9107870 model.offer.loadOffers implemented
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     9
        self.config = config
166
6d6890f7e3f8 adding smtp provider
Sandro Knauß <knauss@netzguerilla.net>
parents: 161
diff changeset
    10
        self.typs=typs
6d6890f7e3f8 adding smtp provider
Sandro Knauß <knauss@netzguerilla.net>
parents: 161
diff changeset
    11
        self.testmode = False
6d6890f7e3f8 adding smtp provider
Sandro Knauß <knauss@netzguerilla.net>
parents: 161
diff changeset
    12
        
183
07ee5543751b offer.provider now handles the options dict and loadConfig is only in Provider class
Sandro Knauß <knauss@netzguerilla.net>
parents: 180
diff changeset
    13
        self.options = {
07ee5543751b offer.provider now handles the options dict and loadConfig is only in Provider class
Sandro Knauß <knauss@netzguerilla.net>
parents: 180
diff changeset
    14
                "typ":Option(vProvider, long="One available provider typ.", must=True)
07ee5543751b offer.provider now handles the options dict and loadConfig is only in Provider class
Sandro Knauß <knauss@netzguerilla.net>
parents: 180
diff changeset
    15
                }
157
0192f9107870 model.offer.loadOffers implemented
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    16
0192f9107870 model.offer.loadOffers implemented
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    17
    def loadConfig(self):
183
07ee5543751b offer.provider now handles the options dict and loadConfig is only in Provider class
Sandro Knauß <knauss@netzguerilla.net>
parents: 180
diff changeset
    18
        c=dict(self.config)
07ee5543751b offer.provider now handles the options dict and loadConfig is only in Provider class
Sandro Knauß <knauss@netzguerilla.net>
parents: 180
diff changeset
    19
        for o in self.options:
07ee5543751b offer.provider now handles the options dict and loadConfig is only in Provider class
Sandro Knauß <knauss@netzguerilla.net>
parents: 180
diff changeset
    20
            try:
07ee5543751b offer.provider now handles the options dict and loadConfig is only in Provider class
Sandro Knauß <knauss@netzguerilla.net>
parents: 180
diff changeset
    21
                value = self.options[o].validate(c[o],o)
07ee5543751b offer.provider now handles the options dict and loadConfig is only in Provider class
Sandro Knauß <knauss@netzguerilla.net>
parents: 180
diff changeset
    22
                setattr(self, o, value)
07ee5543751b offer.provider now handles the options dict and loadConfig is only in Provider class
Sandro Knauß <knauss@netzguerilla.net>
parents: 180
diff changeset
    23
            except (KeyError):
07ee5543751b offer.provider now handles the options dict and loadConfig is only in Provider class
Sandro Knauß <knauss@netzguerilla.net>
parents: 180
diff changeset
    24
                if self.options[o].must:
07ee5543751b offer.provider now handles the options dict and loadConfig is only in Provider class
Sandro Knauß <knauss@netzguerilla.net>
parents: 180
diff changeset
    25
                    raise NeededOption(self.name, o) 
07ee5543751b offer.provider now handles the options dict and loadConfig is only in Provider class
Sandro Knauß <knauss@netzguerilla.net>
parents: 180
diff changeset
    26
                elif self.options[o].default is not None:
07ee5543751b offer.provider now handles the options dict and loadConfig is only in Provider class
Sandro Knauß <knauss@netzguerilla.net>
parents: 180
diff changeset
    27
                    setattr(self,o,self.options[o].default)
07ee5543751b offer.provider now handles the options dict and loadConfig is only in Provider class
Sandro Knauß <knauss@netzguerilla.net>
parents: 180
diff changeset
    28
159
fbd7364b252d implementing Provider.loadConig started
Sandro Knauß <knauss@netzguerilla.net>
parents: 157
diff changeset
    29
        for (n, v) in self.config:
fbd7364b252d implementing Provider.loadConig started
Sandro Knauß <knauss@netzguerilla.net>
parents: 157
diff changeset
    30
            if n == "typ":
fbd7364b252d implementing Provider.loadConig started
Sandro Knauß <knauss@netzguerilla.net>
parents: 157
diff changeset
    31
                self.typ = v
161
072ee139eb67 sending part now in provoder class
Sandro Knauß <knauss@netzguerilla.net>
parents: 159
diff changeset
    32
072ee139eb67 sending part now in provoder class
Sandro Knauß <knauss@netzguerilla.net>
parents: 159
diff changeset
    33
    def send(self, typ, route, recipient, message):
072ee139eb67 sending part now in provoder class
Sandro Knauß <knauss@netzguerilla.net>
parents: 159
diff changeset
    34
        pass
072ee139eb67 sending part now in provoder class
Sandro Knauß <knauss@netzguerilla.net>
parents: 159
diff changeset
    35
072ee139eb67 sending part now in provoder class
Sandro Knauß <knauss@netzguerilla.net>
parents: 159
diff changeset
    36
    def getSendFunc(self, typ, route):
171
5619596a0053 getSendFunc logic from smtp to Provider(offer.provider)
Sandro Knauß <knauss@netzguerilla.net>
parents: 169
diff changeset
    37
        try:
5619596a0053 getSendFunc logic from smtp to Provider(offer.provider)
Sandro Knauß <knauss@netzguerilla.net>
parents: 169
diff changeset
    38
            if route not in self.typs[typ]:
5619596a0053 getSendFunc logic from smtp to Provider(offer.provider)
Sandro Knauß <knauss@netzguerilla.net>
parents: 169
diff changeset
    39
                raise NoRoute(route)
5619596a0053 getSendFunc logic from smtp to Provider(offer.provider)
Sandro Knauß <knauss@netzguerilla.net>
parents: 169
diff changeset
    40
        except KeyError:
5619596a0053 getSendFunc logic from smtp to Provider(offer.provider)
Sandro Knauß <knauss@netzguerilla.net>
parents: 169
diff changeset
    41
            raise NoTyp(route)
161
072ee139eb67 sending part now in provoder class
Sandro Knauß <knauss@netzguerilla.net>
parents: 159
diff changeset
    42
        return partial(self.send, typ, route)
072ee139eb67 sending part now in provoder class
Sandro Knauß <knauss@netzguerilla.net>
parents: 159
diff changeset
    43
180
55ab949cf0f8 providers now handeld in offer.provider
Sandro Knauß <knauss@netzguerilla.net>
parents: 171
diff changeset
    44
def getProvider(name, typ, config):
55ab949cf0f8 providers now handeld in offer.provider
Sandro Knauß <knauss@netzguerilla.net>
parents: 171
diff changeset
    45
    try:
55ab949cf0f8 providers now handeld in offer.provider
Sandro Knauß <knauss@netzguerilla.net>
parents: 171
diff changeset
    46
        return providers[typ](name,config)
55ab949cf0f8 providers now handeld in offer.provider
Sandro Knauß <knauss@netzguerilla.net>
parents: 171
diff changeset
    47
    except KeyError:
55ab949cf0f8 providers now handeld in offer.provider
Sandro Knauß <knauss@netzguerilla.net>
parents: 171
diff changeset
    48
        raise NoProvider(typ)
55ab949cf0f8 providers now handeld in offer.provider
Sandro Knauß <knauss@netzguerilla.net>
parents: 171
diff changeset
    49
55ab949cf0f8 providers now handeld in offer.provider
Sandro Knauß <knauss@netzguerilla.net>
parents: 171
diff changeset
    50
def vProvider(typ, field):
55ab949cf0f8 providers now handeld in offer.provider
Sandro Knauß <knauss@netzguerilla.net>
parents: 171
diff changeset
    51
    if typ not in providers.keys():
55ab949cf0f8 providers now handeld in offer.provider
Sandro Knauß <knauss@netzguerilla.net>
parents: 171
diff changeset
    52
        raise ValidateException()
55ab949cf0f8 providers now handeld in offer.provider
Sandro Knauß <knauss@netzguerilla.net>
parents: 171
diff changeset
    53
    return typ
55ab949cf0f8 providers now handeld in offer.provider
Sandro Knauß <knauss@netzguerilla.net>
parents: 171
diff changeset
    54
55ab949cf0f8 providers now handeld in offer.provider
Sandro Knauß <knauss@netzguerilla.net>
parents: 171
diff changeset
    55
providers={}