def buildIntentList(self, supportedIntents) -> dict:
        supportedIntents = supportedIntents or list()
        intents: Dict[str, Intent] = self.findDecoratedIntents()
        for item in supportedIntents:
            if isinstance(item, tuple):
                intent = item[0]
                if not isinstance(intent, Intent):
                    intent = Intent(intent, userIntent=False)

                intent.fallbackFunction = item[1]
                item = intent
            elif not isinstance(item, Intent):
                item = Intent(item, userIntent=False)

            if str(item) in intents:
                intents[str(item)].addDialogMapping(item.dialogMapping)

                if item.fallbackFunction:
                    intents[str(item)].fallbackFunction = item.fallbackFunction
                # always use the highes auth level specified
                if item.authOnly > intents[str(item)].authOnly:
                    intents[str(item)].authOnly = item.authOnly
            else:
                intents[str(item)] = item

        return intents
Exemple #2
0
	def buildIntentList(self, supportedIntents) -> dict:
		supportedIntents = supportedIntents or list()
		intents: Dict[str, Intent] = self.findDecoratedIntents()
		for item in supportedIntents:
			if isinstance(item, tuple):
				intent = item[0]
				if not isinstance(intent, Intent):
					intent = Intent(intent, userIntent=False)
				intent.fallbackFunction = item[1]
				item = intent
			elif not isinstance(item, Intent):
				item = Intent(item, userIntent=False)

			if str(item) in intents:
				intents[str(item)].addDialogMapping(item.dialogMapping, skillName=self.name)

				if item.fallbackFunction:
					intents[str(item)].fallbackFunction = item.fallbackFunction

				# always use the highest auth level specified (low values mean a higher auth level)
				if item.authLevel < intents[str(item)].authLevel:
					intents[str(item)].authLevel = item.authLevel
			else:
				intents[str(item)] = item

		return intents
    def testBuildIntentList(self, mock_decoratedFuncs, mock_config,
                            mock_protected):
        owner_mock = MagicMock()
        owner_mock.getAliceConfigByName.return_value = 'unittest'
        mock_config.return_value = owner_mock

        property_mock = MagicMock()
        mock_protected.return_value = property_mock

        class ExampleSkill(AliceSkill):
            #ignore all stuff that would happen in the AliceSkill init
            def __init__(self):
                self._name = 'ExampleSkill'

            def exampleFunc(self):
                pass

        exampleSkill = ExampleSkill()

        # no decorated functions no initialised values
        mock_decoratedFuncs.return_value = {}
        self.assertDictEqual(exampleSkill.buildIntentList(list()), dict())

        # no decorated functions
        initIntents = [
            Intent('Intent1', authLevel=AccessLevel.ADMIN),
            'hermes/intent/unittest:Intent2',
            (Intent('intent3'), exampleSkill.exampleFunc),
            ('hermes/intent/unittest:intent4', exampleSkill.exampleFunc)
        ]

        mappings = exampleSkill.buildIntentList(initIntents)
        intent1 = mappings[str(Intent('Intent1'))]
        intent2 = mappings[str(Intent('Intent2'))]
        intent3 = mappings[str(Intent('intent3'))]
        intent4 = mappings[str(Intent('intent4'))]

        self.assertFalse(intent1.protected)
        self.assertEqual(intent1.authOnly, AccessLevel.ADMIN)
        self.assertEqual(intent1.fallbackFunction, None)
        self.assertEqual(intent1.dialogMapping, dict())
        self.assertEqual(str(intent1), 'hermes/intent/unittest:Intent1')

        self.assertFalse(intent2.protected)
        self.assertEqual(intent2.authOnly, 0)
        self.assertEqual(intent2.fallbackFunction, None)
        self.assertEqual(intent2.dialogMapping, dict())
        self.assertEqual(str(intent2), 'hermes/intent/unittest:Intent2')

        self.assertFalse(intent3.protected)
        self.assertEqual(intent3.authOnly, 0)
        self.assertEqual(intent3.fallbackFunction, exampleSkill.exampleFunc)
        self.assertEqual(intent3.dialogMapping, dict())
        self.assertEqual(str(intent3), 'hermes/intent/unittest:intent3')

        self.assertFalse(intent4.protected)
        self.assertEqual(intent4.authOnly, 0)
        self.assertEqual(intent4.fallbackFunction, exampleSkill.exampleFunc)
        self.assertEqual(intent4.dialogMapping, dict())
        self.assertEqual(str(intent4), 'hermes/intent/unittest:intent4')

        # decorated functions
        intent1 = Intent('intent1')
        intent1.fallbackFunction = exampleSkill.onMessage
        mock_decoratedFuncs.return_value = {
            'hermes/intent/unittest:intent1': intent1,
        }

        initIntents = [Intent('intent1', authLevel=AccessLevel.ADMIN)]

        mappings = exampleSkill.buildIntentList(initIntents)
        intent1 = mappings[str(Intent('intent1'))]

        self.assertFalse(intent1.protected)
        self.assertEqual(intent1.authOnly, AccessLevel.ADMIN)
        self.assertEqual(intent1.fallbackFunction, exampleSkill.onMessage)
        self.assertEqual(intent1.dialogMapping, dict())
        self.assertEqual(str(intent1), 'hermes/intent/unittest:intent1')