You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Raise the minimum supported Python version to 3.13 and apply the
modernizations that unlocks:
- pyproject.toml: requires-python >=3.13; ty environment python-version
3.13
- CI: drop the 3.9-3.12 test matrix rows, keep 3.13 and 3.14
- README/docs: update the advertised minimum version
Source:
- Adopt PEP 695 type-parameter syntax for the generic Proxy/Watcher
classes, the computed/watch helpers and the Watchable/WatchCallback
aliases, dropping the module-level TypeVar and typing.Generic bases
- init.py: drop the getattr guard around asyncio.eager_task_factory,
which now always exists
- watcher.py: import TypeIs from typing (added in 3.13) instead of
typing_extensions
Tests:
- Remove sys.version_info / hasattr(asyncio, "eager_task_factory")
guards that are now always true
- Exclude __type_params__ (added by the native PEP 695 generic) from
the wrapping-completeness check
Claude-Session: https://claude.ai/code/session_01XGH6yjPx1mpY134qtk6rXa
Co-authored-by: Claude <noreply@anthropic.com>
Copy file name to clipboardExpand all lines: README.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -12,7 +12,7 @@
12
12
13
13
***Automatic dependency tracking** — computed state knows exactly what it depends on and lazily re-evaluates only when needed.
14
14
***React to any change** — watch plain state or computed state and build unidirectional data flow: state changes drive view changes, input events drive state changes.
15
-
***Zero dependencies, framework agnostic** — a pure Python library (≥ 3.9) that plugs into any event loop: asyncio, Qt, or your own.
15
+
***Zero dependencies, framework agnostic** — a pure Python library (≥ 3.13) that plugs into any event loop: asyncio, Qt, or your own.
16
16
***Fully typed** — a [PEP 561](https://peps.python.org/pep-0561/) typed package, checked with [ty](https://github.com/astral-sh/ty) in CI.
Copy file name to clipboardExpand all lines: docs/guide/scheduling.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -21,7 +21,7 @@ You can also pass a specific loop: `scheduler.register_asyncio(loop)`.
21
21
22
22
!!! tip "Eager task factory"
23
23
24
-
On Python 3.12+, observ's `loop_factory()` helper creates a new event loop with the [eager task factory](https://docs.python.org/3/library/asyncio-task.html#asyncio.eager_task_factory) enabled, which reduces the latency of the async callbacks and watched functions that observ schedules as tasks:
24
+
observ's `loop_factory()` helper creates a new event loop with the [eager task factory](https://docs.python.org/3/library/asyncio-task.html#asyncio.eager_task_factory) enabled, which reduces the latency of the async callbacks and watched functions that observ schedules as tasks:
Copy file name to clipboardExpand all lines: docs/index.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,6 +1,6 @@
1
1
# Observ 👁
2
2
3
-
Observ is a Python port of [Vue.js](https://vuejs.org/)' [computed properties and watchers](https://vuejs.org/guide/essentials/reactivity-fundamentals.html). It is event loop/framework agnostic and has no dependencies, so it can be used in any project targeting Python >= 3.9.
3
+
Observ is a Python port of [Vue.js](https://vuejs.org/)' [computed properties and watchers](https://vuejs.org/guide/essentials/reactivity-fundamentals.html). It is event loop/framework agnostic and has no dependencies, so it can be used in any project targeting Python >= 3.13.
4
4
5
5
Observ provides two benefits for stateful applications:
0 commit comments