5 from ..validate import validate, vBool, vTel, vEmail, vInteger |
5 from ..validate import validate, vBool, vTel, vEmail, vInteger |
6 |
6 |
7 from .task import createJob |
7 from .task import createJob |
8 |
8 |
9 class Interface(object): |
9 class Interface(object): |
10 '''class for a xmlrpc user |
10 '''Interface for views.''' |
11 ''' |
|
12 |
11 |
13 @validate(kwd="detailed", func=vBool, need=False) |
12 @validate(kwd="detailed", func=vBool, need=False) |
14 @validate(kwd="id", func=vInteger, minv=0, need=False, none_allowed=True) |
13 @validate(kwd="id", func=vInteger, minv=0, need=False, none_allowed=True) |
15 @vUser |
14 @vUser |
16 @dbdefer |
15 @dbdefer |
17 def status(self, session, user, id=None, detailed=False): |
16 def status(self, session, user, id=None, detailed=False): |
18 '''Gibt den aktuellen Status eines Auftrages oder Mehreren zurück. |
17 '''Gibt den aktuellen Status eines Auftrages oder Mehreren zurück. |
19 |
18 |
20 Keywords: |
19 :param string apikey: der API Key |
21 apikey[string]: Der API Key |
20 :param hash id: Eine Auftragsnummer |
22 id[hash]: Eine Auftragsnummer |
21 :param `boolean` detailed: Details ausgeben |
23 detailed[boolean]: Details ausgeben |
22 |
24 |
23 :return dict: |
25 Return: |
24 - `key` ist die Auftragsnummer |
26 jobs[list]: Eine Liste der Aufträge. |
25 - [`key`][**'status'**] -- Status des Auftrages |
27 job.name[string]: Angebener Name |
26 |
28 job.status[string]: Status des Auftrages |
27 .. warning:: detailed is not used yet. |
29 |
28 |
30 |
29 >>> status(APIKEY) |
|
30 {"1": {"status":"sended"}, |
|
31 "2": {"status":"error"}, |
|
32 "10": {"status":"sending"}} |
|
33 |
|
34 >>> status(APIKEY,"10") |
|
35 {"10": {"status":"sending"}} |
31 ''' |
36 ''' |
32 user = session.merge(user) |
37 user = session.merge(user) |
33 ret={} |
38 ret={} |
34 if not id: |
39 if not id: |
35 for job in user.jobs: |
40 for job in user.jobs: |
43 @vUser |
48 @vUser |
44 @validate(kwd="route", func=vRoute, typ="sms") |
49 @validate(kwd="route", func=vRoute, typ="sms") |
45 def sms(self, user, message, recipients, route="default", info=""): |
50 def sms(self, user, message, recipients, route="default", info=""): |
46 '''Versendet eine SMS. |
51 '''Versendet eine SMS. |
47 |
52 |
48 Keywords: |
53 :param string apikey: Der API Key |
49 apikey[string]: Der API Key |
54 :param string message: Nachricht |
50 message[string]: Nachricht |
55 :param list recipients: eine Liste von Emfänger-Nummern (gemäß ITU-T E.123) |
51 recipients[list]: eine Liste von Emfänger-Nummern (gemäß ITU-T E.123) |
56 :param route: Route über den geschickt werden soll, |
52 route[string|list]: Route über den geschickt werden soll, |
|
53 oder eine Liste von Routen, um Fallbacks anzugeben |
57 oder eine Liste von Routen, um Fallbacks anzugeben |
54 info[string]: Infostring um eine Nachricht einer Gruppe zuorden zu können. |
58 :type route: string|list |
55 |
59 :param string info: Infostring um eine Nachricht einer Gruppe zuorden zu können. |
56 Return: |
60 |
57 id[hash]: Die ID des Auftrages |
61 :return hash: Die ID des Auftrages |
58 |
62 |
59 ''' |
63 ''' |
60 d = createJob(user, recipients, SMS(message), route, info) |
64 d = createJob(user, recipients, SMS(message), route, info) |
61 def ret(job): |
65 def ret(job): |
62 return job.dbjob |
66 return job.dbjob |
67 @vUser |
71 @vUser |
68 @validate(kwd="route",func=vRoute, typ="fax") |
72 @validate(kwd="route",func=vRoute, typ="fax") |
69 def fax(self, user, subject, fax, recipients, route="default", info=""): |
73 def fax(self, user, subject, fax, recipients, route="default", info=""): |
70 '''Versendet ein FAX. |
74 '''Versendet ein FAX. |
71 |
75 |
72 Keywords: |
76 :param string apikey: Der API Key |
73 apikey[string]: Der API Key |
77 :param string subject: Der Betreff |
74 subject[string]: Der Betreff |
78 :param string fax: Der base64 kodierte content |
75 fax[string]: Der base64 kodierte content |
79 :param list recipients: Eine Liste von Emfänger-Nummern (gemäß ITU-T E.123) |
76 recipients[list]: Eine Liste von Emfänger-Nummern (gemäß ITU-T E.123) |
80 :param route: Route über den geschickt werden soll, |
77 route[string|list]: Route über den geschickt werden soll, |
|
78 oder eine Liste von Routen, um Fallbacks anzugeben |
81 oder eine Liste von Routen, um Fallbacks anzugeben |
79 info[string]: Infostring um eine Nachricht einer Gruppe zuorden zu können. |
82 :type route: string|list |
80 |
83 :param string info: Infostring um eine Nachricht einer Gruppe zuorden zu können. |
81 Return: |
84 |
82 id[hash]: Die ID des Auftrages |
85 :return hash: Die ID des Auftrages |
83 |
|
84 ''' |
86 ''' |
85 d = createJob(user, recipients, Fax(subject, fax), route, info) |
87 d = createJob(user, recipients, Fax(subject, fax), route, info) |
86 def ret(job): |
88 def ret(job): |
87 return job.dbjob |
89 return job.dbjob |
88 d.addCallback(ret) |
90 d.addCallback(ret) |
93 @vUser |
95 @vUser |
94 @validate(kwd="route",func=vRoute, typ="mail") |
96 @validate(kwd="route",func=vRoute, typ="mail") |
95 def mail(self, user, subject, body, recipients, frm=None, route="default", info=""): |
97 def mail(self, user, subject, body, recipients, frm=None, route="default", info=""): |
96 '''Versendet eine Email. |
98 '''Versendet eine Email. |
97 |
99 |
98 Keywords: |
100 :param string apikey: Der API Key |
99 apikey[string]: Der API Key |
101 :param string subject: Der Betreff |
100 subject[string]: Der Betreff |
102 :param string body: Der Email Body |
101 body[string]: Der Email Body |
103 :param list recipients: Eine Liste von Emailadressen |
102 recipients[list]: Eine Liste von Emailadressen |
104 :param string frm: Die Absender Emailadresse |
103 frm[string]: Die Absender Emailadresse |
105 :param route: Route über den geschickt werden soll, |
104 route[string|list]: Route über den geschickt werden soll, |
|
105 oder eine Liste von Routen, um Fallbacks anzugeben |
106 oder eine Liste von Routen, um Fallbacks anzugeben |
106 info[string]: Infostring um eine Nachricht einer Gruppe zuorden zu können. |
107 :type route: string|list |
107 |
108 :param string info: Infostring um eine Nachricht einer Gruppe zuorden zu können. |
108 Return: |
109 |
109 id[hash]: Die ID des Auftrages |
110 :return hash: Die ID des Auftrages |
110 |
|
111 ''' |
111 ''' |
112 |
112 |
113 d = createJob(user, recipients, Mail(subject, body, frm), route, info) |
113 d = createJob(user, recipients, Mail(subject, body, frm), route, info) |
114 def ret(job): |
114 def ret(job): |
115 return job.dbjob |
115 return job.dbjob |
120 @vUser |
120 @vUser |
121 @dbdefer |
121 @dbdefer |
122 def routes(self, session, user, typ): |
122 def routes(self, session, user, typ): |
123 '''Gibt eine Liste aller verfügbaren Provider zurück. |
123 '''Gibt eine Liste aller verfügbaren Provider zurück. |
124 |
124 |
125 Keywords: |
125 :param string apikey: Der API Key |
126 apikey[string]: Der API Key |
126 :param string typ: Der Typ zu dem die Providerloste ausgeben werden soll |
127 typ[string]: Der Typ zu dem die Providerloste ausgeben werden soll |
|
128 Einer der Liste ["sms","fax","mail"] |
127 Einer der Liste ["sms","fax","mail"] |
129 |
128 |
130 Return: |
129 :return list: Eine Liste aller möglichen Provider |
131 providerlist[list]: Eine Liste aller möglichen Provider |
|
132 |
|
133 ''' |
130 ''' |
134 user = session.merge(user) |
131 user = session.merge(user) |
135 offers = user.routes(typ) |
132 offers = user.routes(typ) |
136 return [u[0] for u in offers] |
133 return [u[0] for u in offers] |
137 |
134 |
139 @vUser |
136 @vUser |
140 @dbdefer |
137 @dbdefer |
141 def defaultRoute(self, session, user, typ): |
138 def defaultRoute(self, session, user, typ): |
142 '''Gibt den Standardprovider zurück. |
139 '''Gibt den Standardprovider zurück. |
143 |
140 |
144 Keywords: |
141 :param string apikey: Der API Key |
145 apikey[string]: Der API Key |
142 :param string typ: Der Typ zu dem die Providerliste ausgeben werden soll |
146 typ[string]: Der Typ zu dem die Providerliste ausgeben werden soll |
|
147 Einer der Liste ["sms","fax","mail"] |
143 Einer der Liste ["sms","fax","mail"] |
148 |
144 |
149 Return: |
145 :return string: Der Standardprovider für den angeben Typ |
150 provider[string]: Der Standardprovider für den angeben Typ |
|
151 |
|
152 |
|
153 ''' |
146 ''' |
154 user = session.merge(user) |
147 user = session.merge(user) |
155 offers = user.routes(typ, default=True) |
148 offers = user.routes(typ, default=True) |
156 return [u[0] for u in offers] |
149 return [u[0] for u in offers] |
157 |
150 |
158 @vUser |
151 @vUser |
159 @dbdefer |
152 @dbdefer |
160 def bill(self, session, user): |
153 def bill(self, session, user): |
161 '''Gibt eine Rechnung zurück über die noch nicht abgerechneten Nachrichten und des Preises. |
154 '''Gibt eine Rechnung zurück über die noch nicht abgerechneten Nachrichten und des Preises. |
162 |
155 |
163 Keywords: |
156 :param string apikey: Der API Key |
164 apikey[string]: Der API Key |
157 |
165 |
158 :return dict: |
166 Return: |
159 - `route` -- Entspricht einer Route; **"total"** für die Gesammtübersicht |
167 bills[dict]: Eine Liste nach Nachrichtentypen |
160 - [`route`][`info`][**anz**] -- Anzahl der verschickten Nachrichten pro "Infoklasse" |
168 bill[route][info].anz: Anzahl der verschickten Nachrichten pro "Infoklasse" |
161 - [`route`][`info`][**price**] -- Preis pro "Infoklasse" |
169 bill[route][info].price: Preis pro "Infoklasse" |
162 - [`route` | **total**][**anz**] -- Anzahl der verschickten Nachrichten pro Route |
170 bill[route].anz: Anzahl der verschickten Nachrichten pro Route |
163 - [`route` | **total**][**price**] -- Preis für eine Route |
171 bill[route].price: Preis für eine Route |
164 |
172 total.price: der Gesammtpreis |
165 >>> bill(APIKEY) |
173 total.anz: die Gesammtanzahl |
166 {"route1": {"info1":{"anz":1,"price":2.00}, |
|
167 "info2":{"anz":2,"price":5.00}, |
|
168 "anz":3,"price":7.00}, |
|
169 "route2": {"info1":{"anz":3, "price":1.00}, |
|
170 "info3":{"anz":4, "price":8.00}, |
|
171 "anz":7, "price":9.00}, |
|
172 "total": {"anz":10, "price":16.00} |
|
173 } |
|
174 |
174 ''' |
175 ''' |
175 ret={'total':{'price':0, 'anz':0}} |
176 ret={'total':{'price':0, 'anz':0}} |
176 user=session.merge(user) |
177 user=session.merge(user) |
177 for route in user.rights: |
178 for route in user.rights: |
178 n=route.offer_name |
179 n=route.offer_name |
190 |
191 |
191 @validate(kwd="recipients",func=vTel) |
192 @validate(kwd="recipients",func=vTel) |
192 def telnumber(self,recipients): |
193 def telnumber(self,recipients): |
193 '''Gibt True zurück, falls alle übergebene Telefonnummern valide sind. |
194 '''Gibt True zurück, falls alle übergebene Telefonnummern valide sind. |
194 |
195 |
195 Keywords: |
196 :param list recipients: Eine Liste von Emfänger-Nummern (gemäß ITU-T E.123) |
196 recipients[list]: Eine Liste von Emfänger-Nummern (gemäß ITU-T E.123) |
197 |
197 |
198 :return: True -- alle übergebene Nummern sind valide |
198 Return: |
|
199 True: alle übergebene Nummern sind valide |
|
200 ''' |
199 ''' |
201 return True |
200 return True |
202 |
201 |
203 @validate(kwd="recipients",func=vEmail) |
202 @validate(kwd="recipients",func=vEmail) |
204 def email(self,recipients): |
203 def email(self,recipients): |
205 '''Gibt True zurück, falls alle übergebene Emailadressen valide sind. |
204 '''Gibt True zurück, falls alle übergebene Emailadressen valide sind. |
206 |
205 |
207 Keywords: |
206 :param list recipients: Eine Liste von Emailadressen |
208 recipients[list]: Eine Liste von Emailadressen |
207 |
209 |
208 :return: True -- alle übergebene Nummern sind valide |
210 Return: |
|
211 True: alle übergebene Nummern sind valide |
|
212 ''' |
209 ''' |
213 return True |
210 return True |