Temporalio

Latest version: v1.10.0

Safety actively analyzes 723217 Python packages for vulnerabilities to keep your Python projects secure.

Scan your dependencies

Page 1 of 4

1.10.0

Get from [PyPI](https://pypi.org/project/temporalio/)

Highlights

Python 3.13 is officially supported
Python 3.13 is now officially supported and Python 3.8 is no longer supported.

Pydantic is officially supported
The SDK now contains a data converter that supports conversion of all types supported by Pydantic to and from JSON. In addition to Pydantic models, these include all `json.dump`-able types, various non-`json.dump`-able standard library types such as dataclasses, types from the datetime module, sets, UUID, etc, and custom types composed of any of these. Usage:

python
from temporalio.client import Client
from temporalio.contrib.pydantic import pydantic_data_converter

client = Client(data_converter=pydantic_data_converter, ...)


This data converter supports Pydantic v2 only.

See https://github.com/temporalio/sdk-python?tab=readme-ov-file#data-conversion for details


Specific Changes

2025-01-10 - 7af48a74 - Drop Python 3.8, add 3.13 (694)
2025-01-15 - 7665bf5c - Useful event ordering tests from discarded changes to event loop (729)
2025-01-16 - 1a68b58c - More precise logging (734)
2025-01-16 - bd44efa9 - Respond to server changes to Update error (735)
2025-01-17 - 9da5e69b - Use non-test name for workflow classes (736)
2025-01-17 - 9e343014 - Add tests of asyncio.Lock and asyncio.Semaphore usage (567)
2025-01-18 - effc857c - Run-time check for update validator signature (723)
2025-01-21 - 154aab99 - Fix issue when failing to convert failure (727)
2025-01-21 - fe46e1ac - Remove "experimental" notices from update APIs (707)
2025-01-22 - 1d89d758 - Fix some lint errors (744)
2025-01-23 - 150878fd - Do not include `self` parameter (746)
2025-01-23 - 45aa3a2c - Expose http option for OTLP (741)
2025-01-23 - 4892714b - Support passing through all modules (737)
2025-01-24 - 044b1dee - Add workflow.instance() API for obtaining current workflow instance (739)
2025-01-24 - 07d3567c - chore: remove Python < 3.9 support (728) (730)
2025-01-25 - 35a0e6c9 - Update core (745)
2025-01-27 - 51f4b66f - Update schedule search attributes (753)
2025-02-07 - acde42cc - Accept search attributes for dev server (562)
2025-02-13 - 77a15028 - Remove experimental warnings from stable APIs (766)
2025-02-13 - b3f36621 - Pydantic data converter (757)
2025-02-14 - 83339002 - Conditionally whitelist datetime.datetime and add tests (767)

1.9.0

Get from [PyPI](https://pypi.org/project/temporalio/)

Highlights

Update-With-Start (experimental)

Update-with-start sends an update request and starts a workflow if necessary. A `WorkflowIDConflictPolicy` must be specified. If the workflow execution is not running, then a new workflow execution is started and the update is sent in the first workflow task. Alternatively, if the specified workflow execution is running then, if the `WorkflowIDConflictPolicy` is `USE_EXISTING`, the update is issued against the specified workflow, and if the `WorkflowIDConflictPolicy` is `FAIL`, an error is returned.

See the [lazy_initialization sample](https://github.com/temporalio/samples-python/blob/uws-shopping-cart/message_passing/update_with_start/lazy_initialization/README.md)

User Metadata (experimental)

When starting workflows (directly, via update with start, via schedules, or via child workflows), users can now set a `static_summary` and/or `static_details` option which may appear in the UI/CLI in the future. Similarly, users can provide `summary` to timers and activity invocations. Finally, users can invoke `workflow.set_current_details` with a string that can updated be throughout the life of the workflow based on the workflow's state. This value may also appear in the UI/CLI in the future. Values for summary or details can be in limited single-line or multi-line markdown format, respectively. This feature is currently experimental which means future releases can technically update the API in incompatible ways.


Custom Slot Suppliers in Worker Tuners (experimental)

Worker tuners can now be created with custom slot suppliers. By providing a class implementing `CustomSlotSupplier` to a worker tuner, users can now control logic of when slots are available for use by the worker. This allows advanced, dynamic control over in-process tuning for how many concurrent activities, local activities, and workflow tasks can run. This is an advanced feature and is currently experimental which means future releases can technically update the API in incompatible ways.

Specific Changes

2024-10-30 - 0b327b0 - Upgrade tonic to v0.12.3 to fix security vulnerability (680)
2024-11-06 - 5b897b1 - Update Core / InitializeWorkflow (683)
2024-11-06 - 723d234 - Include update info in logging output (664)
2024-11-13 - 001ce8b - pyproject.toml: Removed protoc-wheel dependency (684)
2024-11-20 - 042e088 - Custom slot suppliers (690)
2024-11-22 - 853889c - Fix logic bug in create_schedule() re. backfills (693)
2024-11-22 - 97a2b7a - Worker code cleanup (692)
2024-12-03 - a90f6d4 - Slot info should be optional on release context (695)
2024-12-06 - 173826f - Add limit to list workflows (698)
2024-12-16 - 341d949 - User metadata (701)
2024-12-19 - 540faeb - Update-with-start (702)
2024-12-19 - 999c8f8 - Set run id in update handle (705)
2024-12-19 - c44a6d8 - Update bug fix: prevent update from a stale workflow handle (703)

1.8.0

Not secure
Get from [PyPI](https://pypi.org/project/temporalio/)

Highlights

* New `workflow.init` decorator allows `__init__` to receive the workflow arguments. This can be useful for message handlers, since these may execute before the `workflow.run` method.

Specific Changes

2024-09-24 - 0995ae0 - Workflow init (645)
2024-09-25 - 3cf1b85 - Change client-side default to match server-side default (649)
2024-09-25 - a1b5d65 - cargo update -p quinn-proto (651)
2024-09-30 - 2e6d742 - Insert guard clause for workflow.upsert_search_attributes on empty inputs (630)
2024-10-03 - badbb9e - Add documentation of signal and update handlers (658)

1.7.1

Not secure
Get from [PyPI](https://pypi.org/project/temporalio/)

Highlights

This is mostly a bugfix release meant to address:

* Unable to send OpenTelemetry metrics over TLS
* Sporadic activity completion RPC cancellation

Specific Changes

2024-08-26 - 4e97841 - Create and upload junit-xml artifacts (617)
2024-08-26 - 927abdc - Start requiring pyright typechecking (619)
2024-08-27 - 4aef4bf - Stack trace on deadlock detection exception (626)
2024-08-27 - 7af99d0 - Fix exception-swallowing code path (623)
2024-09-06 - 59d04a6 - Make client.py typecheck under pyright (628)
2024-09-06 - a18140f - Pin to 3.12.4 (635)
2024-09-11 - 09ac120 - Update core and update release version to 1.7.1 (640)

1.7.0

Not secure
Get from [PyPI](https://pypi.org/project/temporalio/)

Highlights

Workflow Update changes

💥 Breaking change on `start_update`
`wait_for_stage=WorkflowUpdateStage.ACCEPTED` is now required when starting an update with `temporalio.client.WorkflowHandle.start_update`. Although no other `wait_for_stage` value is currently valid, making it required emphasizes that an update caller must wait for a response from the worker, whether using `start_update` or `execute_update` (in contrast to `temporalio.client.Client.start_workflow` and `temporalio.client.WorkflowHandle.signal`).

Waiting for handlers to finish
Workflow code can use `await workflow.wait_condition(workflow.all_handlers_finished)` to wait for all update and signal handlers to complete. The worker will emit a warning every time a workflow completes or continues-as-new while signal/update handlers are still running. In general workflow code should wait for handlers to finish; an update caller will see an exception if the workflow does not wait for the update to complete.

Use the SDK's versions of `asyncio.as_completed` and `asyncio.wait`
`asyncio.as_completed` and `asyncio.wait` are sometimes non-deterministic so must not be used in workflow code. Instead use the drop-in replacements provided by the SDK: `workflow.as_completed` and `workflow.wait`. In a future release it will be an error to use non-deterministic versions from `asyncio`. When applying this change to your workflow code it should be considered backwards-incompatible, so use versioning when making this change for running workflows.

`current_update_info()`
Use `temporalio.workflow.current_update_info()`, similar to `temporalio.workflow.info()`, to obtain metadata about the current update. This includes the update ID, which is useful for in-workflow deduplication of updates (necessary when using updates with continue-as-new).

Resource-based Worker Auto-tuning (EXPERIMENTAL)

Experimental support for worker tuning has been added along with an implementation for auto-tuning based on available
resources. The `temporalio.worker.Worker` class now has a `temporalio.worker.Tuner` field that can be set with an instance of
`temporalio.worker.WorkerTuner`. This can be a fixed-size based tuner via `WorkerTuner.create_fixed` or based
on resources via `WorkerTuner.create_resource_based`. Technically the interface can be manually implemented to return
custom `SlotSupplier`s, but only fixed-size and resource-based slot suppliers are currently supported, custom slot
suppliers will appear in the future.

This SDK API is experimental and may change in incompatible ways in the future.

Specific Changes

2024-05-09 - f96679b - Fix issue with codecs returning passed-in payloads (526)
2024-05-15 - a52f25d - During eviction, set is_replaying and raise special exception (524)
2024-05-20 - 11a97d1 - Required wait update stage, update polling improvements, and other update changes (521)
2024-05-28 - afadc15 - Allow proper stack trace on eviction deadlock (530)
2024-06-04 - 2061835 - Update core/dependencies and call worker.validate (541)
2024-06-04 - 365cead - Add deterministic alternatives for asyncio.wait and asyncio.as_completed (533)
2024-06-06 - 2d65d82 - Fix GHA config for Swatinem/rust-cachev2 (546)
2024-06-06 - 58d6951 - Access current update info with ID inside update handler (544)
2024-06-10 - 927415a - Remove proto wheel and other minor fixes (547)
2024-06-17 - 18b890e - Server 1.24 related fixes (551)
2024-06-17 - 2bb211e - Install protoc in run-bench CI job (550)
2024-06-18 - 4f646c2 - Add __enhanced_stack_trace query to workers (537)
2024-06-20 - 2331aa4 - Add WorkflowUpdateRPCTimeoutOrCancelledError (548)
2024-06-26 - 2c1ac54 - New API to wait for handler executions to complete and warnings on unfinished handler executions (556)
2024-06-26 - 7ac4445 - Expose resource based auto-tuner options (559)
2024-07-01 - 38d9eef - Use ruff to auto-format code and sort imports. (566)
2024-07-09 - 530cadf - skip files that are already mapped for enhanced stack traces (574)
2024-07-10 - bcbacc2 - Experimental cloud operations client (570)
2024-07-12 - c57df81 - Support for workflow ID conflict policy (579)
2024-07-17 - 913b4b6 - Support query for listing schedules (581)
2024-07-17 - e409d32 - Use minimal scope with pytest.raises (582)
2024-07-18 - 3796ec3 - Use GH ARM runner (580)
2024-07-19 - c4b1a01 - Update cibuildwheel (589)
2024-07-24 - a839196 - Updated lazy loaded logger_details (593)
2024-08-05 - 50914c4 - Honor all non-completion commands (569)
2024-08-06 - 9142cdd - Add omes image build (602)
2024-08-08 - 4b93d1a - Switch omes build to post merge (604)
2024-08-09 - a5b9661 - Create commands after payload conversion (591)
2024-08-19 - 73a1673 - Support activity retry delay (571)
2024-08-19 - 97688cc - Unfinished handlers: add rule to warning message; test CAN, dynamic, and late-registered handlers (612)
2024-08-20 - 185ce8c - Update Core (605)

1.6.0

Not secure
Get from [PyPI](https://pypi.org/project/temporalio/)

Highlights

Safe Eviction

The internal eviction logic has been overhauled to make sure that asyncio tasks are completed before a workflow is removed from the cache and garbage collected. For all properly running workflows this should not cause any issues. However, workflows that may have been developed in invalid ways in the past could have a problem being evicted from cache and will log as such. Users should keep an eye out for logs when upgrading to this version.

Experimental Workflow Failure Type Customization

When a workflow raises an exception that wasn't `ApplicationError` or bubbled from a Temporal call (e.g. activity failure), it would be a "task failure" which puts the workflow in a suspended state retrying the task until a code fix is deployed. An experimental feature is now available that lets users set which exception types should instead fail the workflow instead of suspending it. Users can now set the per-workflow `failure_exception_types` on the `workflow.defn` decorator or set the worker-level `workflow_failure_exception_types` when creating the `Worker`. If an exception extends from one of these when raised, it will fail the workflow when raised.

HTTP CONNECT Proxy Support

Python clients now officially support HTTP CONNECT proxies. The `http_connect_proxy_config` argument can now be set when connecting a `Client`.

Worker Client Replacement

Workers can now have the client they use replaced without shutting down the worker. The `client` property on the `Worker` can be set to a different connected client. This is useful for users that need to change options like mTLS client certificate without worker downtime. The worker will not interrupt any polling calls but will start using the new client for subsequent calls.

API Key Client Option

If you use API keys in your Temporal server (i.e. `Bearer` tokens on `Authorization` headers), you can now set `api_key` when connecting a `Client` or set the `api_key` property on an existing client to update it.

Floats and Durations in Metrics

Users using `metric_meter()` directly to create metrics (off of runtime, activity, or workflow) can now create float-based histograms and gauges, and duration-based histograms. Similarly users using `MetricBuffer` to retrieve metrics can say how they want to retrieve durations (float seconds, int milliseconds, or `timedelta`). A `durations_as_seconds` option was added to telemetry options for users that prefer seconds as float-based durations to OpenTelemetry and Prometheus instead of the default of integer milliseconds.

Counting Workflows

A new `count_workflows` call has been added to the `Client` that takes the same query as `list_workflows` but is optimized just to perform counts.

:boom: Activity/Workflow `extra` on `LogRecord` Changed

Activity logs and workflow logs used to set `activity_info` and `workflow_info` on `LogRecord` respectively as the full info dataclasses by default. This was not usable by many third-party logging tools that can only work with `dict`s and not `dataclass`es. Therefore the default was changed to set `temporal_activity` and `temporal_workflow` on the respective log records to `dict`s of commonly needed information. `temporalio.activity.logger.full_activity_info_on_extra` and/or `temporalio.workflow.logger.full_workflow_info_on_extra` can be set to `True` to put those info entries back on `extra`.

This only affects those using advanced log handlers that leverage contextual state. The log messages themselves are unaffected.

Specific Changes

2024-03-04 - 477aa31 - Fix execute_child_workflow apidoc (483)
2024-03-13 - f3d1b85 - API key client option (486)
2024-03-26 - 36fe961 - Remove experimental flag from start_delay (492)
2024-04-01 - 13d18ca - Update core and add durations-as-seconds metric option (498)
2024-04-02 - b07e75e - Change default "extra" contents of activity/workflow logs (490)
2024-04-05 - 1001653 - HTTP CONNECT proxy support (501)
2024-04-05 - 466da16 - Safe Eviction (499)
2024-04-12 - b45447e - Add macOS ARM runner (506)
2024-04-12 - cf4c7cb - Ensure extra data on task fail logs (502)
2024-04-18 - 50c2033 - Support float and duration metrics (508)
2024-04-19 - ecd703d - Add Client.count_workflows (510)
2024-04-30 - 0bb94f8 - Ability for certain task failure types to fail workflow (516)
2024-05-03 - 0687151 - Worker client replacement (517)

Page 1 of 4

© 2025 Safety CLI Cybersecurity Inc. All Rights Reserved.