From a7fc94a1efca912b27315b6c9005c5a2361ea1bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cle=CC=81ment=20Doumouro?= Date: Wed, 20 May 2026 12:15:02 +0200 Subject: [PATCH 1/2] feature(datashare-python): allow skipping config discovery --- .../datashare_python/cli/worker.py | 16 ++++++- .../datashare_python/discovery.py | 11 ++++- datashare-python/tests/cli/test_worker.py | 42 +++++++++++++++++++ datashare-python/tests/test_discovery.py | 11 +++++ 4 files changed, 77 insertions(+), 3 deletions(-) diff --git a/datashare-python/datashare_python/cli/worker.py b/datashare-python/datashare_python/cli/worker.py index a67b2fef..a4224a0b 100644 --- a/datashare-python/datashare_python/cli/worker.py +++ b/datashare-python/datashare_python/cli/worker.py @@ -29,6 +29,10 @@ "path to a worker config YAML file," " if not provided will load worker configuration from env variables" ) +_START_WORKER_SKIP_CONFIG_CLS_DISCOVERY = ( + "skip config class discovery (useful to run a workflow worker from different app)" +) + _WORKER_QUEUE_HELP = "worker task queue" _TEMPORAL_NAMESPACE_HELP = "worker temporal namespace" @@ -105,9 +109,19 @@ async def start( str | None, typer.Option("--temporal-namespace", "-ns", help=_TEMPORAL_NAMESPACE_HELP), ] = None, + *, + skip_config_discovery: Annotated[ + bool, + typer.Option( + "--skip-config-discovery", help=_START_WORKER_SKIP_CONFIG_CLS_DISCOVERY + ), + ] = False, ) -> None: registered_wfs, registered_acts, registered_deps, worker_config_cls = discover( - workflows, act_names=activities, deps_name=dependencies + workflows, + act_names=activities, + deps_name=dependencies, + skip_config=skip_config_discovery, ) if config_path is not None: with config_path.open() as f: diff --git a/datashare-python/datashare_python/discovery.py b/datashare-python/datashare_python/discovery.py index 691186b2..75b066cd 100644 --- a/datashare-python/datashare_python/discovery.py +++ b/datashare-python/datashare_python/discovery.py @@ -33,7 +33,11 @@ def discover( - wf_names: list[str] | None, *, act_names: list[str] | None, deps_name: str | None + wf_names: list[str] | None, + *, + act_names: list[str] | None, + deps_name: str | None, + skip_config: bool = False, ) -> _Discovery: discovered = "" wfs = None @@ -80,7 +84,10 @@ def discover( f"- {n_deps} dependenc{'ies' if n_deps > 1 else 'y'}:" f" {', '.join(deps_names)}" ) - worker_config_cls = discover_worker_config_cls() + if not skip_config: + worker_config_cls = discover_worker_config_cls() + else: + worker_config_cls = WorkerConfig discovered += f"- worker config class: {worker_config_cls}" logger.info("discovered:\n%s", discovered) return wfs, acts, deps, worker_config_cls diff --git a/datashare-python/tests/cli/test_worker.py b/datashare-python/tests/cli/test_worker.py index 89a5d398..e27d9982 100644 --- a/datashare-python/tests/cli/test_worker.py +++ b/datashare-python/tests/cli/test_worker.py @@ -62,3 +62,45 @@ async def test_start_workers( - 1 activity: create-translation-batches - 3 dependencies: set_worker_config, set_loggers, set_es_client""" assert expected in result.stderr + + +async def test_start_workers_skipping_config_discovery( + typer_asyncio_patch, # noqa: ANN001, ARG001 + monkeypatch: MonkeyPatch, + capsys: CaptureFixture[str], +) -> None: + # Given + runner = CliRunner() + monkeypatch.setattr(DatashareWorker, "__aenter__", _mock_worker__aenter__) + monkeypatch.setattr(DatashareWorker, "__aexit__", _mock_worker__aexit__) + monkeypatch.setattr(DatashareWorker, "is_done", _mock_worker_is_done) + with capsys.disabled(): + # When + result = runner.invoke( + cli_app, + [ + "worker", + "start", + "--queue", + "cpu", + "--skip-config-discovery", + "--activities", + "ping", + "--activities", + "create-translation-batches", + "--workflows", + "ping", + "--dependencies", + "base", + "--temporal-address", + "localhost:7233", + ], + catch_exceptions=False, + ) + # Then + assert result.exit_code == 0 + expected = """discovered: +- 1 workflow: ping +- 1 activity: create-translation-batches +- 3 dependencies: set_worker_config, set_loggers, set_es_client""" + assert expected in result.stderr diff --git a/datashare-python/tests/test_discovery.py b/datashare-python/tests/test_discovery.py index 17bbca55..db75b17c 100644 --- a/datashare-python/tests/test_discovery.py +++ b/datashare-python/tests/test_discovery.py @@ -5,7 +5,9 @@ import datashare_python import pytest from _pytest.monkeypatch import MonkeyPatch +from datashare_python.config import WorkerConfig from datashare_python.discovery import ( + discover, discover_activities, discover_dependencies, discover_worker_config_cls, @@ -55,6 +57,15 @@ def test_discover_activities(names: list[str], expected_activities: set[str]) -> assert activities == expected_activities +def test_discover_skip_config_discover() -> None: + # When + _, _, _, workflow_cls = discover( + ["ping"], act_names=None, deps_name=None, skip_config=True + ) + # Then + assert workflow_cls == WorkerConfig + + def test_discover_dependencies() -> None: # When name = "base" From 69f91d46894653cafe0eabaf247599f60f492733 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cle=CC=81ment=20Doumouro?= Date: Wed, 20 May 2026 12:15:53 +0200 Subject: [PATCH 2/2] feature(workflows-worker): skip config discovery --- workers/workflows-worker/all_workflows_worker_entrypoint.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/workers/workflows-worker/all_workflows_worker_entrypoint.sh b/workers/workflows-worker/all_workflows_worker_entrypoint.sh index 835dad6e..01e66074 100755 --- a/workers/workflows-worker/all_workflows_worker_entrypoint.sh +++ b/workers/workflows-worker/all_workflows_worker_entrypoint.sh @@ -2,6 +2,7 @@ set -e uv run --no-sync datashare-python worker start \ + --skip-config-discovery \ --queue datashare.workflows \ --workflow asr.transcription \ --workflow translation