|
|
@@ -19,8 +19,6 @@ from urllib.parse import urlparse
|
|
19
|
19
|
import tg
|
|
20
|
20
|
from paste.deploy.converters import asbool
|
|
21
|
21
|
from tg.configuration.milestones import environment_loaded
|
|
22
|
|
-from tgext.asyncjob.trackers.memory import MemoryProgressTracker
|
|
23
|
|
-from tgext.asyncjob.trackers.redisdb import RedisProgressTracker
|
|
24
|
22
|
|
|
25
|
23
|
from tgext.pluggable import plug
|
|
26
|
24
|
from tgext.pluggable import replace_template
|
|
|
@@ -30,10 +28,9 @@ from tracim.lib.utils import lazy_ugettext as l_
|
|
30
|
28
|
import tracim
|
|
31
|
29
|
from tracim import model
|
|
32
|
30
|
from tracim.config import TracimAppConfig
|
|
33
|
|
-from tracim.lib import app_globals, helpers
|
|
34
|
|
-from tracim.lib.auth.wrapper import AuthConfigWrapper
|
|
35
|
31
|
from tracim.lib.base import logger
|
|
36
|
32
|
from tracim.lib.daemons import DaemonsManager
|
|
|
33
|
+from tracim.lib.daemons import MailSenderDaemon
|
|
37
|
34
|
from tracim.lib.daemons import RadicaleDaemon
|
|
38
|
35
|
from tracim.lib.daemons import WsgiDavDaemon
|
|
39
|
36
|
from tracim.model.data import ActionDescription
|
|
|
@@ -106,6 +103,7 @@ def start_daemons(manager: DaemonsManager):
|
|
106
|
103
|
|
|
107
|
104
|
manager.run('radicale', RadicaleDaemon)
|
|
108
|
105
|
manager.run('webdav', WsgiDavDaemon)
|
|
|
106
|
+ manager.run('mail_sender', MailSenderDaemon)
|
|
109
|
107
|
|
|
110
|
108
|
environment_loaded.register(lambda: start_daemons(daemons))
|
|
111
|
109
|
|
|
|
@@ -341,32 +339,36 @@ class CFG(object):
|
|
341
|
339
|
if not self.WSGIDAV_CLIENT_BASE_URL.endswith('/'):
|
|
342
|
340
|
self.WSGIDAV_CLIENT_BASE_URL += '/'
|
|
343
|
341
|
|
|
344
|
|
- self.ASYNC_JOB_TRACKER = tg.config.get(
|
|
345
|
|
- 'asyncjob.tracker',
|
|
346
|
|
- 'memory',
|
|
347
|
|
- )
|
|
|
342
|
+ self.EMAIL_PROCESSING_MODE = tg.config.get(
|
|
|
343
|
+ 'email.processing_mode',
|
|
|
344
|
+ 'sync',
|
|
|
345
|
+ ).upper()
|
|
348
|
346
|
|
|
349
|
|
- if self.ASYNC_JOB_TRACKER not in ('memory', 'redis'):
|
|
|
347
|
+ if self.EMAIL_PROCESSING_MODE not in (
|
|
|
348
|
+ self.CST.ASYNC,
|
|
|
349
|
+ self.CST.SYNC,
|
|
|
350
|
+ ):
|
|
350
|
351
|
raise Exception(
|
|
351
|
|
- 'asyncjob.tracker configuration '
|
|
352
|
|
- 'can ''be "memory" or "redis", not "{0}"'.format(
|
|
353
|
|
- self.ASYNC_JOB_TRACKER,
|
|
|
352
|
+ 'email.processing_mode '
|
|
|
353
|
+ 'can ''be "{}" or "{}", not "{}"'.format(
|
|
|
354
|
+ self.CST.ASYNC,
|
|
|
355
|
+ self.CST.SYNC,
|
|
|
356
|
+ self.EMAIL_PROCESSING_MODE,
|
|
354
|
357
|
)
|
|
355
|
358
|
)
|
|
356
|
359
|
|
|
357
|
|
- if self.ASYNC_JOB_TRACKER == 'redis':
|
|
358
|
|
- self.ASYNC_JOB_TRACKER_REDIS_HOST = tg.config.get(
|
|
359
|
|
- 'asyncjob.tracker.redis.host',
|
|
360
|
|
- 'localhost',
|
|
361
|
|
- )
|
|
362
|
|
- self.ASYNC_JOB_TRACKER_REDIS_PORT = int(tg.config.get(
|
|
363
|
|
- 'asyncjob.tracker.redis.port',
|
|
364
|
|
- 6379,
|
|
365
|
|
- ))
|
|
366
|
|
- self.ASYNC_JOB_TRACKER_REDIS_DB = int(tg.config.get(
|
|
367
|
|
- 'asyncjob.tracker.redis.db',
|
|
368
|
|
- 15,
|
|
369
|
|
- ))
|
|
|
360
|
+ self.EMAIL_SENDER_REDIS_HOST = tg.config.get(
|
|
|
361
|
+ 'email.async.redis.host',
|
|
|
362
|
+ 'localhost',
|
|
|
363
|
+ )
|
|
|
364
|
+ self.EMAIL_SENDER_REDIS_PORT = int(tg.config.get(
|
|
|
365
|
+ 'email.async.redis.port',
|
|
|
366
|
+ 6379,
|
|
|
367
|
+ ))
|
|
|
368
|
+ self.EMAIL_SENDER_REDIS_DB = int(tg.config.get(
|
|
|
369
|
+ 'email.async.redis.db',
|
|
|
370
|
+ 0,
|
|
|
371
|
+ ))
|
|
370
|
372
|
|
|
371
|
373
|
def get_tracker_js_content(self, js_tracker_file_path = None):
|
|
372
|
374
|
js_tracker_file_path = tg.config.get('js_tracker_path', None)
|
|
|
@@ -408,30 +410,3 @@ class CFG(object):
|
|
408
|
410
|
base_config.variable_provider = lambda: {
|
|
409
|
411
|
'CFG': CFG.get_instance()
|
|
410
|
412
|
}
|
|
411
|
|
-
|
|
412
|
|
-
|
|
413
|
|
-def plug_asyncjob():
|
|
414
|
|
- cfg = CFG.get_instance()
|
|
415
|
|
-
|
|
416
|
|
- # # Manual creation of async job tracker to be able to log it
|
|
417
|
|
- async_job_tracker = cfg.ASYNC_JOB_TRACKER
|
|
418
|
|
- if async_job_tracker == 'redis':
|
|
419
|
|
- async_job_progress_tracker = RedisProgressTracker(
|
|
420
|
|
- host=cfg.ASYNC_JOB_TRACKER_REDIS_HOST,
|
|
421
|
|
- port=cfg.ASYNC_JOB_TRACKER_REDIS_PORT,
|
|
422
|
|
- db=cfg.ASYNC_JOB_TRACKER_REDIS_DB,
|
|
423
|
|
- )
|
|
424
|
|
- else:
|
|
425
|
|
- async_job_progress_tracker = MemoryProgressTracker()
|
|
426
|
|
-
|
|
427
|
|
- logger.info(
|
|
428
|
|
- cfg,
|
|
429
|
|
- 'Async job track using {0}'.format(str(async_job_progress_tracker)),
|
|
430
|
|
- )
|
|
431
|
|
- plug(
|
|
432
|
|
- base_config,
|
|
433
|
|
- 'tgext.asyncjob',
|
|
434
|
|
- progress_tracker=async_job_progress_tracker,
|
|
435
|
|
- )
|
|
436
|
|
-
|
|
437
|
|
-environment_loaded.register(lambda: plug_asyncjob())
|