Skip to content

Commit e327070

Browse files
committed
datasette-write-ui: Upgrade for Datasette 1.0a21
Refshttps://github.com/simonw/datasette/issues/2577
1 parent 5201e17 commit e327070

File tree

4 files changed

+44
-17
lines changed

4 files changed

+44
-17
lines changed

datasette_write_ui/__init__.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
from datasette import hookimpl
2+
from datasette.resources import TableResource
23
from . import routes
34

45

@@ -12,7 +13,13 @@ def register_routes():
1213

1314
@hookimpl
1415
def extra_template_vars(datasette, database, table):
16+
table_resource = TableResource(database=database, table=table)
17+
1518
async def permission_allowed(actor, permission):
16-
return await datasette.permission_allowed(actor, permission, (database, table))
19+
return await datasette.allowed(
20+
actor=actor,
21+
action=permission,
22+
resource=table_resource,
23+
)
1724

1825
return {"permission_allowed": permission_allowed}

datasette_write_ui/routes.py

Lines changed: 27 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
from datasette import Response, Forbidden
2+
from datasette.resources import TableResource
23
from datasette.utils import escape_sqlite, tilde_decode
34
from typing import Any, TypedDict
45

@@ -41,11 +42,6 @@ async def edit_row_details(scope, receive, datasette, request):
4142
table_name = request.args.get("table")
4243
pks = request.args.get("primaryKeys")
4344

44-
if not await datasette.permission_allowed(
45-
request.actor, "update-row", (db_name, table_name), default=False
46-
):
47-
raise Forbidden("update-row permissions required")
48-
4945
if db_name is None:
5046
return Response.json(
5147
{"ok": False, "message": "db parameter is required"}, status=400
@@ -56,6 +52,15 @@ async def edit_row_details(scope, receive, datasette, request):
5652
{"ok": False, "message": "table parameter is required"}, status=400
5753
)
5854

55+
table_resource = TableResource(database=db_name, table=table_name)
56+
57+
if not await datasette.allowed(
58+
actor=request.actor,
59+
action="update-row",
60+
resource=table_resource,
61+
):
62+
raise Forbidden("update-row permissions required")
63+
5964
if pks is None:
6065
return Response.json(
6166
{"ok": False, "message": "primaryKeys parameter is required"}, status=400
@@ -134,8 +139,22 @@ async def insert_row_details(scope, receive, datasette, request):
134139
db_name = request.args.get("db")
135140
table_name = request.args.get("table")
136141

137-
if not await datasette.permission_allowed(
138-
request.actor, "insert-row", (db_name, table_name)
142+
if db_name is None:
143+
return Response.json(
144+
{"ok": False, "message": "db parameter is required"}, status=400
145+
)
146+
147+
if table_name is None:
148+
return Response.json(
149+
{"ok": False, "message": "table parameter is required"}, status=400
150+
)
151+
152+
table_resource = TableResource(database=db_name, table=table_name)
153+
154+
if not await datasette.allowed(
155+
actor=request.actor,
156+
action="insert-row",
157+
resource=table_resource,
139158
):
140159
raise Forbidden("insert-row permissions required")
141160

@@ -151,8 +170,4 @@ async def insert_row_details(scope, receive, datasette, request):
151170
InsertRowDetailField(name=name, affinity=affinity_from_type(type))
152171
)
153172

154-
return Response.json(
155-
{
156-
"fields": insertable_columns,
157-
}
158-
)
173+
return Response.json({"fields": insertable_columns})

pyproject.toml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,13 @@ version = "0.0.1a13"
44
description = "Datasette UI plugin for editing and inserting rows"
55
readme = "README.md"
66
authors = [{name = "Alex Garcia"}]
7-
license = {file = "LICENSE"}
7+
license = "Apache-2.0"
88
classifiers=[
99
"Framework :: Datasette",
1010
]
11-
requires-python = ">=3.9"
11+
requires-python = ">=3.10"
1212
dependencies = [
13-
"datasette==1.0a19",
13+
"datasette>=1.0a21",
1414
"sqlite-utils>=3.38",
1515
]
1616

tests/test_datasette_write_ui.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,9 @@ def students_db_path(tmpdir):
3939
students_metadata = {
4040
"databases": {
4141
"students": {
42-
"tables": {"students": {"permissions": {"insert-row": {"id": "apollo"}}}}
42+
"tables": {
43+
"students": {"permissions": {"insert-row": {"id": ["apollo", "root"]}}}
44+
}
4345
}
4446
}
4547
}
@@ -63,6 +65,7 @@ async def test_permissions(students_db_path):
6365
[students_db_path],
6466
config=students_metadata,
6567
)
68+
datasette.root_enabled = True
6669
response = await datasette.client.get("/students/students")
6770
permissions = get_permission_from_table_html(response.text)
6871
assert permissions["can_delete"] == False
@@ -100,6 +103,7 @@ async def test_permissions(students_db_path):
100103
@pytest.mark.asyncio
101104
async def test_insert_row_details_route(students_db_path):
102105
datasette = Datasette([students_db_path])
106+
datasette.root_enabled = True
103107

104108
response = await datasette.client.get(
105109
"/-/datasette-write-ui/insert-row-details?db=students&table=students",
@@ -123,6 +127,7 @@ async def test_insert_row_details_route(students_db_path):
123127
@pytest.mark.asyncio
124128
async def test_update_row_details_route(students_db_path):
125129
datasette = Datasette([students_db_path])
130+
datasette.root_enabled = True
126131

127132
response = await datasette.client.get(
128133
"/-/datasette-write-ui/edit-row-details?db=students&table=students",

0 commit comments

Comments
 (0)