3232import logging
3333
3434from functools import reduce
35+ from powerapi .exception import PowerAPIException
3536from powerapi .cli .parser import MainParser , ComponentSubParser
3637from powerapi .cli .parser import store_true
3738from powerapi .cli .parser import BadValueException , MissingValueException
@@ -186,6 +187,20 @@ def _gen_actor(self, component_name, component_config, main_config):
186187 raise NotImplementedError ()
187188
188189
190+ class ModelNameAlreadyUsed (PowerAPIException ):
191+ """
192+ Exception raised when attempting to add to a DBActorGenerator a model factory with a name already bound to another
193+ model factory in the DBActorGenerator
194+ """
195+
196+
197+ class ModelNameAlreadyUsed (PowerAPIException ):
198+ """
199+ Exception raised when attempting to add to a DBActorGenerator a database factory with a name already bound to another
200+ database factory in the DBActorGenerator
201+ """
202+
203+
189204class DBActorGenerator (Generator ):
190205
191206 def __init__ (self , component_group_name ):
@@ -203,6 +218,16 @@ def __init__(self, component_group_name):
203218 'opentsdb' : lambda db_config : OpenTSDB (db_config ['uri' ], db_config ['port' ], db_config ['metric_name' ]),
204219 }
205220
221+ def add_model_factory (self , model_name , model_factory ):
222+ if model_name in self .model_factory :
223+ raise ModelNameAlreadyUsed ()
224+ self .model_factory [model_name ] = model_factory
225+
226+ def add_db_factory (self , db_name , db_factory ):
227+ if db_name in self .model_factory :
228+ raise ModelNameAlreadyUsed ()
229+ self .model_factory [db_name ] = db_factory
230+
206231 def _generate_db (self , db_name , db_config , main_config ):
207232 return self .db_factory [db_name ](db_config )
208233
0 commit comments