Example #1
0
 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)
Example #2
0
 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()
Example #3
0
 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()
Example #4
0
 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
Example #5
0
 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
Example #6
0
    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]