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(): |