mirror of
https://github.com/simonw/datasette.git
synced 2026-09-02 22:54:08 +02:00
Apply ruff 0.16 and black fixes
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012U7coQfVu8nK2R4q2mCULA
This commit is contained in:
parent
b276bc3aa2
commit
32b04b44cd
3 changed files with 18 additions and 22 deletions
|
|
@ -31,7 +31,7 @@ import datetime
|
|||
import functools
|
||||
import inspect
|
||||
import logging
|
||||
from typing import Awaitable, Callable, List, Optional
|
||||
from collections.abc import Awaitable, Callable
|
||||
|
||||
logger = logging.getLogger("datasette.background_tasks")
|
||||
|
||||
|
|
@ -40,7 +40,7 @@ def _utcnow_iso() -> str:
|
|||
return datetime.datetime.now(datetime.timezone.utc).isoformat()
|
||||
|
||||
|
||||
def _resolve_plugin_name(func: Callable) -> Optional[str]:
|
||||
def _resolve_plugin_name(func: Callable) -> str | None:
|
||||
"""Best-effort, cheap attempt to work out which registered plugin a
|
||||
background-task function belongs to, for the ``.plugin`` field on
|
||||
:class:`BackgroundTask` (used by ``/-/tasks`` and logs).
|
||||
|
|
@ -76,7 +76,7 @@ def _resolve_plugin_name(func: Callable) -> Optional[str]:
|
|||
plugin_module_name + "."
|
||||
):
|
||||
return pm.get_name(plugin)
|
||||
except Exception:
|
||||
except Exception: # noqa: BLE001
|
||||
# Never let plugin-name resolution break task registration.
|
||||
return None
|
||||
return None
|
||||
|
|
@ -95,17 +95,17 @@ class BackgroundTask:
|
|||
def __init__(
|
||||
self,
|
||||
name: str,
|
||||
func: Callable[["object"], Awaitable[None]],
|
||||
plugin: Optional[str] = None,
|
||||
func: Callable[[object], Awaitable[None]],
|
||||
plugin: str | None = None,
|
||||
):
|
||||
self.name = name
|
||||
self.state = "registered"
|
||||
self.task: Optional[asyncio.Task] = None
|
||||
self.exception: Optional[BaseException] = None
|
||||
self.started_at: Optional[str] = None
|
||||
self.task: asyncio.Task | None = None
|
||||
self.exception: BaseException | None = None
|
||||
self.started_at: str | None = None
|
||||
self.plugin = plugin
|
||||
self._func = func
|
||||
self._supervisor: Optional["BackgroundTaskSupervisor"] = None
|
||||
self._supervisor: BackgroundTaskSupervisor | None = None
|
||||
|
||||
def cancel(self) -> None:
|
||||
"""Cancel this task.
|
||||
|
|
@ -152,7 +152,7 @@ class BackgroundTaskSupervisor:
|
|||
|
||||
def __init__(self, datasette):
|
||||
self._datasette = datasette
|
||||
self._tasks: List[BackgroundTask] = []
|
||||
self._tasks: list[BackgroundTask] = []
|
||||
self._names = set()
|
||||
self._launched = False
|
||||
self._lock = asyncio.Lock()
|
||||
|
|
@ -233,7 +233,7 @@ class BackgroundTaskSupervisor:
|
|||
", ".join(names),
|
||||
)
|
||||
|
||||
def tasks(self) -> List[BackgroundTask]:
|
||||
def tasks(self) -> list[BackgroundTask]:
|
||||
"""Return every registered :class:`BackgroundTask`, launched or
|
||||
not, in registration order. Used by the ``/-/tasks`` debug
|
||||
endpoint.
|
||||
|
|
@ -249,8 +249,6 @@ def _on_task_done(handle: BackgroundTask, task: asyncio.Task) -> None:
|
|||
if exc is not None:
|
||||
handle.state = "crashed"
|
||||
handle.exception = exc
|
||||
logger.error(
|
||||
"Background task %r crashed", handle.name, exc_info=exc
|
||||
)
|
||||
logger.error("Background task %r crashed", handle.name, exc_info=exc)
|
||||
return
|
||||
handle.state = "completed"
|
||||
|
|
|
|||
|
|
@ -147,9 +147,7 @@ async def test_launch_waits_for_every_startup_hook_before_running_any_task():
|
|||
assert hook_call_order == ["A", "B"]
|
||||
|
||||
handles = ds._background_tasks.tasks()
|
||||
await asyncio.wait_for(
|
||||
asyncio.gather(*[h.task for h in handles]), timeout=5
|
||||
)
|
||||
await asyncio.wait_for(asyncio.gather(*[h.task for h in handles]), timeout=5)
|
||||
# Yet by the time task-a's own body executed (after launch, which
|
||||
# only happens once every startup hook - including B's - has
|
||||
# finished), task-b was already registered.
|
||||
|
|
|
|||
|
|
@ -64,20 +64,20 @@ def test_serve_with_get_does_not_launch_background_tasks(tmp_path_factory):
|
|||
sentinel = plugins_dir / "sentinel.txt"
|
||||
(plugins_dir / "bg_task_for_get.py").write_text(
|
||||
textwrap.dedent(
|
||||
"""
|
||||
f"""
|
||||
from datasette import hookimpl
|
||||
|
||||
@hookimpl
|
||||
def startup(datasette):
|
||||
async def inner():
|
||||
async def task(datasette):
|
||||
with open("{sentinel}", "w") as fp:
|
||||
with open("{sentinel!s}", "w") as fp:
|
||||
fp.write("ran")
|
||||
|
||||
datasette.add_background_task(task, name="get-sentinel-task")
|
||||
|
||||
return inner
|
||||
""".format(sentinel=str(sentinel)),
|
||||
""",
|
||||
),
|
||||
"utf-8",
|
||||
)
|
||||
|
|
@ -96,9 +96,9 @@ def test_serve_with_get_does_not_launch_background_tasks(tmp_path_factory):
|
|||
assert result.exit_code == 0, result.output
|
||||
assert not sentinel.exists()
|
||||
|
||||
to_unregister = [
|
||||
to_unregister = next(
|
||||
p for p in pm.get_plugins() if p.__name__ == "bg_task_for_get.py"
|
||||
][0]
|
||||
)
|
||||
pm.unregister(to_unregister)
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue