Example #1
0
    def clear(self):
        # trigger event before clear
        self.eventsManager.fire(EventsManager.E_NETWORK_CLEAR_PRE, self)

        # retract all facts
        try:
            for wme in self.facts:
                self.retractFact(wme)
        except:
            traceback.print_exc()
            raise

        # destroy the network
        for rule in self._rules.keys():
            self._rules[rule].delete()
            del self._rules[rule]

        # close all pending resources
        for (name, res) in self._resources.items():
            if not self._init_resources.has_key(name) and hasattr(
                    res, "close"):
                res.close()

        # and reset the resources map
        self._resources = self._init_resources

        # renew the root node
        self._root = RootNode(self)

        # renew agenda and maps
        self._agenda = Agenda(self)
        self._rules = {}
        self._facts = {}
        self._factsWmeMap = {}
        self._currentWmeId = 0
        self._linkedParser = None
        self._deffacts = {}

        # destoy MM
        self._modulesManager = ModulesManager()
        self._modulesManager.addMainScope()

        try:
            # assert the first fact: initial-fact
            self.assertFact(
                TemplateFact(values={},
                             templateName="initial-fact",
                             moduleName="MAIN"))
        except:
            import myclips
            myclips.logger.warning("initial-fact redefinition")

        # notify completed clear operation
        self.eventsManager.fire(EventsManager.E_NETWORK_CLEAR_POST, self)

        # detach all listeners after the CLEAR_POST events
        self.eventsManager.unregisterObserver()

        # for behavioural consistency, notify root creation
        self.eventsManager.fire(EventsManager.E_NODE_ADDED, self._root)
Example #2
0
    def __init__(self,
                 eventsManager=None,
                 modulesManager=None,
                 resources=None,
                 settings=None):
        '''
        Constructor
        '''
        #self._eventsManager = eventsManager if eventsManager is not None else EventsManager.default
        self._eventsManager = eventsManager if eventsManager is not None else EventsManager(
        )
        # if a custom modules manager is not submitted, a new default one (with MAIN scope) is used
        if modulesManager is None:
            modulesManager = ModulesManager()
            modulesManager.addMainScope()

        self._modulesManager = modulesManager
        self._root = RootNode(self)
        self.eventsManager.fire(EventsManager.E_NODE_ADDED, self._root)

        self._agenda = Agenda(self)
        self._rules = {}
        self._facts = {}
        self._factsWmeMap = {}
        self._currentWmeId = 0
        self._linkedParser = None
        self._deffacts = {}
        self._settings = settings or Settings()

        self._resources = resources or {
            "stdin": sys.stdin,
            "stdout": sys.stdout
        }

        self._resources.setdefault("stdout", sys.stdout)
        s = self._resources["stdout"]
        self._resources.setdefault("stdin", sys.stdin)
        self._resources.setdefault("t", s)
        self._resources.setdefault("wclips", s)
        self._resources.setdefault("wdialog", s)
        self._resources.setdefault("wdisplay", s)
        self._resources.setdefault("werror", s)
        self._resources.setdefault("wwarning", s)
        self._resources.setdefault("wtrace", s)

        self._init_resources = self._resources

        try:
            # assert the first fact: initial-fact
            self.assertFact(TemplateFact("initial-fact", {}, "MAIN"))
        except:
            import myclips
            myclips.logger.warning("initial-fact redefinition")
            raise