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)
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