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