1# pylint:disable=unused-import 2from ..models import DbCFGModel, DbKnowledgeBase 3from ...knowledge_plugins.cfg.cfg_model import CFGModel 4 5 6class CFGModelSerializer: 7 """ 8 Serialize/unserialize a CFGModel. 9 """ 10 11 @staticmethod 12 def dump(session, db_kb, ident, cfg_model): 13 """ 14 15 :param session: 16 :param DbKnowledgeBase db_kb: The database object for KnowledgeBase. 17 :param str ident: Identifier of the CFG model. 18 :param CFGModel cfg_model: The CFG model to dump. 19 :return: None 20 """ 21 22 db_cfg_id = session.query(DbCFGModel.id).filter_by(ident=ident).scalar() 23 if db_cfg_id is not None: 24 # remove the existing CFG 25 session.query(DbCFGModel).filter_by(id=db_cfg_id).delete() 26 27 db_cfg = DbCFGModel( 28 kb=db_kb, 29 ident=ident, 30 blob=cfg_model.serialize(), 31 ) 32 session.add(db_cfg) 33 34 @staticmethod 35 def load(session, db_kb, ident, cfg_manager, loader=None): 36 37 db_cfg = session.query(DbCFGModel).filter_by(kb=db_kb, ident=ident).scalar() # type: DbCFGModel 38 if db_cfg is None: 39 return None 40 41 cfg_model = CFGModel.parse(db_cfg.blob, cfg_manager=cfg_manager, loader=loader) 42 return cfg_model 43