Пример #1
0
    def test_ImportAListOfConstructsIsPossible(self):
        MM = ModulesManager()
        scopeM = Scope("MAIN",
                       MM,
                       exports=[
                           ScopeExport(Scope.PROMISE_TYPE_GLOBAL,
                                       ["?*a*", "?*b*", "?*c*"])
                       ])

        scopeM.globalsvars.addDefinition(
            GlobalVarDefinition(scopeM.moduleName, "?*a*", object()))
        scopeM.globalsvars.addDefinition(
            GlobalVarDefinition(scopeM.moduleName, "?*b*", object()))
        scopeM.globalsvars.addDefinition(
            GlobalVarDefinition(scopeM.moduleName, "?*c*", object()))

        scope1 = Scope("FIRST",
                       MM,
                       imports=[
                           ScopeImport("MAIN", Scope.PROMISE_TYPE_GLOBAL,
                                       ["?*a*", "?*b*"])
                       ])

        self.assertTrue(scope1.globalsvars.has("?*a*"))
        self.assertTrue(scope1.globalsvars.has("?*b*"))
        self.assertFalse(scope1.globalsvars.has("?*c*"))
Пример #2
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)
Пример #3
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
Пример #4
0
    def test_ErrorOnInclusionOfNotDefinedModule(self):

        MM = ModulesManager()
        self.assertRaises(ScopeDefinitionNotFound,
                          Scope,
                          "MAIN",
                          MM,
                          imports=[
                              ScopeImport("FIRST", Scope.PROMISE_NAME_ALL,
                                          Scope.PROMISE_NAME_ALL)
                          ])
Пример #5
0
    def test_GuardOnRecursiveInclusion(self):

        MM = ModulesManager()

        scopeM = Scope("MAIN",
                       MM,
                       exports=[
                           ScopeExport(Scope.PROMISE_NAME_ALL,
                                       Scope.PROMISE_NAME_ALL)
                       ])

        scope1 = Scope("FIRST",
                       MM,
                       exports=[
                           ScopeExport(Scope.PROMISE_NAME_ALL,
                                       Scope.PROMISE_NAME_ALL)
                       ],
                       imports=[
                           ScopeImport("MAIN", Scope.PROMISE_NAME_ALL,
                                       Scope.PROMISE_NAME_ALL),
                       ])

        scope2 = Scope("SECOND",
                       MM,
                       exports=[
                           ScopeExport(Scope.PROMISE_NAME_ALL,
                                       Scope.PROMISE_NAME_ALL)
                       ],
                       imports=[
                           ScopeImport("MAIN", Scope.PROMISE_NAME_ALL,
                                       Scope.PROMISE_NAME_ALL),
                           ScopeImport("FIRST", Scope.PROMISE_NAME_ALL,
                                       Scope.PROMISE_NAME_ALL)
                       ])

        scopeM.globalsvars.addDefinition(
            GlobalVarDefinition(scopeM.moduleName, "?*A*", object()))

        self.assertTrue(scopeM.globalsvars.has("?*A*"))
        self.assertTrue(scope1.globalsvars.has("?*A*"))
        self.assertTrue(scope2.globalsvars.has("?*A*"))
        self.assertEqual(
            scopeM.globalsvars.getDefinition("?*A*").moduleName, "MAIN")
        self.assertEqual(
            scope1.globalsvars.getDefinition("?*A*").moduleName, "MAIN")
        self.assertEqual(
            scope2.globalsvars.getDefinition("?*A*").moduleName, "MAIN")
        self.assertEqual(scopeM.globalsvars.getDefinition("?*A*"),
                         scope1.globalsvars.getDefinition("?*A*"))
        self.assertEqual(scopeM.globalsvars.getDefinition("?*A*"),
                         scope2.globalsvars.getDefinition("?*A*"))
        self.assertEqual(scope1.globalsvars.getDefinition("?*A*"),
                         scope2.globalsvars.getDefinition("?*A*"))
Пример #6
0
    def test_ExportAListOfConstructsIsPossible(self):
        scope = Scope("MAIN",
                      ModulesManager(),
                      exports=[
                          ScopeExport(Scope.PROMISE_TYPE_GLOBAL,
                                      ["?*a*", "?*b*", "?*c*"])
                      ])

        self.assertTrue(scope.isImportable(Scope.PROMISE_TYPE_GLOBAL, "?*a*"))
        self.assertTrue(scope.isImportable(Scope.PROMISE_TYPE_GLOBAL, "?*b*"))
        self.assertTrue(scope.isImportable(Scope.PROMISE_TYPE_GLOBAL, "?*c*"))
        self.assertFalse(
            scope.isImportable(Scope.PROMISE_TYPE_GLOBAL, "?*unknown*"))
Пример #7
0
    def test_ExportEverythingIsImportableAlways(self):
        scope = Scope("MAIN",
                      ModulesManager(),
                      exports=[
                          ScopeExport(Scope.PROMISE_NAME_ALL,
                                      Scope.PROMISE_NAME_ALL),
                      ])

        self.assertTrue(
            scope.isImportable(Scope.PROMISE_TYPE_TEMPLATE, "template"))
        self.assertTrue(
            scope.isImportable(Scope.PROMISE_TYPE_FUNCTION, "function"))
        self.assertTrue(
            scope.isImportable(Scope.PROMISE_TYPE_GLOBAL, "*global*"))
Пример #8
0
    def test_ExportedDefinitionIsImportable(self):
        scope = Scope("MAIN",
                      ModulesManager(),
                      exports=[
                          ScopeExport(Scope.PROMISE_TYPE_TEMPLATE, 'template'),
                          ScopeExport(Scope.PROMISE_TYPE_FUNCTION, 'function'),
                          ScopeExport(Scope.PROMISE_TYPE_GLOBAL, '*global*')
                      ])

        self.assertTrue(
            scope.isImportable(Scope.PROMISE_TYPE_TEMPLATE, "template"))
        self.assertTrue(
            scope.isImportable(Scope.PROMISE_TYPE_FUNCTION, "function"))
        self.assertTrue(
            scope.isImportable(Scope.PROMISE_TYPE_GLOBAL, "*global*"))
Пример #9
0
    def test_ListenerCleanupOnScopeCreationFail(self):

        MM = ModulesManager()

        scopeM = Scope("MAIN",
                       MM,
                       exports=[
                           ScopeExport(Scope.PROMISE_NAME_ALL,
                                       Scope.PROMISE_NAME_ALL)
                       ])

        scopeM.globalsvars.addDefinition(
            GlobalVarDefinition(scopeM.moduleName, "?*A*", object()))

        scope1 = Scope("FIRST",
                       MM,
                       exports=[
                           ScopeExport(Scope.PROMISE_NAME_ALL,
                                       Scope.PROMISE_NAME_ALL)
                       ])

        scope1.globalsvars.addDefinition(
            GlobalVarDefinition(scope1.moduleName, "?*A*", object()))

        self.assertRaises(ScopeDefinitionConflict,
                          Scope,
                          "SECOND",
                          MM,
                          exports=[
                              ScopeExport(Scope.PROMISE_NAME_ALL,
                                          Scope.PROMISE_NAME_ALL)
                          ],
                          imports=[
                              ScopeImport("MAIN", Scope.PROMISE_NAME_ALL,
                                          Scope.PROMISE_NAME_ALL),
                              ScopeImport("FIRST", Scope.PROMISE_NAME_ALL,
                                          Scope.PROMISE_NAME_ALL)
                          ])

        self.assertEqual(
            len(
                scope1.globalsvars.getObservers(
                    scope1.globalsvars.EVENT_NEW_DEFINITION)), 0)
        self.assertEqual(
            len(
                scopeM.globalsvars.getObservers(
                    scopeM.globalsvars.EVENT_NEW_DEFINITION)), 0)
Пример #10
0
    def test_ExportNoneForATypeRemoveEverythingForTheTypeIfPreviousExportEverythingExists(
            self):
        scope = Scope("MAIN",
                      ModulesManager(),
                      exports=[
                          ScopeExport(Scope.PROMISE_NAME_ALL,
                                      Scope.PROMISE_NAME_ALL),
                          ScopeExport(Scope.PROMISE_TYPE_GLOBAL,
                                      Scope.PROMISE_NAME_NONE)
                      ])

        self.assertTrue(
            scope.isImportable(Scope.PROMISE_TYPE_TEMPLATE, "template"))
        self.assertTrue(
            scope.isImportable(Scope.PROMISE_TYPE_FUNCTION, "function"))
        self.assertFalse(
            scope.isImportable(Scope.PROMISE_TYPE_GLOBAL, "*global*"))
Пример #11
0
    def test_ExportNoneRemoveEverything(self):
        scope = Scope("MAIN",
                      ModulesManager(),
                      exports=[
                          ScopeExport(Scope.PROMISE_TYPE_TEMPLATE, 'template'),
                          ScopeExport(Scope.PROMISE_TYPE_FUNCTION, 'function'),
                          ScopeExport(Scope.PROMISE_TYPE_GLOBAL, '*global*'),
                          ScopeExport(Scope.PROMISE_NAME_NONE,
                                      Scope.PROMISE_NAME_NONE)
                      ])

        self.assertFalse(
            scope.isImportable(Scope.PROMISE_TYPE_TEMPLATE, "template"))
        self.assertFalse(
            scope.isImportable(Scope.PROMISE_TYPE_FUNCTION, "function"))
        self.assertFalse(
            scope.isImportable(Scope.PROMISE_TYPE_GLOBAL, "*global*"))
Пример #12
0
 def __init__(self, debug=False, enableComments=True, enableDirectives=True, modulesManager=None):
     
     self.subparsers = {}
     self._initied = False
     self._debug = debug
     #self._debug = True
     self._enableComments = enableComments
     self._enableDirectives = enableDirectives
     self._modulesManager = (ModulesManager()
                                 if not isinstance(modulesManager, ModulesManager)
                                     else modulesManager)
     self._lastParseError = None
     # need to check if ModulesManager is ready to 
     # to get all construct. This means at least a 
     # scope must be available
     if len(self._modulesManager.getModulesNames()) == 0:
         self._modulesManager.addMainScope()
Пример #13
0
    def test_ImportDefinitionFromAnotherScopeWithObserver(self):
        MM = ModulesManager()

        scope1 = Scope("MAIN",
                       MM,
                       exports=[
                           ScopeExport(Scope.PROMISE_NAME_ALL,
                                       Scope.PROMISE_NAME_ALL)
                       ])

        scope2 = Scope("SECOND",
                       MM,
                       imports=[
                           ScopeImport("MAIN", Scope.PROMISE_NAME_ALL,
                                       Scope.PROMISE_NAME_ALL)
                       ])

        scope1.globalsvars.addDefinition(
            GlobalVarDefinition(scope1.moduleName, "?*A*", object()))

        self.assertTrue(scope2.globalsvars.has("?*A*"))
        self.assertEqual(
            scope2.globalsvars.getDefinition("?*A*").moduleName, "MAIN")
Пример #14
0
 def setUp(self):
     self.MM = ModulesManager()
     self.MM.addMainScope()
     self.network = Network(eventsManager=EventsManager(),modulesManager=self.MM)
 def setUp(self):
     self.MM = ModulesManager()
     self.MM.addMainScope()
     self.scope = self.MM.currentScope
Пример #16
0
 def setUp(self):
     unittest.TestCase.setUp(self)
     self.MM = ModulesManager()
Пример #17
0
                        else:
                            funcList.extend(funcListInside)
                else:
                    try:
                        funcInstance = myclips.newInstance(funcClass, None, funcModule)
                    except ImportError, e:
                        myclips.logger.error("Error loading function definition class: %s", e)
                    else:
                        cls.register(funcInstance)

                    
class SystemFunctionRedefinitionError(MyClipsException):
    '''
    Raised on attempt to redefine a already defined
    system function 
    '''
    pass



if __name__ == '__main__':
    
    from myclips.ModulesManager import ModulesManager
    
    MM = ModulesManager()
    MM.addMainScope()
    
    print MM.currentScope.functions.systemFunctions
    print MM.currentScope.functions.has('assert')
    
Пример #18
0
    def test_SimpleScopeGeneration(self):
        scope = Scope("MAIN", ModulesManager())

        self.assertIsInstance(scope, Scope)
        self.assertEqual(scope.moduleName, "MAIN")
 def setUp(self):
     self.MM = ModulesManager()
     self.MM.addMainScope()
     self.network = Network(EventsManager())
     NetworkPlotter().install(self.network.eventsManager)