Only load Python files from plugins-dir

Pull request #890. Thanks, @amjith!

* Load only python files from plugins-dir
* Add a test to verify non-python files are not loaded as plugins
pull/902/head
Amjith Ramanujam 2020-07-02 20:08:32 -07:00 zatwierdzone przez GitHub
rodzic 57879dc8b3
commit ea99a4431c
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: 4AEE18F83AFDEB23
2 zmienionych plików z 9 dodań i 3 usunięć

Wyświetl plik

@ -2,6 +2,7 @@ import asyncio
import asgi_csrf
import collections
import datetime
import glob
import hashlib
import inspect
import itertools
@ -263,9 +264,10 @@ class Datasette:
# Execute plugins in constructor, to ensure they are available
# when the rest of `datasette inspect` executes
if self.plugins_dir:
for filename in os.listdir(self.plugins_dir):
filepath = os.path.join(self.plugins_dir, filename)
mod = module_from_path(filepath, name=filename)
for filepath in glob.glob(os.path.join(self.plugins_dir, "*.py")):
if not os.path.isfile(filepath):
continue
mod = module_from_path(filepath, name=os.path.basename(filepath))
try:
pm.register(mod)
except ValueError:

Wyświetl plik

@ -30,6 +30,8 @@ def config_dir_client(tmp_path_factory):
plugins_dir = config_dir / "plugins"
plugins_dir.mkdir()
(plugins_dir / "hooray.py").write_text(PLUGIN, "utf-8")
(plugins_dir / "non_py_file.txt").write_text(PLUGIN, "utf-8")
(plugins_dir / ".mypy_cache").mkdir()
templates_dir = config_dir / "templates"
templates_dir.mkdir()
@ -95,6 +97,8 @@ def test_plugins(config_dir_client):
response = config_dir_client.get("/-/plugins.json")
assert 200 == response.status
assert "hooray.py" in {p["name"] for p in response.json}
assert "non_py_file.txt" not in {p["name"] for p in response.json}
assert "mypy_cache" not in {p["name"] for p in response.json}
def test_templates_and_plugin(config_dir_client):