iro/offer/provider.py
branchdevel
changeset 186 b381eaa774ab
parent 183 07ee5543751b
child 220 602720314930
equal deleted inserted replaced
185:8ad6c097bc5b 186:b381eaa774ab
     1 from functools import partial
     1 from functools import partial
     2 
     2 
     3 from ..error import NoRoute, NoTyp, ValidateException, NoProvider, NeededOption
     3 from ..error import NoRoute, NoTyp, ValidateException, NoProvider
     4 from ..config import Option
     4 from ..config import Option, Config
     5 
     5 
     6 class Provider():
     6 class Provider(Config):
     7     def __init__(self, name, config, typs={}):
     7     def __init__(self, name, typs={}):
     8         self.name = name
     8         Config.__init__(self, name)
     9         self.config = config
       
    10         self.typs=typs
     9         self.typs=typs
    11         self.testmode = False
    10         self.testmode = False
    12         
    11 
    13         self.options = {
    12         self.options = {
    14                 "typ":Option(vProvider, long="One available provider typ.", must=True)
    13                 "typ":Option(vProvider, long="One available provider typ.", must=True)
    15                 }
    14                 }
    16 
       
    17     def loadConfig(self):
       
    18         c=dict(self.config)
       
    19         for o in self.options:
       
    20             try:
       
    21                 value = self.options[o].validate(c[o],o)
       
    22                 setattr(self, o, value)
       
    23             except (KeyError):
       
    24                 if self.options[o].must:
       
    25                     raise NeededOption(self.name, o) 
       
    26                 elif self.options[o].default is not None:
       
    27                     setattr(self,o,self.options[o].default)
       
    28 
       
    29         for (n, v) in self.config:
       
    30             if n == "typ":
       
    31                 self.typ = v
       
    32 
    15 
    33     def send(self, typ, route, recipient, message):
    16     def send(self, typ, route, recipient, message):
    34         pass
    17         pass
    35 
    18 
    36     def getSendFunc(self, typ, route):
    19     def getSendFunc(self, typ, route):
    41             raise NoTyp(route)
    24             raise NoTyp(route)
    42         return partial(self.send, typ, route)
    25         return partial(self.send, typ, route)
    43 
    26 
    44 def getProvider(name, typ, config):
    27 def getProvider(name, typ, config):
    45     try:
    28     try:
    46         return providers[typ](name,config)
    29         p = providers[typ](name)
       
    30         p.load(config)
       
    31         return p
    47     except KeyError:
    32     except KeyError:
    48         raise NoProvider(typ)
    33         raise NoProvider(typ)
    49 
    34 
    50 def vProvider(typ, field):
    35 def vProvider(typ, field):
    51     if typ not in providers.keys():
    36     if typ not in providers.keys():