1
0
mirror of https://github.com/gsi-upm/senpy synced 2024-11-22 08:12:27 +00:00

Fix list of plugins

Closes #17
This commit is contained in:
J. Fernando Sánchez 2017-03-14 13:05:52 +01:00
parent 1a582c0843
commit 603e086606
5 changed files with 34 additions and 13 deletions

View File

@ -13,7 +13,7 @@ from .. import models
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
class SenpyPlugin(models.Plugin): class Plugin(models.Plugin):
def __init__(self, info=None): def __init__(self, info=None):
""" """
Provides a canonical name for plugins and serves as base for other Provides a canonical name for plugins and serves as base for other
@ -24,7 +24,7 @@ class SenpyPlugin(models.Plugin):
"information for the plugin.")) "information for the plugin."))
logger.debug("Initialising {}".format(info)) logger.debug("Initialising {}".format(info))
id = 'plugins/{}_{}'.format(info['name'], info['version']) id = 'plugins/{}_{}'.format(info['name'], info['version'])
super(SenpyPlugin, self).__init__(id=id, **info) super(Plugin, self).__init__(id=id, **info)
self.is_activated = False self.is_activated = False
def get_folder(self): def get_folder(self):
@ -37,7 +37,10 @@ class SenpyPlugin(models.Plugin):
pass pass
class AnalysisPlugin(SenpyPlugin): SenpyPlugin = Plugin
class AnalysisPlugin(Plugin):
def analyse(self, *args, **kwargs): def analyse(self, *args, **kwargs):
raise NotImplemented( raise NotImplemented(
@ -58,7 +61,7 @@ class AnalysisPlugin(SenpyPlugin):
yield i yield i
class ConversionPlugin(SenpyPlugin): class ConversionPlugin(Plugin):
pass pass

View File

@ -37,6 +37,9 @@
"@type": "@id", "@type": "@id",
"@container": "@set" "@container": "@set"
}, },
"plugins": {
"@container": "@list"
},
"prov:wasGeneratedBy": { "prov:wasGeneratedBy": {
"@type": "@id" "@type": "@id"
}, },

View File

@ -6,6 +6,7 @@
"properties": { "properties": {
"plugins": { "plugins": {
"type": "array", "type": "array",
"default": [],
"items": { "items": {
"$ref": "plugin.json" "$ref": "plugin.json"
} }

View File

@ -1,8 +1,8 @@
from senpy.plugins import SenpyPlugin from senpy.plugins import AnalysisPlugin
from time import sleep from time import sleep
class SleepPlugin(SenpyPlugin): class SleepPlugin(AnalysisPlugin):
def activate(self, *args, **kwargs): def activate(self, *args, **kwargs):
sleep(self.timeout) sleep(self.timeout)

View File

@ -11,8 +11,10 @@ from senpy.models import (Emotion,
Entry, Entry,
Error, Error,
Results, Results,
Sentiment) Sentiment,
from senpy.plugins import SenpyPlugin Plugins,
Plugin)
from senpy import plugins
from pprint import pprint from pprint import pprint
@ -53,8 +55,8 @@ class ModelsTest(TestCase):
assert (received["entries"][0]["nif:isString"] != "Not testing") assert (received["entries"][0]["nif:isString"] != "Not testing")
def test_id(self): def test_id(self):
''' Adding the id after creation should overwrite the automatic ID """ Adding the id after creation should overwrite the automatic ID
''' """
r = Entry() r = Entry()
j = r.jsonld() j = r.jsonld()
assert '@id' in j assert '@id' in j
@ -94,8 +96,8 @@ class ModelsTest(TestCase):
r.validate() r.validate()
def test_plugins(self): def test_plugins(self):
self.assertRaises(Error, SenpyPlugin) self.assertRaises(Error, plugins.Plugin)
p = SenpyPlugin({"name": "dummy", "version": 0}) p = plugins.Plugin({"name": "dummy", "version": 0})
c = p.jsonld() c = p.jsonld()
assert "info" not in c assert "info" not in c
assert "repo" not in c assert "repo" not in c
@ -107,7 +109,7 @@ class ModelsTest(TestCase):
def test_str(self): def test_str(self):
"""The string representation shouldn't include private variables""" """The string representation shouldn't include private variables"""
r = Results() r = Results()
p = SenpyPlugin({"name": "STR test", "version": 0}) p = plugins.Plugin({"name": "STR test", "version": 0})
p._testing = 0 p._testing = 0
s = str(p) s = str(p)
assert "_testing" not in s assert "_testing" not in s
@ -143,3 +145,15 @@ class ModelsTest(TestCase):
print(t) print(t)
g = rdflib.Graph().parse(data=t, format='turtle') g = rdflib.Graph().parse(data=t, format='turtle')
assert len(g) == len(triples) assert len(g) == len(triples)
def test_single_plugin(self):
"""A response with a single plugin should still return a list"""
plugs = Plugins()
for i in range(10):
p = Plugin({'id': str(i),
'version': 0,
'description': 'dummy'})
plugs.plugins.append(p)
assert isinstance(plugs.plugins, list)
js = plugs.jsonld()
assert isinstance(js['plugins'], list)