1# pylint:disable=unused-import
2from ..models import DbKnowledgeBase, DbXRefs
3from ...knowledge_plugins.xrefs import XRefManager
4from ...knowledge_plugins.cfg import CFGModel
5from ...knowledge_base import KnowledgeBase
6
7
8class XRefsSerializer:
9    """
10    Serialize/unserialize an XRefs object to/from a database session.
11    """
12
13    @staticmethod
14    def dump(session, db_kb, xrefs):
15        """
16
17        :param session:
18        :param DbKnowledgeBase db_kb:
19        :param XRefManager xrefs:
20        :return:
21        """
22
23        db_xrefs = db_kb.xrefs
24
25        blob = xrefs.serialize()
26        if db_xrefs is not None:
27            # update the existing xrefs
28            db_xrefs.blob = blob
29        else:
30            # create a new xrefs
31            db_xrefs = DbXRefs(kb=db_kb, blob=blob)
32            session.add(db_xrefs)
33
34    @staticmethod
35    def load(session, db_kb, kb, cfg_model=None):  # pylint:disable=unused-argument
36        """
37
38        :param session:
39        :param DbKnowledgeBase db_kb:
40        :param KnowledgeBase kb:
41        :param CFGModel cfg_model:
42        :return:
43        """
44
45        db_xrefs = db_kb.xrefs
46        if db_xrefs is None:
47            return None
48
49        xrefs = XRefManager.parse(db_xrefs.blob, cfg_model=cfg_model, kb=kb)
50        return xrefs
51