Skip to content

[Bug] heartbeat_timeout=_proto_to_non_zero_timedelta(start.WAIT_TIMEOUT) #1033

@AlmogBaku

Description

@AlmogBaku

What are you really trying to do?

Simple naive test

Describe the bug

Code below shows this weird error:

============================= test session starts ==============================
platform darwin -- Python 3.12.11, pytest-8.4.1, pluggy-1.6.0 -- /Users/almogbaku/projects/poc/workflows/.venv/bin/python3
cachedir: .pytest_cache
rootdir: /Users/almogbaku/projects/poc/workflows
configfile: pyproject.toml
plugins: asyncio-1.1.0, anyio-4.10.0, cov-6.2.1, langsmith-0.4.14, logfire-4.3.3
asyncio: mode=Mode.AUTO, asyncio_default_fixture_loop_scope=session, asyncio_default_test_loop_scope=function
collecting ... collected 1 item

src/test.py::test_workflow_basic_startup 
-------------------------------- live log call ---------------------------------
WARNING  temporalio.activity:_activity.py:365 Completing activity as failed
Traceback (most recent call last):
  File "/Users/almogbaku/projects/poc/workflows/.venv/lib/python3.12/site-packages/temporalio/worker/_activity.py", line 296, in _handle_start_activity_task
    result = await self._execute_activity(start, running_activity, task_token)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/almogbaku/projects/poc/workflows/.venv/lib/python3.12/site-packages/temporalio/worker/_activity.py", line 519, in _execute_activity
    heartbeat_timeout=_proto_to_non_zero_timedelta(start.WAIT_TIMEOUT)
                                                   ^^^^^^^^^^^^^^^^^^
AttributeError: WAIT_TIMEOUT
WARNING  temporalio.activity:_activity.py:365 Completing activity as failed
Traceback (most recent call last):
  File "/Users/almogbaku/projects/poc/workflows/.venv/lib/python3.12/site-packages/temporalio/worker/_activity.py", line 296, in _handle_start_activity_task
    result = await self._execute_activity(start, running_activity, task_token)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/almogbaku/projects/poc/workflows/.venv/lib/python3.12/site-packages/temporalio/worker/_activity.py", line 519, in _execute_activity
    heartbeat_timeout=_proto_to_non_zero_timedelta(start.WAIT_TIMEOUT)
                                                   ^^^^^^^^^^^^^^^^^^
AttributeError: WAIT_TIMEOUT
WARNING  temporalio.activity:_activity.py:365 Completing activity as failed
Traceback (most recent call last):
  File "/Users/almogbaku/projects/poc/workflows/.venv/lib/python3.12/site-packages/temporalio/worker/_activity.py", line 296, in _handle_start_activity_task
    result = await self._execute_activity(start, running_activity, task_token)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/almogbaku/projects/poc/workflows/.venv/lib/python3.12/site-packages/temporalio/worker/_activity.py", line 519, in _execute_activity
    heartbeat_timeout=_proto_to_non_zero_timedelta(start.WAIT_TIMEOUT)
                                                   ^^^^^^^^^^^^^^^^^^
AttributeError: WAIT_TIMEOUT
PASSED

============================== 1 passed in 0.39s ===============================

Minimal Reproduction

from datetime import timedelta

import pytest
from temporalio import activity, workflow
from temporalio.client import WorkflowExecutionStatus
from temporalio.testing import WorkflowEnvironment
from temporalio.worker import Worker


@workflow.defn
class BasicFake:
    def __init__(self) -> None:
        self._internal_state = {}

    @workflow.run
    async def run(self, input_params) -> None:
        self._internal_state = await workflow.execute_activity(
            'do_something',
            input_params,
            start_to_close_timeout=timedelta(seconds=30),
        )

        while True:
            await workflow.sleep(1)


@activity.defn(name="do_something")
async def mock_do_something(input_params: dict) -> str:
    return input_params['name']


@pytest.mark.asyncio
async def test_workflow_basic_startup():
    async with await WorkflowEnvironment.start_time_skipping() as env:
        async with Worker(
            env.client,
            task_queue="test-queue",
            workflows=[BasicFake],
            activities=[mock_do_something],
        ):
            handle = await env.client.start_workflow(
                'BasicFake',
                {"name": "test"},
                id="test-id",
                task_queue="test-queue",
            )
            await env.sleep(5)

            try:
                status = (await handle.describe()).status
                assert WorkflowExecutionStatus.RUNNING == status
            finally:
                await handle.terminate()

Environment/Versions

python sdk 1.15.0

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions