From 070e853dc4e3a17899dcb91b36e7435b28bd1de3 Mon Sep 17 00:00:00 2001 From: SuperHelios <20555025+Imperator26@users.noreply.github.com> Date: Sun, 9 Jun 2019 23:07:52 +0200 Subject: [PATCH 01/10] feat(package/wikipedia): Initial commit. Unstable. --- bridges/python/Pipfile | 1 + bridges/python/Pipfile.lock | 13 ++++-- packages/wikipedia/README.md | 28 ++++++++++++ packages/wikipedia/config/.gitkeep | 0 packages/wikipedia/config/config.sample.json | 6 +++ packages/wikipedia/data/.gitkeep | 0 packages/wikipedia/data/answers/.gitkeep | 0 packages/wikipedia/data/answers/en.json | 25 +++++++++++ packages/wikipedia/data/expressions/.gitkeep | 0 packages/wikipedia/data/expressions/en.json | 47 ++++++++++++++++++++ packages/wikipedia/version.txt | 1 + packages/wikipedia/wikipedia.py | 31 +++++++++++++ 12 files changed, 148 insertions(+), 4 deletions(-) create mode 100644 packages/wikipedia/README.md create mode 100644 packages/wikipedia/config/.gitkeep create mode 100644 packages/wikipedia/config/config.sample.json create mode 100644 packages/wikipedia/data/.gitkeep create mode 100644 packages/wikipedia/data/answers/.gitkeep create mode 100644 packages/wikipedia/data/answers/en.json create mode 100644 packages/wikipedia/data/expressions/.gitkeep create mode 100644 packages/wikipedia/data/expressions/en.json create mode 100644 packages/wikipedia/version.txt create mode 100644 packages/wikipedia/wikipedia.py diff --git a/bridges/python/Pipfile b/bridges/python/Pipfile index 5af4c007c..1dc092cd2 100644 --- a/bridges/python/Pipfile +++ b/bridges/python/Pipfile @@ -8,5 +8,6 @@ requests = "==2.21.0" pytube = "==9.5.0" tinydb = "==3.9.0" beautifulsoup4 = "==4.7.1" +wikipedia = "*" [dev-packages] diff --git a/bridges/python/Pipfile.lock b/bridges/python/Pipfile.lock index 54fc9aed1..79255eb80 100644 --- a/bridges/python/Pipfile.lock +++ b/bridges/python/Pipfile.lock @@ -1,12 +1,10 @@ { "_meta": { "hash": { - "sha256": "73bde89b379ffec7cec145fa30f1ebb49c349204b730a94108151fd9b71b31ec" + "sha256": "21d76da8b1726b3a96f62bad5eae843ce6c6c3b38eb52baa9602f14eaf352b34" }, "pipfile-spec": 6, - "requires": { - "python_version": "3.6" - }, + "requires": {}, "sources": [ { "name": "pypi", @@ -83,6 +81,13 @@ "sha256:a637e5fae88995b256e3409dc4d52c2e2e0ba32c42a6365fee8bbd2238de3cfb" ], "version": "==1.24.3" + }, + "wikipedia": { + "hashes": [ + "sha256:db0fad1829fdd441b1852306e9856398204dc0786d2996dd2e0c8bb8e26133b2" + ], + "index": "pypi", + "version": "==1.4.0" } }, "develop": {} diff --git a/packages/wikipedia/README.md b/packages/wikipedia/README.md new file mode 100644 index 000000000..b5f567268 --- /dev/null +++ b/packages/wikipedia/README.md @@ -0,0 +1,28 @@ +# Wikipedia Package + +The Wikipedia package allows your personal assistant to gather pieces of information from Wikipedia. + +#### Requirements +- wikipedia + +#### Usage + +1. Duplicate the file `packages/wikipedia/config/config.sample.json` and rename it `config.json`. +2. Set your language. +3. This package uses wikipedia. To install it: from inside leon directory `cd bridges/python` +4. `pipenv install wikipedia` +5. Done! + +``` +(en-US) +- "Search on Wikipedia GitHub" +``` + +#### Options +- `lang`: Choose your language. Default: `en` + +#### Links + +- [MediaWiki API](https://www.mediawiki.org/wiki/API:Main_page) +- [Wikipedia GitHub](https://github.com/goldsmith/Wikipedia) +- [Wikipedia Docs](https://wikipedia.readthedocs.io/en/latest/) diff --git a/packages/wikipedia/config/.gitkeep b/packages/wikipedia/config/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/packages/wikipedia/config/config.sample.json b/packages/wikipedia/config/config.sample.json new file mode 100644 index 000000000..ade813bcf --- /dev/null +++ b/packages/wikipedia/config/config.sample.json @@ -0,0 +1,6 @@ +{ + "wikipedia": { + "lang": "en", + "options": {} + } +} diff --git a/packages/wikipedia/data/.gitkeep b/packages/wikipedia/data/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/packages/wikipedia/data/answers/.gitkeep b/packages/wikipedia/data/answers/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/packages/wikipedia/data/answers/en.json b/packages/wikipedia/data/answers/en.json new file mode 100644 index 000000000..a6423c727 --- /dev/null +++ b/packages/wikipedia/data/answers/en.json @@ -0,0 +1,25 @@ +{ + "wikipedia": { + "acquiring": [ + "Right away!", + "One second please.", + "Just a second...", + "Browsing Wikipedia right now..." + ], + "summary": [ + "%summary%" + ], + "disambiguation_error": [ + "Disambiguation error." + ], + "page_error": [ + "Your request does not match any page." + ], + "no_entities_error": [ + "Your request was not well formatted. Please, retry." + ], + "connection_error": [ + "I'm having issuse reaching the server." + ] + } +} diff --git a/packages/wikipedia/data/expressions/.gitkeep b/packages/wikipedia/data/expressions/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/packages/wikipedia/data/expressions/en.json b/packages/wikipedia/data/expressions/en.json new file mode 100644 index 000000000..5c0f645e8 --- /dev/null +++ b/packages/wikipedia/data/expressions/en.json @@ -0,0 +1,47 @@ +{ + "wikipedia": { + "summary": { + "expressions": [ + "Search on Wikipedia", + "Search on Wikipedia for", + "Search", + "On wikipedia look for" + ], + "entities": [ + { + "type": "trim", + "name": "page", + "conditions": [ + { + "type": "after_last", + "from": "wikipedia" + }, + { + "type": "between", + "from": "wikipedia", + "to": "?" + }, + { + "type": "after_last", + "from": "for" + }, + { + "type": "between", + "from": "for", + "to": "?" + }, + { + "type": "between", + "from": "search", + "to": "on" + }, + { + "type": "after_last", + "from": "search" + } + ] + } + ] + } + } +} diff --git a/packages/wikipedia/version.txt b/packages/wikipedia/version.txt new file mode 100644 index 000000000..6e8bf73aa --- /dev/null +++ b/packages/wikipedia/version.txt @@ -0,0 +1 @@ +0.1.0 diff --git a/packages/wikipedia/wikipedia.py b/packages/wikipedia/wikipedia.py new file mode 100644 index 000000000..f21691df7 --- /dev/null +++ b/packages/wikipedia/wikipedia.py @@ -0,0 +1,31 @@ +#!/usr/bin/env python +# -*- coding:utf-8 -*- + +import wikipedia +from wikipedia.exceptions import DisambiguationError, PageError + +import utils + +wikipedia.set_lang(utils.config("lang")) + +def summary(string, entities): + """ + Get the summary of the requested wikipedia page. + """ + + for entity in entities: + if entity["entity"] == "page": + utils.output("inter", "acquiring", utils.translate("acquiring")) + + try: + summary = wikipedia.summary(entity["sourceText"]) + return utils.output("end", "summary", utils.translate("summary", {"summary": summary})) + + except DisambiguationError as pages: + # TODO: ask which page to visit + return utils.output("end", "disambiguation_error", utils.translate("disambiguation_error")) + + except PageError: + return utils.output("end", "page_error", utils.translate("page_error")) + + return utils.output("end", "no_entities_error", utils.translate("no_entities_error")) From 43ae3c6f51a2ce6ab075d5e244ccc1ddcc525b02 Mon Sep 17 00:00:00 2001 From: SuperHelios <20555025+Imperator26@users.noreply.github.com> Date: Sun, 9 Jun 2019 23:42:13 +0200 Subject: [PATCH 02/10] perf(package/wikipedia): Adds more expressions --- packages/wikipedia/data/expressions/en.json | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/wikipedia/data/expressions/en.json b/packages/wikipedia/data/expressions/en.json index 5c0f645e8..7c4997e18 100644 --- a/packages/wikipedia/data/expressions/en.json +++ b/packages/wikipedia/data/expressions/en.json @@ -4,7 +4,9 @@ "expressions": [ "Search on Wikipedia", "Search on Wikipedia for", + "Search for ", "Search", + "Look for", "On wikipedia look for" ], "entities": [ From fa47578020cb2098f15ca3cea7adebc8382b6388 Mon Sep 17 00:00:00 2001 From: SuperHelios <20555025+Imperator26@users.noreply.github.com> Date: Sun, 9 Jun 2019 23:49:10 +0200 Subject: [PATCH 03/10] feat(package/wikipedia): Adds setting to control the number of sentences reported by summary. --- packages/wikipedia/README.md | 4 +++- packages/wikipedia/config/config.sample.json | 1 + packages/wikipedia/wikipedia.py | 2 +- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/packages/wikipedia/README.md b/packages/wikipedia/README.md index b5f567268..a766f8174 100644 --- a/packages/wikipedia/README.md +++ b/packages/wikipedia/README.md @@ -8,7 +8,7 @@ The Wikipedia package allows your personal assistant to gather pieces of informa #### Usage 1. Duplicate the file `packages/wikipedia/config/config.sample.json` and rename it `config.json`. -2. Set your language. +2. Set your language and other settings. 3. This package uses wikipedia. To install it: from inside leon directory `cd bridges/python` 4. `pipenv install wikipedia` 5. Done! @@ -16,10 +16,12 @@ The Wikipedia package allows your personal assistant to gather pieces of informa ``` (en-US) - "Search on Wikipedia GitHub" + ``` #### Options - `lang`: Choose your language. Default: `en` +- `sentences`: Number of sentences to report. No greater than 10. #### Links diff --git a/packages/wikipedia/config/config.sample.json b/packages/wikipedia/config/config.sample.json index ade813bcf..3d42ebb12 100644 --- a/packages/wikipedia/config/config.sample.json +++ b/packages/wikipedia/config/config.sample.json @@ -1,6 +1,7 @@ { "wikipedia": { "lang": "en", + "sentences": 5, "options": {} } } diff --git a/packages/wikipedia/wikipedia.py b/packages/wikipedia/wikipedia.py index f21691df7..6089f79b2 100644 --- a/packages/wikipedia/wikipedia.py +++ b/packages/wikipedia/wikipedia.py @@ -18,7 +18,7 @@ def summary(string, entities): utils.output("inter", "acquiring", utils.translate("acquiring")) try: - summary = wikipedia.summary(entity["sourceText"]) + summary = wikipedia.summary(entity["sourceText"], sentences=utils.config("sentences")) return utils.output("end", "summary", utils.translate("summary", {"summary": summary})) except DisambiguationError as pages: From 4809aa35a7f586a8e116627d6c494df9cae103f0 Mon Sep 17 00:00:00 2001 From: SuperHelios <20555025+Imperator26@users.noreply.github.com> Date: Wed, 12 Jun 2019 20:43:32 +0200 Subject: [PATCH 04/10] refactor(package/wikipedia): Refactor code to fulfill PEP8 --- packages/wikipedia/wikipedia.py | 41 +++++++++++++++++++++++++++------ 1 file changed, 34 insertions(+), 7 deletions(-) diff --git a/packages/wikipedia/wikipedia.py b/packages/wikipedia/wikipedia.py index 6089f79b2..1d65f42d3 100644 --- a/packages/wikipedia/wikipedia.py +++ b/packages/wikipedia/wikipedia.py @@ -8,6 +8,7 @@ wikipedia.set_lang(utils.config("lang")) + def summary(string, entities): """ Get the summary of the requested wikipedia page. @@ -15,17 +16,43 @@ def summary(string, entities): for entity in entities: if entity["entity"] == "page": - utils.output("inter", "acquiring", utils.translate("acquiring")) + utils.output( + "inter", + "acquiring", + utils.translate("acquiring") + ) try: - summary = wikipedia.summary(entity["sourceText"], sentences=utils.config("sentences")) - return utils.output("end", "summary", utils.translate("summary", {"summary": summary})) + summary = wikipedia.summary( + entity["sourceText"], + sentences=utils.config("sentences") + ) + return utils.output( + "end", + "summary", + utils.translate( + "summary", + {"summary": summary} + ) + ) except DisambiguationError as pages: # TODO: ask which page to visit - return utils.output("end", "disambiguation_error", utils.translate("disambiguation_error")) + return utils.output( + "end", + "disambiguation_error", + utils.translate("disambiguation_error") + ) except PageError: - return utils.output("end", "page_error", utils.translate("page_error")) - - return utils.output("end", "no_entities_error", utils.translate("no_entities_error")) + return utils.output( + "end", + "page_error", + utils.translate("page_error") + ) + + return utils.output( + "end", + "no_entities_error", + utils.translate("no_entities_error") + ) From 141e46bad417a4ecd486416812be3d1294797413 Mon Sep 17 00:00:00 2001 From: SuperHelios <20555025+Imperator26@users.noreply.github.com> Date: Wed, 12 Jun 2019 21:15:06 +0200 Subject: [PATCH 05/10] feat(package/wikipedia): Now it's now possible to request a random page from Wikipedia --- packages/wikipedia/data/expressions/en.json | 7 ++++++ packages/wikipedia/wikipedia.py | 24 ++++++++++++++++++++- 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/packages/wikipedia/data/expressions/en.json b/packages/wikipedia/data/expressions/en.json index 7c4997e18..283f32d9c 100644 --- a/packages/wikipedia/data/expressions/en.json +++ b/packages/wikipedia/data/expressions/en.json @@ -44,6 +44,13 @@ ] } ] + }, + "random": { + "expressions": [ + "Search a random page on Wikipedia", + "Search a random Wikipedia page", + "Give me a random page on Wikipedia" + ] } } } diff --git a/packages/wikipedia/wikipedia.py b/packages/wikipedia/wikipedia.py index 1d65f42d3..9785cec93 100644 --- a/packages/wikipedia/wikipedia.py +++ b/packages/wikipedia/wikipedia.py @@ -11,7 +11,7 @@ def summary(string, entities): """ - Get the summary of the requested wikipedia page. + Get the summary of the requested Wikipedia page. """ for entity in entities: @@ -56,3 +56,25 @@ def summary(string, entities): "no_entities_error", utils.translate("no_entities_error") ) + + +def random(string, entities): + """ + Get the summary of a random Wikipedia page. + """ + utils.output( + "inter", + "acquiring", + utils.translate("acquiring") + ) + + summary = wikipedia.summary(title=wikipedia.random()) + + return utils.output( + "end", + "summary", + utils.translate( + "summary", + {"summary": summary} + ) + ) From c4b078646a6efda74852df6015704a2353370874 Mon Sep 17 00:00:00 2001 From: SuperHelios <20555025+Imperator26@users.noreply.github.com> Date: Wed, 12 Jun 2019 23:29:26 +0200 Subject: [PATCH 06/10] feat(package/knowledge): Adds new knowledge package. Pretty darn cool --- bridges/python/Pipfile | 1 + bridges/python/Pipfile.lock | 49 ++++++++++++++++++-- packages/knowledge/README.md | 30 ++++++++++++ packages/knowledge/config/.gitkeep | 0 packages/knowledge/config/config.sample.json | 7 +++ packages/knowledge/data/.gitkeep | 0 packages/knowledge/data/answers/.gitkeep | 0 packages/knowledge/data/answers/en.json | 18 +++++++ packages/knowledge/data/expressions/.gitkeep | 0 packages/knowledge/data/expressions/en.json | 41 ++++++++++++++++ packages/knowledge/version.txt | 1 + packages/knowledge/wolframalpha.py | 32 +++++++++++++ 12 files changed, 175 insertions(+), 4 deletions(-) create mode 100644 packages/knowledge/README.md create mode 100644 packages/knowledge/config/.gitkeep create mode 100644 packages/knowledge/config/config.sample.json create mode 100644 packages/knowledge/data/.gitkeep create mode 100644 packages/knowledge/data/answers/.gitkeep create mode 100644 packages/knowledge/data/answers/en.json create mode 100644 packages/knowledge/data/expressions/.gitkeep create mode 100644 packages/knowledge/data/expressions/en.json create mode 100644 packages/knowledge/version.txt create mode 100644 packages/knowledge/wolframalpha.py diff --git a/bridges/python/Pipfile b/bridges/python/Pipfile index 5af4c007c..33c13b5aa 100644 --- a/bridges/python/Pipfile +++ b/bridges/python/Pipfile @@ -8,5 +8,6 @@ requests = "==2.21.0" pytube = "==9.5.0" tinydb = "==3.9.0" beautifulsoup4 = "==4.7.1" +wolframalpha = "*" [dev-packages] diff --git a/bridges/python/Pipfile.lock b/bridges/python/Pipfile.lock index 54fc9aed1..899a89ae4 100644 --- a/bridges/python/Pipfile.lock +++ b/bridges/python/Pipfile.lock @@ -1,12 +1,10 @@ { "_meta": { "hash": { - "sha256": "73bde89b379ffec7cec145fa30f1ebb49c349204b730a94108151fd9b71b31ec" + "sha256": "d42d4f9d305742c1a8c5f33e2ac31bd3a80854e6098a39fb1aef05a4b2f4fb86" }, "pipfile-spec": 6, - "requires": { - "python_version": "3.6" - }, + "requires": {}, "sources": [ { "name": "pypi", @@ -46,6 +44,27 @@ ], "version": "==2.8" }, + "inflect": { + "hashes": [ + "sha256:4ded1b2a6fcf0fc0397419c7727f131a93b67b80d899f2973be7758628e12b73", + "sha256:a82b671b043ddba98ea8b2cf000b31e8b41e9197b3151567239f3bbe215dab7e" + ], + "version": "==2.1.0" + }, + "jaraco.itertools": { + "hashes": [ + "sha256:6ac7fcd4af4a37c1751512d52e4e57b8d532457fd2b32b6a1fd3ab5a194921f5", + "sha256:fdc00c2755a5abac65484d431098e44e163af57fae05d284bf8af9329d43bd7f" + ], + "version": "==4.4.2" + }, + "more-itertools": { + "hashes": [ + "sha256:2112d2ca570bb7c3e53ea1a35cd5df42bb0fd10c45f0fb97178679c3c03d64c7", + "sha256:c3e4748ba1aad8dba30a4886b0b1a2004f9a863837b8654e7059eebf727afa5a" + ], + "version": "==7.0.0" + }, "pytube": { "hashes": [ "sha256:2a32f3475f063d25e7b7a7434a93b51d59aadbbda7ed24af48f097b2876c0964", @@ -62,6 +81,13 @@ "index": "pypi", "version": "==2.21.0" }, + "six": { + "hashes": [ + "sha256:3350809f0555b11f552448330d0b52d5f24c91a322ea4a15ef22629740f3761c", + "sha256:d16a0141ec1a18405cd4ce8b4613101da75da0e9a7aec5bdd4fa804d0e0eba73" + ], + "version": "==1.12.0" + }, "soupsieve": { "hashes": [ "sha256:6898e82ecb03772a0d82bd0d0a10c0d6dcc342f77e0701d0ec4a8271be465ece", @@ -83,6 +109,21 @@ "sha256:a637e5fae88995b256e3409dc4d52c2e2e0ba32c42a6365fee8bbd2238de3cfb" ], "version": "==1.24.3" + }, + "wolframalpha": { + "hashes": [ + "sha256:35c68635c9460a25f3e7b3b3b5498d2d7a4d05667f7e30a3007b0e1c611f2599", + "sha256:e1eef0cbee3cd5387cae8f112a5464e951161facf1e37f61ca98d77e7a4c01fa" + ], + "index": "pypi", + "version": "==3.0.1" + }, + "xmltodict": { + "hashes": [ + "sha256:50d8c638ed7ecb88d90561beedbf720c9b4e851a9fa6c47ebd64e99d166d8a21", + "sha256:8bbcb45cc982f48b2ca8fe7e7827c5d792f217ecf1792626f808bf41c3b86051" + ], + "version": "==0.12.0" } }, "develop": {} diff --git a/packages/knowledge/README.md b/packages/knowledge/README.md new file mode 100644 index 000000000..69f9c5d92 --- /dev/null +++ b/packages/knowledge/README.md @@ -0,0 +1,30 @@ +# Knowledge Package + +The Knowledge package aims at answering general questions. + +#### Requirements +- wolframalpha + +#### Usage + +1. Duplicate the file `packages/knowledge/config/config.sample.json` and rename it `config.json`. +2. Set your language and other settings. +3. This package needs a few libraries to work properly. To install it, from inside leon directory, `cd bridges/python` +4. `pipenv install wolframalpha` +5. Done! + +``` +(en-US) +- "On Wolfram Alpha search for the integral of cos(x)" +- "On Wolfram Alpha search for the age of Barack Obama" + +``` + +#### Options +- `lang`: Choose your language. Default: `en` + +#### Links + +- [Wolfram Alpha API](http://developer.wolframalpha.com) +- [Wolfram Alpha GitHub](https://github.com/jaraco/wolframalpha) +- [Wolfram Alpha Docs](http://products.wolframalpha.com/docs/WolframAlpha-API-Reference.pdf) diff --git a/packages/knowledge/config/.gitkeep b/packages/knowledge/config/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/packages/knowledge/config/config.sample.json b/packages/knowledge/config/config.sample.json new file mode 100644 index 000000000..61bf69aee --- /dev/null +++ b/packages/knowledge/config/config.sample.json @@ -0,0 +1,7 @@ +{ + "wolframalpha": { + "app_id": "YOUR_APP_ID", + "lang": "en", + "options": {} + } +} diff --git a/packages/knowledge/data/.gitkeep b/packages/knowledge/data/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/packages/knowledge/data/answers/.gitkeep b/packages/knowledge/data/answers/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/packages/knowledge/data/answers/en.json b/packages/knowledge/data/answers/en.json new file mode 100644 index 000000000..bbd54d8ae --- /dev/null +++ b/packages/knowledge/data/answers/en.json @@ -0,0 +1,18 @@ +{ + "wolframalpha": { + "acquiring": [ + "Right away!", + "One second please.", + "Just a second..." + ], + "result": [ + "%result%" + ], + "no_query": [ + "Please, specify a query." + ], + "connection_error": [ + "I'm having issuse reaching the server." + ] + } +} diff --git a/packages/knowledge/data/expressions/.gitkeep b/packages/knowledge/data/expressions/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/packages/knowledge/data/expressions/en.json b/packages/knowledge/data/expressions/en.json new file mode 100644 index 000000000..862f3adb6 --- /dev/null +++ b/packages/knowledge/data/expressions/en.json @@ -0,0 +1,41 @@ +{ + "wolframalpha": { + "query": { + "expressions": [ + "On Wolfram Alpha", + "On Wolfram Alpha search for", + "On Wolfram Alpha search for the", + "Search for this on Wolfram Alpha" + ], + "entities": [ + { + "type": "trim", + "name": "query", + "conditions": [ + { + "type": "before_first", + "from": "on" + }, + { + "type": "after_last", + "from": "Alpha" + }, + { + "type": "after_last", + "from": "for" + }, + { + "type": "after_last", + "from": "the" + }, + { + "type": "between", + "from": "for", + "to": "on" + } + ] + } + ] + } + } +} diff --git a/packages/knowledge/version.txt b/packages/knowledge/version.txt new file mode 100644 index 000000000..3eefcb9dd --- /dev/null +++ b/packages/knowledge/version.txt @@ -0,0 +1 @@ +1.0.0 diff --git a/packages/knowledge/wolframalpha.py b/packages/knowledge/wolframalpha.py new file mode 100644 index 000000000..520d5ae6b --- /dev/null +++ b/packages/knowledge/wolframalpha.py @@ -0,0 +1,32 @@ +#!/usr/bin/env python +# -*- coding:utf-8 -*- + +import utils + +import wolframalpha + +client = wolframalpha.Client(utils.config("app_id")) + + +def query(strings, entities): + utils.output( + "inter", + "acquiring", + utils.translate("acquiring") + ) + + for entity in entities: + if entity["entity"] == "query": + res = client.query(entity["sourceText"]) + + return utils.output( + "end", + "result", + utils.translate("result", {"result": next(res.results).text}) + ) + + return utils.output( + "end", + "no_query", + utils.translate("no_query") + ) From 6257eb3033cb5e4172e05479c7c993c86c240b2e Mon Sep 17 00:00:00 2001 From: SuperHelios <20555025+Imperator26@users.noreply.github.com> Date: Thu, 13 Jun 2019 00:52:36 +0200 Subject: [PATCH 07/10] refactor(package/wikipedia): Resolves conflicts --- bridges/python/Pipfile | 2 +- bridges/python/Pipfile.lock | 44 +++++++++++++++++++++++++++++++++---- 2 files changed, 41 insertions(+), 5 deletions(-) diff --git a/bridges/python/Pipfile b/bridges/python/Pipfile index 1dc092cd2..33c13b5aa 100644 --- a/bridges/python/Pipfile +++ b/bridges/python/Pipfile @@ -8,6 +8,6 @@ requests = "==2.21.0" pytube = "==9.5.0" tinydb = "==3.9.0" beautifulsoup4 = "==4.7.1" -wikipedia = "*" +wolframalpha = "*" [dev-packages] diff --git a/bridges/python/Pipfile.lock b/bridges/python/Pipfile.lock index 79255eb80..899a89ae4 100644 --- a/bridges/python/Pipfile.lock +++ b/bridges/python/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "21d76da8b1726b3a96f62bad5eae843ce6c6c3b38eb52baa9602f14eaf352b34" + "sha256": "d42d4f9d305742c1a8c5f33e2ac31bd3a80854e6098a39fb1aef05a4b2f4fb86" }, "pipfile-spec": 6, "requires": {}, @@ -44,6 +44,27 @@ ], "version": "==2.8" }, + "inflect": { + "hashes": [ + "sha256:4ded1b2a6fcf0fc0397419c7727f131a93b67b80d899f2973be7758628e12b73", + "sha256:a82b671b043ddba98ea8b2cf000b31e8b41e9197b3151567239f3bbe215dab7e" + ], + "version": "==2.1.0" + }, + "jaraco.itertools": { + "hashes": [ + "sha256:6ac7fcd4af4a37c1751512d52e4e57b8d532457fd2b32b6a1fd3ab5a194921f5", + "sha256:fdc00c2755a5abac65484d431098e44e163af57fae05d284bf8af9329d43bd7f" + ], + "version": "==4.4.2" + }, + "more-itertools": { + "hashes": [ + "sha256:2112d2ca570bb7c3e53ea1a35cd5df42bb0fd10c45f0fb97178679c3c03d64c7", + "sha256:c3e4748ba1aad8dba30a4886b0b1a2004f9a863837b8654e7059eebf727afa5a" + ], + "version": "==7.0.0" + }, "pytube": { "hashes": [ "sha256:2a32f3475f063d25e7b7a7434a93b51d59aadbbda7ed24af48f097b2876c0964", @@ -60,6 +81,13 @@ "index": "pypi", "version": "==2.21.0" }, + "six": { + "hashes": [ + "sha256:3350809f0555b11f552448330d0b52d5f24c91a322ea4a15ef22629740f3761c", + "sha256:d16a0141ec1a18405cd4ce8b4613101da75da0e9a7aec5bdd4fa804d0e0eba73" + ], + "version": "==1.12.0" + }, "soupsieve": { "hashes": [ "sha256:6898e82ecb03772a0d82bd0d0a10c0d6dcc342f77e0701d0ec4a8271be465ece", @@ -82,12 +110,20 @@ ], "version": "==1.24.3" }, - "wikipedia": { + "wolframalpha": { "hashes": [ - "sha256:db0fad1829fdd441b1852306e9856398204dc0786d2996dd2e0c8bb8e26133b2" + "sha256:35c68635c9460a25f3e7b3b3b5498d2d7a4d05667f7e30a3007b0e1c611f2599", + "sha256:e1eef0cbee3cd5387cae8f112a5464e951161facf1e37f61ca98d77e7a4c01fa" ], "index": "pypi", - "version": "==1.4.0" + "version": "==3.0.1" + }, + "xmltodict": { + "hashes": [ + "sha256:50d8c638ed7ecb88d90561beedbf720c9b4e851a9fa6c47ebd64e99d166d8a21", + "sha256:8bbcb45cc982f48b2ca8fe7e7827c5d792f217ecf1792626f808bf41c3b86051" + ], + "version": "==0.12.0" } }, "develop": {} From 5d4a7a49a086ae4d2c546ce2ad0a8b5372394b91 Mon Sep 17 00:00:00 2001 From: SuperHelios <20555025+Imperator26@users.noreply.github.com> Date: Thu, 13 Jun 2019 01:09:33 +0200 Subject: [PATCH 08/10] refactor(package/knowledge): Transforms wikipedia package to a module inside knowledge --- bridges/python/Pipfile | 1 + bridges/python/Pipfile.lock | 9 ++- packages/knowledge/README.md | 36 ++++++++++-- packages/knowledge/config/config.sample.json | 5 ++ packages/knowledge/data/answers/en.json | 23 ++++++++ packages/knowledge/data/expressions/en.json | 54 ++++++++++++++++++ .../{wikipedia => knowledge}/wikipedia.py | 0 packages/wikipedia/README.md | 30 ---------- packages/wikipedia/config/.gitkeep | 0 packages/wikipedia/config/config.sample.json | 7 --- packages/wikipedia/data/.gitkeep | 0 packages/wikipedia/data/answers/.gitkeep | 0 packages/wikipedia/data/answers/en.json | 25 --------- packages/wikipedia/data/expressions/.gitkeep | 0 packages/wikipedia/data/expressions/en.json | 56 ------------------- packages/wikipedia/version.txt | 1 - 16 files changed, 122 insertions(+), 125 deletions(-) rename packages/{wikipedia => knowledge}/wikipedia.py (100%) delete mode 100644 packages/wikipedia/README.md delete mode 100644 packages/wikipedia/config/.gitkeep delete mode 100644 packages/wikipedia/config/config.sample.json delete mode 100644 packages/wikipedia/data/.gitkeep delete mode 100644 packages/wikipedia/data/answers/.gitkeep delete mode 100644 packages/wikipedia/data/answers/en.json delete mode 100644 packages/wikipedia/data/expressions/.gitkeep delete mode 100644 packages/wikipedia/data/expressions/en.json delete mode 100644 packages/wikipedia/version.txt diff --git a/bridges/python/Pipfile b/bridges/python/Pipfile index 33c13b5aa..7e7d32125 100644 --- a/bridges/python/Pipfile +++ b/bridges/python/Pipfile @@ -9,5 +9,6 @@ pytube = "==9.5.0" tinydb = "==3.9.0" beautifulsoup4 = "==4.7.1" wolframalpha = "*" +wikipedia = "*" [dev-packages] diff --git a/bridges/python/Pipfile.lock b/bridges/python/Pipfile.lock index 899a89ae4..0e1093fcf 100644 --- a/bridges/python/Pipfile.lock +++ b/bridges/python/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "d42d4f9d305742c1a8c5f33e2ac31bd3a80854e6098a39fb1aef05a4b2f4fb86" + "sha256": "ea28410fac73af53495df76106e2b7aed0292f3d0f81e8b3c151932e133dceac" }, "pipfile-spec": 6, "requires": {}, @@ -110,6 +110,13 @@ ], "version": "==1.24.3" }, + "wikipedia": { + "hashes": [ + "sha256:db0fad1829fdd441b1852306e9856398204dc0786d2996dd2e0c8bb8e26133b2" + ], + "index": "pypi", + "version": "==1.4.0" + }, "wolframalpha": { "hashes": [ "sha256:35c68635c9460a25f3e7b3b3b5498d2d7a4d05667f7e30a3007b0e1c611f2599", diff --git a/packages/knowledge/README.md b/packages/knowledge/README.md index 69f9c5d92..a1036589a 100644 --- a/packages/knowledge/README.md +++ b/packages/knowledge/README.md @@ -3,15 +3,40 @@ The Knowledge package aims at answering general questions. #### Requirements +- wikipedia - wolframalpha #### Usage -1. Duplicate the file `packages/knowledge/config/config.sample.json` and rename it `config.json`. -2. Set your language and other settings. -3. This package needs a few libraries to work properly. To install it, from inside leon directory, `cd bridges/python` -4. `pipenv install wolframalpha` -5. Done! +1. Set up and account at [Wolfram Alpha API](http://developer.wolframalpha.com) and create an `app_id`. +2. Duplicate the file `packages/knowledge/config/config.sample.json` and rename it `config.json`. +3. Set your language and other settings. +4. This package needs a few libraries to work properly. To install it, from inside leon directory, `cd bridges/python` +5. `pipenv install wikipedia wolframalpha` +6. Done! + + +### Wikipedia + +``` +(en-US) +- "Search on Wikipedia GitHub" +``` + +#### Options + +- `lang`: Choose your language. Default: `en` +- `sentences`: Number of sentences to report. No greater than 10. + + +#### Links + +- [MediaWiki API](https://www.mediawiki.org/wiki/API:Main_page) +- [Wikipedia GitHub](https://github.com/goldsmith/Wikipedia) +- [Wikipedia Docs](https://wikipedia.readthedocs.io/en/latest/) + + +### Wolfram Alpha ``` (en-US) @@ -21,6 +46,7 @@ The Knowledge package aims at answering general questions. ``` #### Options +- `app_id`: Your app id. - `lang`: Choose your language. Default: `en` #### Links diff --git a/packages/knowledge/config/config.sample.json b/packages/knowledge/config/config.sample.json index 61bf69aee..33b1ec82a 100644 --- a/packages/knowledge/config/config.sample.json +++ b/packages/knowledge/config/config.sample.json @@ -1,4 +1,9 @@ { + "wikipedia": { + "lang": "en", + "sentences": 5, + "options": {} + }, "wolframalpha": { "app_id": "YOUR_APP_ID", "lang": "en", diff --git a/packages/knowledge/data/answers/en.json b/packages/knowledge/data/answers/en.json index bbd54d8ae..4b7a1bdf2 100644 --- a/packages/knowledge/data/answers/en.json +++ b/packages/knowledge/data/answers/en.json @@ -1,4 +1,27 @@ { + "wikipedia": { + "acquiring": [ + "Right away!", + "One second please.", + "Just a second...", + "Browsing Wikipedia right now..." + ], + "summary": [ + "%summary%" + ], + "disambiguation_error": [ + "Disambiguation error." + ], + "page_error": [ + "Your request does not match any page." + ], + "no_entities_error": [ + "Your request was not well formatted. Please, retry." + ], + "connection_error": [ + "I'm having issuse reaching the server." + ] + }, "wolframalpha": { "acquiring": [ "Right away!", diff --git a/packages/knowledge/data/expressions/en.json b/packages/knowledge/data/expressions/en.json index 862f3adb6..0cb56565a 100644 --- a/packages/knowledge/data/expressions/en.json +++ b/packages/knowledge/data/expressions/en.json @@ -1,4 +1,58 @@ { + "wikipedia": { + "summary": { + "expressions": [ + "Search on Wikipedia", + "Search on Wikipedia for", + "Search for ", + "Search", + "Look for", + "On wikipedia look for" + ], + "entities": [ + { + "type": "trim", + "name": "page", + "conditions": [ + { + "type": "after_last", + "from": "wikipedia" + }, + { + "type": "between", + "from": "wikipedia", + "to": "?" + }, + { + "type": "after_last", + "from": "for" + }, + { + "type": "between", + "from": "for", + "to": "?" + }, + { + "type": "between", + "from": "search", + "to": "on" + }, + { + "type": "after_last", + "from": "search" + } + ] + } + ] + }, + "random": { + "expressions": [ + "Search a random page on Wikipedia", + "Search a random Wikipedia page", + "Give me a random page on Wikipedia" + ] + } + }, "wolframalpha": { "query": { "expressions": [ diff --git a/packages/wikipedia/wikipedia.py b/packages/knowledge/wikipedia.py similarity index 100% rename from packages/wikipedia/wikipedia.py rename to packages/knowledge/wikipedia.py diff --git a/packages/wikipedia/README.md b/packages/wikipedia/README.md deleted file mode 100644 index a766f8174..000000000 --- a/packages/wikipedia/README.md +++ /dev/null @@ -1,30 +0,0 @@ -# Wikipedia Package - -The Wikipedia package allows your personal assistant to gather pieces of information from Wikipedia. - -#### Requirements -- wikipedia - -#### Usage - -1. Duplicate the file `packages/wikipedia/config/config.sample.json` and rename it `config.json`. -2. Set your language and other settings. -3. This package uses wikipedia. To install it: from inside leon directory `cd bridges/python` -4. `pipenv install wikipedia` -5. Done! - -``` -(en-US) -- "Search on Wikipedia GitHub" - -``` - -#### Options -- `lang`: Choose your language. Default: `en` -- `sentences`: Number of sentences to report. No greater than 10. - -#### Links - -- [MediaWiki API](https://www.mediawiki.org/wiki/API:Main_page) -- [Wikipedia GitHub](https://github.com/goldsmith/Wikipedia) -- [Wikipedia Docs](https://wikipedia.readthedocs.io/en/latest/) diff --git a/packages/wikipedia/config/.gitkeep b/packages/wikipedia/config/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/packages/wikipedia/config/config.sample.json b/packages/wikipedia/config/config.sample.json deleted file mode 100644 index 3d42ebb12..000000000 --- a/packages/wikipedia/config/config.sample.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "wikipedia": { - "lang": "en", - "sentences": 5, - "options": {} - } -} diff --git a/packages/wikipedia/data/.gitkeep b/packages/wikipedia/data/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/packages/wikipedia/data/answers/.gitkeep b/packages/wikipedia/data/answers/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/packages/wikipedia/data/answers/en.json b/packages/wikipedia/data/answers/en.json deleted file mode 100644 index a6423c727..000000000 --- a/packages/wikipedia/data/answers/en.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "wikipedia": { - "acquiring": [ - "Right away!", - "One second please.", - "Just a second...", - "Browsing Wikipedia right now..." - ], - "summary": [ - "%summary%" - ], - "disambiguation_error": [ - "Disambiguation error." - ], - "page_error": [ - "Your request does not match any page." - ], - "no_entities_error": [ - "Your request was not well formatted. Please, retry." - ], - "connection_error": [ - "I'm having issuse reaching the server." - ] - } -} diff --git a/packages/wikipedia/data/expressions/.gitkeep b/packages/wikipedia/data/expressions/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/packages/wikipedia/data/expressions/en.json b/packages/wikipedia/data/expressions/en.json deleted file mode 100644 index 283f32d9c..000000000 --- a/packages/wikipedia/data/expressions/en.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "wikipedia": { - "summary": { - "expressions": [ - "Search on Wikipedia", - "Search on Wikipedia for", - "Search for ", - "Search", - "Look for", - "On wikipedia look for" - ], - "entities": [ - { - "type": "trim", - "name": "page", - "conditions": [ - { - "type": "after_last", - "from": "wikipedia" - }, - { - "type": "between", - "from": "wikipedia", - "to": "?" - }, - { - "type": "after_last", - "from": "for" - }, - { - "type": "between", - "from": "for", - "to": "?" - }, - { - "type": "between", - "from": "search", - "to": "on" - }, - { - "type": "after_last", - "from": "search" - } - ] - } - ] - }, - "random": { - "expressions": [ - "Search a random page on Wikipedia", - "Search a random Wikipedia page", - "Give me a random page on Wikipedia" - ] - } - } -} diff --git a/packages/wikipedia/version.txt b/packages/wikipedia/version.txt deleted file mode 100644 index 6e8bf73aa..000000000 --- a/packages/wikipedia/version.txt +++ /dev/null @@ -1 +0,0 @@ -0.1.0 From 53d9d57a7dc86281bd02cca63ea9bc898100cd9d Mon Sep 17 00:00:00 2001 From: SuperHelios <20555025+Imperator26@users.noreply.github.com> Date: Fri, 14 Jun 2019 09:44:29 +0200 Subject: [PATCH 09/10] fix(package/knowledge): Now connection errors are handled correctly --- packages/knowledge/README.md | 15 +++++++++------ packages/knowledge/wikipedia.py | 18 ++++++++++++++++-- packages/knowledge/wolframalpha.py | 11 ++++++++++- 3 files changed, 35 insertions(+), 9 deletions(-) diff --git a/packages/knowledge/README.md b/packages/knowledge/README.md index a1036589a..68484a4cb 100644 --- a/packages/knowledge/README.md +++ b/packages/knowledge/README.md @@ -2,17 +2,13 @@ The Knowledge package aims at answering general questions. -#### Requirements -- wikipedia -- wolframalpha - #### Usage 1. Set up and account at [Wolfram Alpha API](http://developer.wolframalpha.com) and create an `app_id`. 2. Duplicate the file `packages/knowledge/config/config.sample.json` and rename it `config.json`. 3. Set your language and other settings. 4. This package needs a few libraries to work properly. To install it, from inside leon directory, `cd bridges/python` -5. `pipenv install wikipedia wolframalpha` +5. `pipenv install requests wikipedia wolframalpha` 6. Done! @@ -23,6 +19,10 @@ The Knowledge package aims at answering general questions. - "Search on Wikipedia GitHub" ``` +#### Requirements +- requests +- wikipedia + #### Options - `lang`: Choose your language. Default: `en` @@ -41,10 +41,13 @@ The Knowledge package aims at answering general questions. ``` (en-US) - "On Wolfram Alpha search for the integral of cos(x)" -- "On Wolfram Alpha search for the age of Barack Obama" +- "On Wolfram Alpha search for Barack Obama's age" ``` +#### Requirements +- wolframalpha + #### Options - `app_id`: Your app id. - `lang`: Choose your language. Default: `en` diff --git a/packages/knowledge/wikipedia.py b/packages/knowledge/wikipedia.py index 9785cec93..8b7143097 100644 --- a/packages/knowledge/wikipedia.py +++ b/packages/knowledge/wikipedia.py @@ -3,6 +3,7 @@ import wikipedia from wikipedia.exceptions import DisambiguationError, PageError +from requests.exceptions import ConnectionError import utils @@ -51,6 +52,13 @@ def summary(string, entities): utils.translate("page_error") ) + except ConnectionError: + return utils.output( + "end", + "connection_error", + utils.translate("connection_error") + ) + return utils.output( "end", "no_entities_error", @@ -67,8 +75,14 @@ def random(string, entities): "acquiring", utils.translate("acquiring") ) - - summary = wikipedia.summary(title=wikipedia.random()) + try: + summary = wikipedia.summary(title=wikipedia.random()) + except ConnectionError: + return utils.output( + "end", + "connection_error", + utils.translate("connection_error") + ) return utils.output( "end", diff --git a/packages/knowledge/wolframalpha.py b/packages/knowledge/wolframalpha.py index 520d5ae6b..45313a477 100644 --- a/packages/knowledge/wolframalpha.py +++ b/packages/knowledge/wolframalpha.py @@ -3,6 +3,8 @@ import utils +from urllib.error import URLError + import wolframalpha client = wolframalpha.Client(utils.config("app_id")) @@ -17,7 +19,14 @@ def query(strings, entities): for entity in entities: if entity["entity"] == "query": - res = client.query(entity["sourceText"]) + try: + res = client.query(entity["sourceText"]) + except URLError: + return utils.output( + "end", + "connection_error", + utils.translate("connection_error") + ) return utils.output( "end", From d7581506e4329c128af03ef252a4343d3bb5a4b3 Mon Sep 17 00:00:00 2001 From: SuperHelios <20555025+Imperator26@users.noreply.github.com> Date: Sun, 16 Jun 2019 13:20:38 +0200 Subject: [PATCH 10/10] fix(package/knowledge): Set a specific version for additional libraries --- bridges/python/Pipfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bridges/python/Pipfile b/bridges/python/Pipfile index 7e7d32125..98a1e077f 100644 --- a/bridges/python/Pipfile +++ b/bridges/python/Pipfile @@ -8,7 +8,7 @@ requests = "==2.21.0" pytube = "==9.5.0" tinydb = "==3.9.0" beautifulsoup4 = "==4.7.1" -wolframalpha = "*" -wikipedia = "*" +wolframalpha = "==3.0.1" +wikipedia = "==1.4.0" [dev-packages]