From ae764642731f96a0b48635179709f4ad59b026af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Du=C5=A1an=20Jolovi=C4=87?= Date: Sat, 9 May 2026 01:51:30 +0200 Subject: [PATCH 1/2] Share server submit option parsing --- src/cashet/_client_base.py | 14 +++++++++++++- src/cashet/server.py | 15 +++------------ 2 files changed, 16 insertions(+), 13 deletions(-) diff --git a/src/cashet/_client_base.py b/src/cashet/_client_base.py index e63b5f2..bbdef81 100644 --- a/src/cashet/_client_base.py +++ b/src/cashet/_client_base.py @@ -1,7 +1,7 @@ from __future__ import annotations import os -from collections.abc import Callable +from collections.abc import Callable, Mapping from datetime import timedelta from pathlib import Path from typing import Any @@ -85,6 +85,18 @@ def resolve_status(status: TaskStatus | str | None) -> TaskStatus | None: return status +def resolve_submit_options( + data: Mapping[str, Any], +) -> tuple[bool, dict[str, str], int, bool, Any, Any]: + cache = data.get("cache") or True + tags = data.get("tags") or {} + retries = data.get("retries", 0) + force = data.get("force", False) + timeout = data.get("timeout") + ttl = data.get("ttl") + return cache, tags, retries, force, timeout, ttl + + async def load_result(commit: Commit, store: AsyncStore, serializer: Serializer) -> Any: if commit.output_ref is None: return None diff --git a/src/cashet/server.py b/src/cashet/server.py index 1f35634..5467db4 100644 --- a/src/cashet/server.py +++ b/src/cashet/server.py @@ -17,6 +17,7 @@ from starlette.responses import JSONResponse from starlette.routing import Route +from cashet._client_base import resolve_submit_options from cashet.async_client import AsyncClient from cashet.client import Client @@ -198,12 +199,7 @@ async def _async_submit(request: Request) -> JSONResponse: if error is not None: return error - cache = data.get("cache", True) - tags = data.get("tags", {}) - retries = data.get("retries", 0) - force = data.get("force", False) - timeout = data.get("timeout") - ttl = data.get("ttl") + cache, tags, retries, force, timeout, ttl = resolve_submit_options(data) start = time.perf_counter() try: @@ -404,12 +400,7 @@ async def _submit(request: Request) -> JSONResponse: if error is not None: return error - cache = data.get("cache", True) - tags = data.get("tags", {}) - retries = data.get("retries", 0) - force = data.get("force", False) - timeout = data.get("timeout") - ttl = data.get("ttl") + cache, tags, retries, force, timeout, ttl = resolve_submit_options(data) start = time.perf_counter() From 0cbd2c67d995fa3d3a14345e7b4dceb29b8fcf96 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Du=C5=A1an=20Jolovi=C4=87?= Date: Sat, 9 May 2026 01:52:25 +0200 Subject: [PATCH 2/2] Document shared server submit options --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index d9b1416..f7b5d54 100644 --- a/README.md +++ b/README.md @@ -470,6 +470,8 @@ import requests r = requests.post("http://localhost:8000/submit", json={"task": "add", "args": [3, 4]}) ``` +The sync and async server handlers accept the same submit options. + Endpoints: | Method | Path | Description |