5
5
from os import environ as env
6
6
7
7
import pika
8
+ import yaml
9
+ import trafaret as T
8
10
11
+
12
+ # TODO: adapt all data below!
13
+ # TODO: can use venv as defaults? e.g. $RABBITMQ_LOG_CHANNEL
14
+ CONFIG_SCHEMA = T .Dict ({
15
+ T .Key ("host" , default = 'rabbit' , optional = True ): T .String (),
16
+ T .Key ("port" , default = 5672 , optional = True ): T .Int (),
17
+ "user" : T .String (),
18
+ "password" : T .String (),
19
+ "channels" : T .Dict ({
20
+ "progress" : T .String (),
21
+ "log" : T .String (),
22
+ T .Key ("celery" , default = dict (result_backend = "rpc://" ), optional = True ): T .Dict ({
23
+ T .Key ("result_backend" , default = "${CELERY_RESULT_BACKEND}" , optional = True ): T .String ()
24
+ })
25
+ })
26
+ })
27
+
28
+
29
+ CONFIG_EXAMPLES = map (yaml .load ,[
30
+ """
31
+ user: simcore
32
+ password: simcore
33
+ channels:
34
+ log: comp.backend.channels.log
35
+ progress: comp.backend.channels.progress
36
+ """ ,
37
+ """
38
+ host: rabbito
39
+ port: 1234
40
+ user: foo
41
+ password: secret
42
+ channels:
43
+ log: comp.backend.channels.log
44
+ progress: comp.backend.channels.progress
45
+ """ ,
46
+ """
47
+ user: bar
48
+ password: secret
49
+ channels:
50
+ log: comp.backend.channels.log
51
+ progress: comp.backend.channels.progress
52
+ celery:
53
+ result_backend: 'rpc://'
54
+ """ ])
55
+
56
+
57
+ def eval_broker (config ):
58
+ """
59
+ Raises trafaret.DataError if config validation fails
60
+ """
61
+ CONFIG_SCHEMA .check (config ) # raise exception
62
+ url = 'amqp://{user}:{password}@{host}:{port}' .format (** config )
63
+ return url
64
+
65
+
66
+ # TODO: deprecate! -----------------------------------------------------------------------------
67
+ # TODO: uniform config classes . see server.config file
9
68
RABBITMQ_USER = env .get ('RABBITMQ_USER' ,'simcore' )
10
69
RABBITMQ_PASSWORD = env .get ('RABBITMQ_PASSWORD' ,'simcore' )
11
70
RABBITMQ_HOST = "rabbit"
17
76
18
77
CELERY_BROKER_URL = AMQ_URL
19
78
CELERY_RESULT_BACKEND = env .get ('CELERY_RESULT_BACKEND' ,'rpc://' )
79
+ # -------------------------------------
20
80
21
- class Config ():
22
- def __init__ (self ):
81
+ class Config :
82
+ def __init__ (self , config = None ):
83
+ if config is not None :
84
+ CONFIG_SCHEMA .check (config ) # raise exception
85
+ else :
86
+ config = {}
87
+
88
+ # FIXME: get variables via config.get('') or
23
89
# rabbit
24
- self ._broker_url = CELERY_BROKER_URL
25
- self ._result_backend = CELERY_RESULT_BACKEND
90
+ try :
91
+ self ._broker_url = eval_broker (config )
92
+ except : # pylint: disable=W0702
93
+ self ._broker_url = CELERY_BROKER_URL
94
+
95
+ self ._result_backend = config .get ("celery" , {}).get ("result_backend" ) or CELERY_RESULT_BACKEND
26
96
self ._module_name = "tasks"
27
97
28
98
# pika
29
- self ._pika_credentials = pika .PlainCredentials (RABBITMQ_USER , RABBITMQ_PASSWORD )
30
- self ._pika_parameters = pika .ConnectionParameters (host = RABBITMQ_HOST ,
31
- port = RABBITMQ_PORT , credentials = self ._pika_credentials , connection_attempts = 100 )
99
+ self ._pika_credentials = pika .PlainCredentials (
100
+ config .get ("user" ) or RABBITMQ_USER ,
101
+ config .get ("password" ) or RABBITMQ_PASSWORD )
102
+ self ._pika_parameters = pika .ConnectionParameters (
103
+ host = config .get ("host" ) or RABBITMQ_HOST ,
104
+ port = config .get ("port" ) or RABBITMQ_PORT ,
105
+ credentials = self ._pika_credentials ,
106
+ connection_attempts = 100 )
32
107
33
- self ._log_channel = RABBITMQ_LOG_CHANNEL
34
- self ._progress_channel = RABBITMQ_PROGRESS_CHANNEL
108
+ self ._log_channel = config . get ( "celery" , {}). get ( "result_backend" ) or RABBITMQ_LOG_CHANNEL
109
+ self ._progress_channel = config . get ( "celery" , {}). get ( "result_backend" ) or RABBITMQ_PROGRESS_CHANNEL
35
110
36
111
@property
37
112
def parameters (self ):
@@ -44,7 +119,7 @@ def log_channel(self):
44
119
@property
45
120
def progress_channel (self ):
46
121
return self ._progress_channel
47
-
122
+
48
123
@property
49
124
def broker (self ):
50
125
return self ._broker_url
@@ -55,4 +130,4 @@ def backend(self):
55
130
56
131
@property
57
132
def name (self ):
58
- return self ._module_name
133
+ return self ._module_name
0 commit comments