simonw / datasette-public

Make specific Datasette tables visible to the public
Apache License 2.0
1 stars 0 forks source link

Test against Datasette 1.0, switch to _internal #8

Open simonw opened 3 months ago

simonw commented 3 months ago

Refs:

simonw commented 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