def test_single_plugin(self): """A response with a single plugin should still return a list""" plugs = Plugins() p = Plugin({'id': str(1), 'version': 0, 'description': 'dummy'}) plugs.plugins.append(p) assert isinstance(plugs.plugins, list) js = plugs.jsonld() assert isinstance(js['plugins'], list)
def test_convert_emotions(self): self.senpy.activate_all(sync=True) plugin = Plugin({ 'id': 'imaginary', 'onyx:usesEmotionModel': 'emoml:fsre-dimensions' }) eSet1 = EmotionSet() activity = plugin.activity() eSet1.prov(activity) eSet1['onyx:hasEmotion'].append( Emotion({ 'emoml:arousal': 1, 'emoml:potency': 0, 'emoml:valence': 0 })) response = Results({ 'activities': [activity], 'entries': [ Entry({ 'nif:isString': 'much ado about nothing', 'onyx:hasEmotionSet': [eSet1] }) ] }) params = { 'emotion-model': 'emoml:big6', 'algorithm': ['conversion'], 'conversion': 'full' } r1 = deepcopy(response) r1.parameters = params self.senpy.analyse(r1) assert len(r1.entries[0].emotions) == 2 params['conversion'] = 'nested' r2 = deepcopy(response) r2.parameters = params self.senpy.analyse(r2) assert len(r2.entries[0].emotions) == 1 assert r2.entries[0].emotions[0]['prov:wasDerivedFrom'] == eSet1 params['conversion'] = 'filtered' r3 = deepcopy(response) r3.parameters = params self.senpy.analyse(r3) assert len(r3.entries[0].emotions) == 1 r3.jsonld()
def test_convert_emotions(self): self.senpy.activate_all(sync=True) plugin = Plugin({ 'id': 'imaginary', 'onyx:usesEmotionModel': 'emoml:fsre-dimensions' }) eSet1 = EmotionSet() activity = plugin.activity() eSet1.prov(activity) eSet1['onyx:hasEmotion'].append(Emotion({ 'emoml:arousal': 1, 'emoml:potency': 0, 'emoml:valence': 0 })) response = Results({ 'activities': [activity], 'entries': [Entry({ 'nif:isString': 'much ado about nothing', 'onyx:hasEmotionSet': [eSet1] })] }) params = {'emotion-model': 'emoml:big6', 'algorithm': ['conversion'], 'conversion': 'full'} r1 = deepcopy(response) r1.parameters = params self.senpy.analyse(r1) assert len(r1.entries[0].emotions) == 2 params['conversion'] = 'nested' r2 = deepcopy(response) r2.parameters = params self.senpy.analyse(r2) assert len(r2.entries[0].emotions) == 1 assert r2.entries[0].emotions[0]['prov:wasDerivedFrom'] == eSet1 params['conversion'] = 'filtered' r3 = deepcopy(response) r3.parameters = params self.senpy.analyse(r3) assert len(r3.entries[0].emotions) == 1 r3.jsonld()
def test_convert_emotions(self): self.senpy.activate_all(sync=True) plugin = Plugin({ 'id': 'imaginary', 'onyx:usesEmotionModel': 'emoml:fsre-dimensions' }) eSet1 = EmotionSet() eSet1.prov__wasGeneratedBy = plugin['id'] eSet1['onyx:hasEmotion'].append( Emotion({ 'emoml:arousal': 1, 'emoml:potency': 0, 'emoml:valence': 0 })) response = Results({ 'entries': [Entry({ 'text': 'much ado about nothing', 'emotions': [eSet1] })] }) params = {'emotionModel': 'emoml:big6', 'conversion': 'full'} r1 = deepcopy(response) self.senpy.convert_emotions(r1, [ plugin, ], params) assert len(r1.entries[0].emotions) == 2 params['conversion'] = 'nested' r2 = deepcopy(response) self.senpy.convert_emotions(r2, [ plugin, ], params) assert len(r2.entries[0].emotions) == 1 assert r2.entries[0].emotions[0]['prov:wasDerivedFrom'] == eSet1 params['conversion'] = 'filtered' r3 = deepcopy(response) self.senpy.convert_emotions(r3, [ plugin, ], params) assert len(r3.entries[0].emotions) == 1
def test_parse_analyses(self): '''The API should parse user parameters and return them in a format that plugins can use''' plugins = [ Plugin({ 'name': 'plugin1', 'extra_params': { # Incompatible parameter 'param0': { 'aliases': ['p1', 'parameter1'], 'options': ['option1', 'option2'], 'default': 'option1', 'required': True }, 'param1': { 'aliases': ['p1', 'parameter1'], 'options': ['en', 'es'], 'default': 'en', 'required': False }, 'param2': { 'aliases': ['p2', 'parameter2'], 'required': False, 'options': ['value2_1', 'value2_2', 'value3_3'] } } }), Plugin({ 'name': 'plugin2', 'extra_params': { 'param0': { 'aliases': ['parameter1'], 'options': ['new option', 'new option2'], 'default': 'new option', 'required': False }, 'param1': { 'aliases': ['myparam1', 'p1'], 'options': ['en', 'de', 'auto'], 'default': 'de', 'required': True }, 'param3': { 'aliases': ['p3', 'parameter3'], 'options': boolean, 'default': True } } }) ] call = { 'param1': 'en', '0.param0': 'option1', '0.param1': 'en', 'param2': 'value2_1', 'param0': 'new option', '1.param1': 'de', 'param3': False, } expected = [{ 'param0': 'option1', 'param1': 'en', 'param2': 'value2_1', }, { 'param0': 'new option', 'param1': 'de', 'param3': False, }] p = parse_analyses(call, plugins) for i, arg in enumerate(expected): params = p[i].params for k, v in arg.items(): assert params[k] == v
def test_get_extra_params(self): '''The API should return the list of valid parameters for a set of plugins''' plugins = [ Plugin({ 'name': 'plugin1', 'extra_params': { # Incompatible parameter 'param0': { 'aliases': ['p1', 'parameter1'], 'options': ['option1', 'option2'], 'default': 'option1', 'required': True }, 'param1': { 'aliases': ['p1', 'parameter1'], 'options': ['en', 'es'], 'default': 'en', 'required': False }, 'param2': { 'aliases': ['p2', 'parameter2'], 'required': False, 'options': ['value2_1', 'value2_2', 'value3_3'] } } }), Plugin({ 'name': 'plugin2', 'extra_params': { 'param0': { 'aliases': ['parameter1'], 'options': ['new option', 'new option2'], 'default': 'new option', 'required': False }, 'param1': { 'aliases': ['myparam1', 'p1'], 'options': ['en', 'de', 'auto'], 'default': 'de', 'required': True }, 'param3': { 'aliases': ['p3', 'parameter3'], 'options': boolean, 'default': True } } }) ] expected = { # Overlapping parameters 'plugin1.param0': plugins[0]['extra_params']['param0'], 'plugin1.param1': plugins[0]['extra_params']['param1'], 'plugin2.param0': plugins[1]['extra_params']['param0'], 'plugin2.param1': plugins[1]['extra_params']['param1'], # Non-overlapping parameters 'param2': plugins[0]['extra_params']['param2'], 'param3': plugins[1]['extra_params']['param3'], # Intersection of overlapping parameters 'param1': { 'aliases': ['p1'], 'options': ['en'], 'default': None, 'required': True } } result = get_extra_params(plugins) for ik, iv in expected.items(): assert ik in result for jk, jv in iv.items(): assert jk in result[ik] assert expected[ik][jk] == result[ik][jk]