Use ruff to upgrade Optional[x] to x | None

Refs #2545
This commit is contained in:
Simon Willison 2025-10-26 10:39:15 -07:00
commit e7ed948238
4 changed files with 27 additions and 26 deletions

View file

@ -1,6 +1,8 @@
from __future__ import annotations
from asgi_csrf import Errors
import asyncio
from typing import Any, Dict, Iterable, List, Optional, Sequence, Tuple, Union
from typing import Any, Dict, Iterable, List
import asgi_csrf
import collections
import dataclasses
@ -126,10 +128,10 @@ class PermissionCheck:
"""Represents a logged permission check for debugging purposes."""
when: str
actor: Optional[Dict[str, Any]]
actor: Dict[str, Any] | None
action: str
parent: Optional[str]
child: Optional[str]
parent: str | None
child: str | None
result: bool
@ -656,10 +658,10 @@ class Datasette:
self,
actor_id: str,
*,
expires_after: Optional[int] = None,
restrict_all: Optional[Iterable[str]] = None,
restrict_database: Optional[Dict[str, Iterable[str]]] = None,
restrict_resource: Optional[Dict[str, Dict[str, Iterable[str]]]] = None,
expires_after: int | None = None,
restrict_all: Iterable[str] | None = None,
restrict_database: Dict[str, Iterable[str]] | None = None,
restrict_resource: Dict[str, Dict[str, Iterable[str]]] | None = None,
):
token = {"a": actor_id, "t": int(time.time())}
if expires_after:
@ -1021,8 +1023,8 @@ class Datasette:
return crumbs
async def actors_from_ids(
self, actor_ids: Iterable[Union[str, int]]
) -> Dict[Union[id, str], Dict]:
self, actor_ids: Iterable[str | int]
) -> Dict[int | str, Dict]:
result = pm.hook.actors_from_ids(datasette=self, actor_ids=actor_ids)
if result is None:
# Do the default thing
@ -1037,9 +1039,7 @@ class Datasette:
for hook in pm.hook.track_event(datasette=self, event=event):
await await_me_maybe(hook)
def resource_for_action(
self, action: str, parent: Optional[str], child: Optional[str]
):
def resource_for_action(self, action: str, parent: str | None, child: str | None):
"""
Create a Resource instance for the given action with parent/child values.
@ -1072,7 +1072,7 @@ class Datasette:
self,
actor: dict,
action: str,
resource: Optional["Resource"] = None,
resource: "Resource" | None = None,
):
"""
Check if actor can see a resource and if it's private.
@ -1587,10 +1587,10 @@ class Datasette:
async def render_template(
self,
templates: Union[List[str], str, Template],
context: Optional[Union[Dict[str, Any], Context]] = None,
request: Optional[Request] = None,
view_name: Optional[str] = None,
templates: List[str] | str | Template,
context: Dict[str, Any] | Context | None = None,
request: Request | None = None,
view_name: str | None = None,
):
if not self._startup_invoked:
raise Exception("render_template() called before await ds.invoke_startup()")
@ -1689,7 +1689,7 @@ class Datasette:
return await template.render_async(template_context)
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}
if expire_after:

View file

@ -14,7 +14,7 @@ class Event(ABC):
created: datetime = field(
init=False, default_factory=lambda: datetime.now(timezone.utc)
)
actor: Optional[dict]
actor: dict | None
def properties(self):
properties = asdict(self)
@ -63,7 +63,7 @@ class CreateTokenEvent(Event):
"""
name = "create-token"
expires_after: Optional[int]
expires_after: int | None
restrict_all: list
restrict_database: dict
restrict_resource: dict

View file

@ -14,9 +14,9 @@ class Resource(ABC):
# Class-level metadata (subclasses must define these)
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.
@ -98,8 +98,8 @@ class PermissionSQL:
@dataclass
class Permission:
name: str
abbr: Optional[str]
description: Optional[str]
abbr: str | None
description: str | None
takes_database: bool
takes_resource: bool
default: bool

View file

@ -1 +1,2 @@
line-length = 160
target-version = "py310"