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 | 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()