Open simonw opened 3 months ago
Getting this working is a bit messy, I'm having to dig into changes like this:
diff --git a/datasette_public/__init__.py b/datasette_public/__init__.py
index d1750e4..7dc96db 100644
--- a/datasette_public/__init__.py
+++ b/datasette_public/__init__.py
@@ -78,6 +78,11 @@ def table_actions(datasette, actor, database, table):
return inner
+@hookimpl
+def view_actions(datasette, actor, database, view):
+ return table_actions(datasette, actor, database, view)
+
+
async def check_permissions(datasette, request, database):
if database == "_internal" or not await datasette.permission_allowed(
request.actor, "public-tables", resource=database, default=False
diff --git a/setup.py b/setup.py
index 6049b9a..bb7aacf 100644
--- a/setup.py
+++ b/setup.py
@@ -33,7 +33,7 @@ setup(
packages=["datasette_public"],
entry_points={"datasette": ["public = datasette_public"]},
install_requires=["datasette>=0.63"],
- extras_require={"test": ["pytest", "pytest-asyncio"]},
+ extras_require={"test": ["pytest", "pytest-asyncio", "packaging"]},
package_data={"datasette_public": ["templates/*"]},
python_requires=">=3.7",
)
diff --git a/tests/test_public.py b/tests/test_public.py
index 9a40336..5ebf1d6 100644
--- a/tests/test_public.py
+++ b/tests/test_public.py
@@ -1,4 +1,6 @@
from datasette.app import Datasette
+from datasette import version
+from packaging.version import parse
import pytest
import sqlite3
@@ -77,7 +79,11 @@ async def test_where_is_denied(tmpdir):
with conn:
conn.execute("create table _public_tables (table_name text primary key)")
conn.execute("insert into _public_tables (table_name) values (?)", ["t1"])
- ds = Datasette([db_path], metadata={"allow": False})
+ if parse(version.__version__) < parse("1.0a9"):
+ ds = Datasette([db_path], metadata={"allow": False})
+ else:
+ ds = Datasette([db_path], config={"allow": False})
+
await ds.invoke_startup()
# This should be allowed
assert (await ds.client.get("/data/t1")).status_code == 200
@@ -87,7 +93,10 @@ async def test_where_is_denied(tmpdir):
response = await ds.client.get("/data/t1?_where=1==1")
assert ">1 extra where clause<" not in response.text
# BUT they should be allowed to use it IF they have database permission
- ds._metadata_local["databases"] = {"data": {"allow": True}}
+ if parse(version.__version__) < parse("1.0a9"):
+ ds._metadata_local["databases"] = {"data": {"allow": True}}
+ else:
+ ds._config_local["databases"] = {"data": {"allow": True}}
response2 = await ds.client.get("/data/t1?_where=1==1")
assert ">1 extra where clause<" in response2.text
Refs:
6