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