Bläddra i källkod

Merge pull request #85 from kalliope-project/fix_wikipedia_neuron

Fix wikipedia neuron
Monf 8 år sedan
förälder
incheckning
448876ffa0

+ 12 - 0
CHANGELOG.md

@@ -0,0 +1,12 @@
+v0.2 / 2016-11-21
+=================
+
+- add neuron URI to call web services
+- fix wikipedia neuron. renamed wikipedia_searcher
+- update neuron neurotransmitter: can now call another synapse directly without asking a question
+
+
+v0.1 / 2016-11-02
+=================
+
+- Initial Release

+ 3 - 2
brains/wikipedia.yml

@@ -4,8 +4,9 @@
     signals:
       - order: "cherche sur Wikipédia {{ query }}"
     neurons:
-      - wikipedia:
+      - wikipedia_searcher:
           language: "fr"
+          sentences: 1
           args:
             - query
-          file_template: "wikipedia_returned_value.j2"
+          file_template: "templates/wikipedia_returned_value.j2"

+ 0 - 1
neurons/wikipedia/__init__.py

@@ -1 +0,0 @@
-from wikipedia import Wikipedia

+ 2 - 2
neurons/wikipedia/README.md → neurons/wikipedia_searcher/README.md

@@ -1,4 +1,4 @@
-# wikipedia
+# wikipedia_searcher
 
 ## Synopsis
 
@@ -36,7 +36,7 @@ This synapse will look for the {{ query }} spelt by the user on Wikipedia
   signals:
     - order: "look on wikipedia {{ query }}"
   neurons:
-    - wikipedia:
+    - wikipedia_searcher:
         language: "en"
         args:
           - query

+ 1 - 0
neurons/wikipedia_searcher/__init__.py

@@ -0,0 +1 @@
+from wikipedia_searcher import Wikipedia_searcher

+ 0 - 0
neurons/wikipedia_searcher/tests/__init__.py


+ 67 - 0
neurons/wikipedia_searcher/tests/test_wikipedia_searcher.py

@@ -0,0 +1,67 @@
+import unittest
+
+from core.NeuronModule import InvalidParameterException
+from neurons.wikipedia_searcher import Wikipedia_searcher
+
+
+class TestWikipediaSearcher(unittest.TestCase):
+    def setUp(self):
+        pass
+
+    def test_parameters(self):
+        def run_test(parameters_to_test):
+            with self.assertRaises(InvalidParameterException):
+                Wikipedia_searcher(**parameters_to_test)
+
+        parameters = dict()
+        run_test(parameters)
+
+        # sentences must be an integer
+        parameters = {
+            "language": "en",
+            "query": "this is the query",
+            "sentences": "invalid"
+
+        }
+        run_test(parameters)
+
+        # test non existing language
+        parameters = {
+            "language": "foo",
+            "query": "this is the query",
+            "sentences": 1
+
+        }
+        run_test(parameters)
+
+    def test_get_DisambiguationError(self):
+
+        parameters = {
+            "language": "fr",
+            "query": "bot",
+            "sentences": 1
+        }
+
+        wiki = Wikipedia_searcher(**parameters)
+        self.assertEqual(wiki.returncode, "DisambiguationError")
+
+    def test_page_error(self):
+        parameters = {
+            "language": "fr",
+            "query": "fudu foo bar non exist",
+            "sentences": 1
+        }
+
+        wiki = Wikipedia_searcher(**parameters)
+        self.assertEqual(wiki.returncode, "PageError")
+
+    def test_summary_found(self):
+        parameters = {
+            "language": "fr",
+            "query": "kalliope"
+        }
+        wiki = Wikipedia_searcher(**parameters)
+        self.assertEqual(wiki.returncode, "SummaryFound")
+
+if __name__ == '__main__':
+    unittest.main()

+ 10 - 5
neurons/wikipedia/wikipedia.py → neurons/wikipedia_searcher/wikipedia_searcher.py

@@ -7,14 +7,14 @@ logging.basicConfig()
 logger = logging.getLogger("kalliope")
 
 
-class Wikipedia(NeuronModule):
+class Wikipedia_searcher(NeuronModule):
     def __init__(self, **kwargs):
         # we don't need the TTS cache for this neuron
         cache = kwargs.get('cache', None)
         if cache is None:
             cache = False
             kwargs["cache"] = cache
-        super(Wikipedia, self).__init__(**kwargs)
+        super(Wikipedia_searcher, self).__init__(**kwargs)
 
         # get parameters form the neuron
         self.query = kwargs.get('query', None)
@@ -23,6 +23,7 @@ class Wikipedia(NeuronModule):
 
         self.may_refer = None
         self.returncode = None
+        self.message = None
 
         # check parameters
         if self._is_parameters_ok():
@@ -46,14 +47,14 @@ class Wikipedia(NeuronModule):
                 self.returncode = "PageError"
                 summary = ""
 
-            message = {
+            self.message = {
                 "summary": summary,
                 "may_refer": self.may_refer,
                 "returncode": self.returncode
             }
-            logger.debug("Wikipedia returned message: %s" % str(message))
+            logger.debug("Wikipedia returned message: %s" % str(self.message))
 
-            self.say(message)
+            self.say(self.message)
 
     def _is_parameters_ok(self):
         """
@@ -72,4 +73,8 @@ class Wikipedia(NeuronModule):
         if self.language not in valid_language:
             raise InvalidParameterException("Wikipedia needs a valid language: %s" % valid_language)
 
+        if self.sentences is not None:
+            if not isinstance(self.sentences, int):
+                raise InvalidParameterException("Number of sentences must be an integer")
+
         return True