|
@@ -16,9 +16,9 @@ import requests
|
16
|
16
|
from bs4 import BeautifulSoup
|
17
|
17
|
from email_reply_parser import EmailReplyParser
|
18
|
18
|
|
|
19
|
+from tracim.lib.base import logger
|
19
|
20
|
from tracim.controllers.events import VALID_TOKEN_VALUE
|
20
|
21
|
|
21
|
|
-
|
22
|
22
|
TRACIM_SPECIAL_KEY_HEADER = "X-Tracim-Key"
|
23
|
23
|
BS_HTML_BODY_PARSE_CONFIG = {
|
24
|
24
|
'tag_blacklist': ["script", "style", "blockquote"],
|
|
@@ -258,6 +258,7 @@ class MailFetcher(object):
|
258
|
258
|
logger.debug(self, log.format(str(rv)))
|
259
|
259
|
|
260
|
260
|
def _notify_tracim(self) -> None:
|
|
261
|
+ unsended_mail = []
|
261
|
262
|
while self._mails:
|
262
|
263
|
mail = self._mails.pop()
|
263
|
264
|
msg = {"token": VALID_TOKEN_VALUE,
|
|
@@ -266,6 +267,30 @@ class MailFetcher(object):
|
266
|
267
|
"payload": {
|
267
|
268
|
"content": mail.get_body(),
|
268
|
269
|
}}
|
269
|
|
- # FIXME - G.M - 2017-11-15 - Catch exception from http request
|
270
|
|
- requests.post(self.endpoint, json=msg)
|
271
|
|
- pass
|
|
270
|
+ try:
|
|
271
|
+ r = requests.post(self.endpoint, json=msg)
|
|
272
|
+ response = r.json()
|
|
273
|
+ if not 'status' in response:
|
|
274
|
+ log = 'bad response: {}'
|
|
275
|
+ logger.error(self, log.format(str(response)))
|
|
276
|
+ else:
|
|
277
|
+ if response['status'] == 'ok':
|
|
278
|
+ pass
|
|
279
|
+ elif response['status'] == 'error' and 'error' in response:
|
|
280
|
+ log = 'error with email: {}'
|
|
281
|
+ logger.error(self, log.format(str(response['error'])))
|
|
282
|
+ else:
|
|
283
|
+ log = 'Unknown error with email'
|
|
284
|
+ # TODO - G.M - Verify exception correctly works
|
|
285
|
+ except requests.exceptions.Timeout:
|
|
286
|
+ log = 'Timeout error to transmit fetched mail to tracim : {}'
|
|
287
|
+ logger.error(self, log.format(str(e)))
|
|
288
|
+ unsended_mail.append(mail)
|
|
289
|
+ break
|
|
290
|
+ except requests.exceptions.RequestException as e:
|
|
291
|
+ log = 'Fail to transmit fetched mail to tracim : {}'
|
|
292
|
+ logger.error(self, log.format(str(e)))
|
|
293
|
+ break
|
|
294
|
+ # FIXME - G.M - 2017-11-17 Avoid too short-timed infinite retry ?
|
|
295
|
+ # retry later to send those mail
|
|
296
|
+ self._mails = unsended_mail
|