mirror of
https://github.com/simonw/datasette.git
synced 2025-12-10 16:51:24 +01:00
parent
06b442c894
commit
e7ed948238
4 changed files with 27 additions and 26 deletions
|
|
@ -1,6 +1,8 @@
|
||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
from asgi_csrf import Errors
|
from asgi_csrf import Errors
|
||||||
import asyncio
|
import asyncio
|
||||||
from typing import Any, Dict, Iterable, List, Optional, Sequence, Tuple, Union
|
from typing import Any, Dict, Iterable, List
|
||||||
import asgi_csrf
|
import asgi_csrf
|
||||||
import collections
|
import collections
|
||||||
import dataclasses
|
import dataclasses
|
||||||
|
|
@ -126,10 +128,10 @@ class PermissionCheck:
|
||||||
"""Represents a logged permission check for debugging purposes."""
|
"""Represents a logged permission check for debugging purposes."""
|
||||||
|
|
||||||
when: str
|
when: str
|
||||||
actor: Optional[Dict[str, Any]]
|
actor: Dict[str, Any] | None
|
||||||
action: str
|
action: str
|
||||||
parent: Optional[str]
|
parent: str | None
|
||||||
child: Optional[str]
|
child: str | None
|
||||||
result: bool
|
result: bool
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -656,10 +658,10 @@ class Datasette:
|
||||||
self,
|
self,
|
||||||
actor_id: str,
|
actor_id: str,
|
||||||
*,
|
*,
|
||||||
expires_after: Optional[int] = None,
|
expires_after: int | None = None,
|
||||||
restrict_all: Optional[Iterable[str]] = None,
|
restrict_all: Iterable[str] | None = None,
|
||||||
restrict_database: Optional[Dict[str, Iterable[str]]] = None,
|
restrict_database: Dict[str, Iterable[str]] | None = None,
|
||||||
restrict_resource: Optional[Dict[str, Dict[str, Iterable[str]]]] = None,
|
restrict_resource: Dict[str, Dict[str, Iterable[str]]] | None = None,
|
||||||
):
|
):
|
||||||
token = {"a": actor_id, "t": int(time.time())}
|
token = {"a": actor_id, "t": int(time.time())}
|
||||||
if expires_after:
|
if expires_after:
|
||||||
|
|
@ -1021,8 +1023,8 @@ class Datasette:
|
||||||
return crumbs
|
return crumbs
|
||||||
|
|
||||||
async def actors_from_ids(
|
async def actors_from_ids(
|
||||||
self, actor_ids: Iterable[Union[str, int]]
|
self, actor_ids: Iterable[str | int]
|
||||||
) -> Dict[Union[id, str], Dict]:
|
) -> Dict[int | str, Dict]:
|
||||||
result = pm.hook.actors_from_ids(datasette=self, actor_ids=actor_ids)
|
result = pm.hook.actors_from_ids(datasette=self, actor_ids=actor_ids)
|
||||||
if result is None:
|
if result is None:
|
||||||
# Do the default thing
|
# Do the default thing
|
||||||
|
|
@ -1037,9 +1039,7 @@ class Datasette:
|
||||||
for hook in pm.hook.track_event(datasette=self, event=event):
|
for hook in pm.hook.track_event(datasette=self, event=event):
|
||||||
await await_me_maybe(hook)
|
await await_me_maybe(hook)
|
||||||
|
|
||||||
def resource_for_action(
|
def resource_for_action(self, action: str, parent: str | None, child: str | None):
|
||||||
self, action: str, parent: Optional[str], child: Optional[str]
|
|
||||||
):
|
|
||||||
"""
|
"""
|
||||||
Create a Resource instance for the given action with parent/child values.
|
Create a Resource instance for the given action with parent/child values.
|
||||||
|
|
||||||
|
|
@ -1072,7 +1072,7 @@ class Datasette:
|
||||||
self,
|
self,
|
||||||
actor: dict,
|
actor: dict,
|
||||||
action: str,
|
action: str,
|
||||||
resource: Optional["Resource"] = None,
|
resource: "Resource" | None = None,
|
||||||
):
|
):
|
||||||
"""
|
"""
|
||||||
Check if actor can see a resource and if it's private.
|
Check if actor can see a resource and if it's private.
|
||||||
|
|
@ -1587,10 +1587,10 @@ class Datasette:
|
||||||
|
|
||||||
async def render_template(
|
async def render_template(
|
||||||
self,
|
self,
|
||||||
templates: Union[List[str], str, Template],
|
templates: List[str] | str | Template,
|
||||||
context: Optional[Union[Dict[str, Any], Context]] = None,
|
context: Dict[str, Any] | Context | None = None,
|
||||||
request: Optional[Request] = None,
|
request: Request | None = None,
|
||||||
view_name: Optional[str] = None,
|
view_name: str | None = None,
|
||||||
):
|
):
|
||||||
if not self._startup_invoked:
|
if not self._startup_invoked:
|
||||||
raise Exception("render_template() called before await ds.invoke_startup()")
|
raise Exception("render_template() called before await ds.invoke_startup()")
|
||||||
|
|
@ -1689,7 +1689,7 @@ class Datasette:
|
||||||
return await template.render_async(template_context)
|
return await template.render_async(template_context)
|
||||||
|
|
||||||
def set_actor_cookie(
|
def set_actor_cookie(
|
||||||
self, response: Response, actor: dict, expire_after: Optional[int] = None
|
self, response: Response, actor: dict, expire_after: int | None = None
|
||||||
):
|
):
|
||||||
data = {"a": actor}
|
data = {"a": actor}
|
||||||
if expire_after:
|
if expire_after:
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,7 @@ class Event(ABC):
|
||||||
created: datetime = field(
|
created: datetime = field(
|
||||||
init=False, default_factory=lambda: datetime.now(timezone.utc)
|
init=False, default_factory=lambda: datetime.now(timezone.utc)
|
||||||
)
|
)
|
||||||
actor: Optional[dict]
|
actor: dict | None
|
||||||
|
|
||||||
def properties(self):
|
def properties(self):
|
||||||
properties = asdict(self)
|
properties = asdict(self)
|
||||||
|
|
@ -63,7 +63,7 @@ class CreateTokenEvent(Event):
|
||||||
"""
|
"""
|
||||||
|
|
||||||
name = "create-token"
|
name = "create-token"
|
||||||
expires_after: Optional[int]
|
expires_after: int | None
|
||||||
restrict_all: list
|
restrict_all: list
|
||||||
restrict_database: dict
|
restrict_database: dict
|
||||||
restrict_resource: dict
|
restrict_resource: dict
|
||||||
|
|
|
||||||
|
|
@ -14,9 +14,9 @@ class Resource(ABC):
|
||||||
|
|
||||||
# Class-level metadata (subclasses must define these)
|
# Class-level metadata (subclasses must define these)
|
||||||
name: str = None # e.g., "table", "database", "model"
|
name: str = None # e.g., "table", "database", "model"
|
||||||
parent_name: Optional[str] = None # e.g., "database" for tables
|
parent_name: str | None = None # e.g., "database" for tables
|
||||||
|
|
||||||
def __init__(self, parent: Optional[str] = None, child: Optional[str] = None):
|
def __init__(self, parent: str | None = None, child: str | None = None):
|
||||||
"""
|
"""
|
||||||
Create a resource instance.
|
Create a resource instance.
|
||||||
|
|
||||||
|
|
@ -98,8 +98,8 @@ class PermissionSQL:
|
||||||
@dataclass
|
@dataclass
|
||||||
class Permission:
|
class Permission:
|
||||||
name: str
|
name: str
|
||||||
abbr: Optional[str]
|
abbr: str | None
|
||||||
description: Optional[str]
|
description: str | None
|
||||||
takes_database: bool
|
takes_database: bool
|
||||||
takes_resource: bool
|
takes_resource: bool
|
||||||
default: bool
|
default: bool
|
||||||
|
|
|
||||||
|
|
@ -1 +1,2 @@
|
||||||
line-length = 160
|
line-length = 160
|
||||||
|
target-version = "py310"
|
||||||
Loading…
Add table
Add a link
Reference in a new issue