|
1 | 1 | name: python |
2 | | -version: 10.6.1 |
| 2 | +version: 10.6.2 |
3 | 3 | schema: 1 |
4 | 4 | scm: github.com/pubnub/python |
5 | 5 | sdks: |
|
18 | 18 | distributions: |
19 | 19 | - distribution-type: library |
20 | 20 | distribution-repository: package |
21 | | - package-name: pubnub-10.6.1 |
| 21 | + package-name: pubnub-10.6.2 |
22 | 22 | location: https://pypi.org/project/pubnub/ |
23 | 23 | supported-platforms: |
24 | 24 | supported-operating-systems: |
|
94 | 94 | - |
95 | 95 | distribution-type: library |
96 | 96 | distribution-repository: git release |
97 | | - package-name: pubnub-10.6.1 |
98 | | - location: https://github.com/pubnub/python/releases/download/10.6.1/pubnub-10.6.1.tar.gz |
| 97 | + package-name: pubnub-10.6.2 |
| 98 | + location: https://github.com/pubnub/python/releases/download/10.6.2/pubnub-10.6.2.tar.gz |
99 | 99 | supported-platforms: |
100 | 100 | supported-operating-systems: |
101 | 101 | Linux: |
@@ -169,6 +169,39 @@ sdks: |
169 | 169 | license-url: https://github.com/encode/httpx/blob/master/LICENSE.md |
170 | 170 | is-required: Required |
171 | 171 | changelog: |
| 172 | + - date: 2026-03-26 |
| 173 | + version: 10.6.2 |
| 174 | + changes: |
| 175 | + - type: bug |
| 176 | + text: "Ensure `PubNubAsyncioException` always carries a valid `PNStatus` with error data instead of `None`." |
| 177 | + - type: bug |
| 178 | + text: "Handle cases where status or `error_data` is `None` instead of raising `AttributeError`." |
| 179 | + - type: bug |
| 180 | + text: "Match `PubNubAsyncioException` which is what `request_future` actually returns on failure." |
| 181 | + - type: bug |
| 182 | + text: "Handle `-1 (unlimited)` correctly since `attempts > -1` was always `true`, causing immediate give-up." |
| 183 | + - type: bug |
| 184 | + text: "Use delay class defaults instead of config value which could be `None` causing `TypeError` on comparison." |
| 185 | + - type: bug |
| 186 | + text: "Prevent falling through to start a heartbeat after deciding to give up." |
| 187 | + - type: bug |
| 188 | + text: "Set all four timeout fields explicitly instead of a 2-tuple that left write and pool unset." |
| 189 | + - type: bug |
| 190 | + text: "On macOS and Linux, `time.monotonic()` does not advance during system sleep, causing socket and `asyncio` timeouts (310s subscribe) to stall for hours of wall-clock time. Add `time.time()`-based deadline checks that detect sleep and cancel stale requests within ~5s of wake." |
| 191 | + - type: bug |
| 192 | + text: "Use `asyncio.wait()` with periodic `time.time()` checks instead of a single monotonic-based `wait_for()`, yielding to the event loop between checks." |
| 193 | + - type: bug |
| 194 | + text: "Persistent single daemon thread monitors `time.time()` every 5s and closes the `httpx` session when the wall-clock deadline passes, interrupting the blocking socket read. Tracks deadlines per calling thread so concurrent requests (e.g., subscribe + publish) don't interfere. Only armed for long-timeout requests (>30s). Session is recreated for subsequent requests." |
| 195 | + - type: improvement |
| 196 | + text: "Cover both `asyncio` and threads paths simulated clock jumps, normal passthrough, clean watchdog shutdown, per-thread deadline isolation, concurrent request independence, cleanup, and exception propagation." |
| 197 | + - type: improvement |
| 198 | + text: "Ensure `pubnub.stop()` always runs to prevent non-daemon threads from blocking process exit." |
| 199 | + - type: improvement |
| 200 | + text: "Enable presence heartbeat and use unique channel names so presence registers on the server." |
| 201 | + - type: improvement |
| 202 | + text: "Restore `cipher_key` after use in `send_file` and pass it explicitly to `download_file`." |
| 203 | + - type: improvement |
| 204 | + text: "Avoid collisions with stale data from prior test runs." |
172 | 205 | - date: 2026-02-10 |
173 | 206 | version: 10.6.1 |
174 | 207 | changes: |
|
0 commit comments