datacurrent 1.0.0__tar.gz → 1.0.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {datacurrent-1.0.0 → datacurrent-1.0.1}/CHANGELOG.md +27 -0
- {datacurrent-1.0.0/datacurrent.egg-info → datacurrent-1.0.1}/PKG-INFO +54 -5
- {datacurrent-1.0.0 → datacurrent-1.0.1}/README.md +48 -4
- {datacurrent-1.0.0 → datacurrent-1.0.1}/datacurrent/_version.py +1 -1
- {datacurrent-1.0.0 → datacurrent-1.0.1/datacurrent.egg-info}/PKG-INFO +54 -5
- {datacurrent-1.0.0 → datacurrent-1.0.1}/pyproject.toml +7 -0
- {datacurrent-1.0.0 → datacurrent-1.0.1}/LICENSE +0 -0
- {datacurrent-1.0.0 → datacurrent-1.0.1}/MANIFEST.in +0 -0
- {datacurrent-1.0.0 → datacurrent-1.0.1}/datacurrent/__init__.py +0 -0
- {datacurrent-1.0.0 → datacurrent-1.0.1}/datacurrent/buffering/__init__.py +0 -0
- {datacurrent-1.0.0 → datacurrent-1.0.1}/datacurrent/buffering/backpressure.py +0 -0
- {datacurrent-1.0.0 → datacurrent-1.0.1}/datacurrent/buffering/queue.py +0 -0
- {datacurrent-1.0.0 → datacurrent-1.0.1}/datacurrent/concurrency/__init__.py +0 -0
- {datacurrent-1.0.0 → datacurrent-1.0.1}/datacurrent/concurrency/limits.py +0 -0
- {datacurrent-1.0.0 → datacurrent-1.0.1}/datacurrent/concurrency/tasks.py +0 -0
- {datacurrent-1.0.0 → datacurrent-1.0.1}/datacurrent/config.py +0 -0
- {datacurrent-1.0.0 → datacurrent-1.0.1}/datacurrent/core/__init__.py +0 -0
- {datacurrent-1.0.0 → datacurrent-1.0.1}/datacurrent/core/_util.py +0 -0
- {datacurrent-1.0.0 → datacurrent-1.0.1}/datacurrent/core/lifecycle.py +0 -0
- {datacurrent-1.0.0 → datacurrent-1.0.1}/datacurrent/core/operators.py +0 -0
- {datacurrent-1.0.0 → datacurrent-1.0.1}/datacurrent/core/pipeline.py +0 -0
- {datacurrent-1.0.0 → datacurrent-1.0.1}/datacurrent/core/sink.py +0 -0
- {datacurrent-1.0.0 → datacurrent-1.0.1}/datacurrent/core/stream.py +0 -0
- {datacurrent-1.0.0 → datacurrent-1.0.1}/datacurrent/events/__init__.py +0 -0
- {datacurrent-1.0.0 → datacurrent-1.0.1}/datacurrent/events/bus.py +0 -0
- {datacurrent-1.0.0 → datacurrent-1.0.1}/datacurrent/events/routing.py +0 -0
- {datacurrent-1.0.0 → datacurrent-1.0.1}/datacurrent/events/subscriptions.py +0 -0
- {datacurrent-1.0.0 → datacurrent-1.0.1}/datacurrent/exceptions.py +0 -0
- {datacurrent-1.0.0 → datacurrent-1.0.1}/datacurrent/integrations/__init__.py +0 -0
- {datacurrent-1.0.0 → datacurrent-1.0.1}/datacurrent/integrations/fastapi.py +0 -0
- {datacurrent-1.0.0 → datacurrent-1.0.1}/datacurrent/integrations/starlette.py +0 -0
- {datacurrent-1.0.0 → datacurrent-1.0.1}/datacurrent/observability/__init__.py +0 -0
- {datacurrent-1.0.0 → datacurrent-1.0.1}/datacurrent/observability/logging.py +0 -0
- {datacurrent-1.0.0 → datacurrent-1.0.1}/datacurrent/observability/metrics.py +0 -0
- {datacurrent-1.0.0 → datacurrent-1.0.1}/datacurrent/py.typed +0 -0
- {datacurrent-1.0.0 → datacurrent-1.0.1}/datacurrent/reliability/__init__.py +0 -0
- {datacurrent-1.0.0 → datacurrent-1.0.1}/datacurrent/reliability/retry.py +0 -0
- {datacurrent-1.0.0 → datacurrent-1.0.1}/datacurrent/reliability/timeout.py +0 -0
- {datacurrent-1.0.0 → datacurrent-1.0.1}/datacurrent/transports/__init__.py +0 -0
- {datacurrent-1.0.0 → datacurrent-1.0.1}/datacurrent/transports/_deps.py +0 -0
- {datacurrent-1.0.0 → datacurrent-1.0.1}/datacurrent/transports/base.py +0 -0
- {datacurrent-1.0.0 → datacurrent-1.0.1}/datacurrent/transports/http.py +0 -0
- {datacurrent-1.0.0 → datacurrent-1.0.1}/datacurrent/transports/memory.py +0 -0
- {datacurrent-1.0.0 → datacurrent-1.0.1}/datacurrent/transports/sse.py +0 -0
- {datacurrent-1.0.0 → datacurrent-1.0.1}/datacurrent/transports/websocket.py +0 -0
- {datacurrent-1.0.0 → datacurrent-1.0.1}/datacurrent.egg-info/SOURCES.txt +0 -0
- {datacurrent-1.0.0 → datacurrent-1.0.1}/datacurrent.egg-info/dependency_links.txt +0 -0
- {datacurrent-1.0.0 → datacurrent-1.0.1}/datacurrent.egg-info/requires.txt +0 -0
- {datacurrent-1.0.0 → datacurrent-1.0.1}/datacurrent.egg-info/top_level.txt +0 -0
- {datacurrent-1.0.0 → datacurrent-1.0.1}/setup.cfg +0 -0
|
@@ -4,6 +4,33 @@ All notable changes to DataCurrent are documented here. The format follows
|
|
|
4
4
|
[Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and the project uses
|
|
5
5
|
[Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
6
6
|
|
|
7
|
+
## [1.0.1] — 2026-11-13
|
|
8
|
+
|
|
9
|
+
Documentation, metadata and packaging release. The public API is unchanged.
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
|
|
13
|
+
- `CONTRIBUTING.md`: development setup, the check suite, and the release
|
|
14
|
+
process, including PyPI trusted publishing.
|
|
15
|
+
- A "Documented examples" section in the README that maps each of the sixteen
|
|
16
|
+
runnable scripts to the feature it demonstrates.
|
|
17
|
+
- `[project.urls]` in `pyproject.toml`: homepage and repository (GitHub), issues,
|
|
18
|
+
changelog and PyPI.
|
|
19
|
+
- A GitHub Actions release workflow that publishes to PyPI over OIDC, so
|
|
20
|
+
uploads carry a signed provenance attestation.
|
|
21
|
+
|
|
22
|
+
### Fixed
|
|
23
|
+
|
|
24
|
+
- The FastAPI example documented `uvicorn examples.10_fastapi_integration:app`,
|
|
25
|
+
which is not a runnable module path. It now shows the verified commands.
|
|
26
|
+
|
|
27
|
+
### Changed
|
|
28
|
+
|
|
29
|
+
- README links to the GitHub repository, the PyPI homepage and the examples
|
|
30
|
+
directory.
|
|
31
|
+
- The "not published to PyPI" note was removed; the package is on PyPI and this
|
|
32
|
+
is the current release.
|
|
33
|
+
|
|
7
34
|
## [1.0.0] — 2026-11-08
|
|
8
35
|
|
|
9
36
|
First stable release. Built and verified locally; not published to PyPI.
|
|
@@ -1,9 +1,14 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: datacurrent
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.1
|
|
4
4
|
Summary: Python streaming, made simple: async streams, operators, backpressure and real-time transports.
|
|
5
5
|
Author: DataCurrent contributors
|
|
6
6
|
License: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/CoderProandTester/datacurrent
|
|
8
|
+
Project-URL: Repository, https://github.com/CoderProandTester/datacurrent
|
|
9
|
+
Project-URL: Issues, https://github.com/CoderProandTester/datacurrent/issues
|
|
10
|
+
Project-URL: Changelog, https://github.com/CoderProandTester/datacurrent/blob/main/CHANGELOG.md
|
|
11
|
+
Project-URL: PyPI, https://pypi.org/project/datacurrent/
|
|
7
12
|
Keywords: streaming,async,asyncio,real-time,data pipeline,stream processing,backpressure,reactive,event bus,pubsub,websocket,server-sent events,http streaming,concurrency,observability,http,https
|
|
8
13
|
Classifier: Development Status :: 5 - Production/Stable
|
|
9
14
|
Classifier: Framework :: AsyncIO
|
|
@@ -52,7 +57,15 @@ DataCurrent is a production-ready asynchronous streaming library. It gives you
|
|
|
52
57
|
one consistent API for lists, async generators, queues, WebSockets, Server-Sent
|
|
53
58
|
Events and streaming HTTP responses.
|
|
54
59
|
|
|
55
|
-
**Version 1.0.
|
|
60
|
+
**Version 1.0.1 · Stable / Production**
|
|
61
|
+
|
|
62
|
+
[](https://pypi.org/project/datacurrent/)
|
|
63
|
+
[](https://pypi.org/project/datacurrent/)
|
|
64
|
+
[](https://github.com/CoderProandTester/datacurrent)
|
|
65
|
+
|
|
66
|
+
- **GitHub repository:** <https://github.com/CoderProandTester/datacurrent>
|
|
67
|
+
- **PyPI homepage:** <https://pypi.org/project/datacurrent/>
|
|
68
|
+
- **Examples:** <https://github.com/CoderProandTester/datacurrent/tree/main/examples>
|
|
56
69
|
|
|
57
70
|
- 279 tests passing, with 100% line and branch coverage.
|
|
58
71
|
- Required networking dependencies install automatically.
|
|
@@ -65,7 +78,10 @@ pip install datacurrent
|
|
|
65
78
|
```
|
|
66
79
|
|
|
67
80
|
Python 3.11 or newer is required. `httpx` and `websockets` are installed with the
|
|
68
|
-
package, so HTTP streaming, SSE and WebSocket clients work immediately.
|
|
81
|
+
package, so HTTP streaming, SSE and WebSocket clients work immediately. The
|
|
82
|
+
[`examples/`](https://github.com/CoderProandTester/datacurrent/tree/main/examples)
|
|
83
|
+
directory contains 16 runnable scripts, from a hello-world stream to a WebSocket
|
|
84
|
+
server.
|
|
69
85
|
|
|
70
86
|
Framework helpers are optional:
|
|
71
87
|
|
|
@@ -224,6 +240,39 @@ stream = Stream.from_factory(connect_and_read).retry(
|
|
|
224
240
|
Retries require a replayable source, such as a factory or a list. A consumed
|
|
225
241
|
generator raises `NonReplayableStreamError` instead of silently restarting.
|
|
226
242
|
|
|
243
|
+
## Examples
|
|
244
|
+
|
|
245
|
+
Sixteen runnable scripts live in [`examples/`](https://github.com/CoderProandTester/datacurrent/tree/main/examples).
|
|
246
|
+
Each one is self-contained and is executed by the test suite, so the output you
|
|
247
|
+
see is the output the project verifies.
|
|
248
|
+
|
|
249
|
+
```bash
|
|
250
|
+
python examples/01_hello_stream.py
|
|
251
|
+
python -m pytest tests/unit/test_examples.py -q # run them all
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
| Script | What it demonstrates |
|
|
255
|
+
|---|---|
|
|
256
|
+
| `01_hello_stream.py` | Creating a stream, iterating it, `tap` and terminal operations |
|
|
257
|
+
| `02_transformations.py` | `filter`, `map`, `distinct`, `batch`, `window`, `reduce`, `enumerate` |
|
|
258
|
+
| `03_large_dataset.py` | 100,000 records streamed in batches with bounded memory |
|
|
259
|
+
| `04_filter_events.py` | `EventBus` wildcard topics and multiple handlers |
|
|
260
|
+
| `05_multi_subscriber.py` | `Channel` fan-out to three independent consumers |
|
|
261
|
+
| `06_websocket_client.py` | `WebSocketStream` JSON send/receive against a local echo server |
|
|
262
|
+
| `07_websocket_server.py` | Broadcasting a `Channel` to connected WebSocket clients |
|
|
263
|
+
| `08_sse_client.py` | `SSEStream` event ids, event types and JSON payloads |
|
|
264
|
+
| `09_http_streaming.py` | `HTTPStream` line iteration and raw body streaming |
|
|
265
|
+
| `10_fastapi_integration.py` | Serving a DataCurrent stream as a FastAPI SSE endpoint |
|
|
266
|
+
| `11_backpressure.py` | Bounded queues, producer suspension and counted drops |
|
|
267
|
+
| `12_concurrent_processing.py` | Bounded concurrency with order preserved |
|
|
268
|
+
| `13_retry_recovery.py` | `RetryPolicy`, `recover` and replayable sources |
|
|
269
|
+
| `14_custom_transport.py` | Implementing `StreamTransport` for a custom protocol |
|
|
270
|
+
| `15_realtime_notifications.py` | Routing one event to WebSocket and email consumers |
|
|
271
|
+
| `16_event_pipeline.py` | End-to-end event filtering, mapping and batching |
|
|
272
|
+
|
|
273
|
+
`examples/_servers.py` holds the local HTTP/SSE test servers the networking
|
|
274
|
+
examples use; it is not an example itself.
|
|
275
|
+
|
|
227
276
|
## Why DataCurrent
|
|
228
277
|
|
|
229
278
|
- One model for iterables, queues, HTTP, SSE and WebSockets.
|
|
@@ -242,8 +291,8 @@ in-process streaming layer that works without any of them.
|
|
|
242
291
|
|
|
243
292
|
- Python 3.11+ on asyncio; no Trio or AnyIO backend.
|
|
244
293
|
- In-memory `Channel` and `EventBus` delivery is at most once.
|
|
245
|
-
- No durable broker adapters or OpenTelemetry exporter in
|
|
246
|
-
-
|
|
294
|
+
- No durable broker adapters or OpenTelemetry exporter in this release.
|
|
295
|
+
- The project name is provisional pending trademark clearance.
|
|
247
296
|
|
|
248
297
|
## License
|
|
249
298
|
|
|
@@ -6,7 +6,15 @@ DataCurrent is a production-ready asynchronous streaming library. It gives you
|
|
|
6
6
|
one consistent API for lists, async generators, queues, WebSockets, Server-Sent
|
|
7
7
|
Events and streaming HTTP responses.
|
|
8
8
|
|
|
9
|
-
**Version 1.0.
|
|
9
|
+
**Version 1.0.1 · Stable / Production**
|
|
10
|
+
|
|
11
|
+
[](https://pypi.org/project/datacurrent/)
|
|
12
|
+
[](https://pypi.org/project/datacurrent/)
|
|
13
|
+
[](https://github.com/CoderProandTester/datacurrent)
|
|
14
|
+
|
|
15
|
+
- **GitHub repository:** <https://github.com/CoderProandTester/datacurrent>
|
|
16
|
+
- **PyPI homepage:** <https://pypi.org/project/datacurrent/>
|
|
17
|
+
- **Examples:** <https://github.com/CoderProandTester/datacurrent/tree/main/examples>
|
|
10
18
|
|
|
11
19
|
- 279 tests passing, with 100% line and branch coverage.
|
|
12
20
|
- Required networking dependencies install automatically.
|
|
@@ -19,7 +27,10 @@ pip install datacurrent
|
|
|
19
27
|
```
|
|
20
28
|
|
|
21
29
|
Python 3.11 or newer is required. `httpx` and `websockets` are installed with the
|
|
22
|
-
package, so HTTP streaming, SSE and WebSocket clients work immediately.
|
|
30
|
+
package, so HTTP streaming, SSE and WebSocket clients work immediately. The
|
|
31
|
+
[`examples/`](https://github.com/CoderProandTester/datacurrent/tree/main/examples)
|
|
32
|
+
directory contains 16 runnable scripts, from a hello-world stream to a WebSocket
|
|
33
|
+
server.
|
|
23
34
|
|
|
24
35
|
Framework helpers are optional:
|
|
25
36
|
|
|
@@ -178,6 +189,39 @@ stream = Stream.from_factory(connect_and_read).retry(
|
|
|
178
189
|
Retries require a replayable source, such as a factory or a list. A consumed
|
|
179
190
|
generator raises `NonReplayableStreamError` instead of silently restarting.
|
|
180
191
|
|
|
192
|
+
## Examples
|
|
193
|
+
|
|
194
|
+
Sixteen runnable scripts live in [`examples/`](https://github.com/CoderProandTester/datacurrent/tree/main/examples).
|
|
195
|
+
Each one is self-contained and is executed by the test suite, so the output you
|
|
196
|
+
see is the output the project verifies.
|
|
197
|
+
|
|
198
|
+
```bash
|
|
199
|
+
python examples/01_hello_stream.py
|
|
200
|
+
python -m pytest tests/unit/test_examples.py -q # run them all
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
| Script | What it demonstrates |
|
|
204
|
+
|---|---|
|
|
205
|
+
| `01_hello_stream.py` | Creating a stream, iterating it, `tap` and terminal operations |
|
|
206
|
+
| `02_transformations.py` | `filter`, `map`, `distinct`, `batch`, `window`, `reduce`, `enumerate` |
|
|
207
|
+
| `03_large_dataset.py` | 100,000 records streamed in batches with bounded memory |
|
|
208
|
+
| `04_filter_events.py` | `EventBus` wildcard topics and multiple handlers |
|
|
209
|
+
| `05_multi_subscriber.py` | `Channel` fan-out to three independent consumers |
|
|
210
|
+
| `06_websocket_client.py` | `WebSocketStream` JSON send/receive against a local echo server |
|
|
211
|
+
| `07_websocket_server.py` | Broadcasting a `Channel` to connected WebSocket clients |
|
|
212
|
+
| `08_sse_client.py` | `SSEStream` event ids, event types and JSON payloads |
|
|
213
|
+
| `09_http_streaming.py` | `HTTPStream` line iteration and raw body streaming |
|
|
214
|
+
| `10_fastapi_integration.py` | Serving a DataCurrent stream as a FastAPI SSE endpoint |
|
|
215
|
+
| `11_backpressure.py` | Bounded queues, producer suspension and counted drops |
|
|
216
|
+
| `12_concurrent_processing.py` | Bounded concurrency with order preserved |
|
|
217
|
+
| `13_retry_recovery.py` | `RetryPolicy`, `recover` and replayable sources |
|
|
218
|
+
| `14_custom_transport.py` | Implementing `StreamTransport` for a custom protocol |
|
|
219
|
+
| `15_realtime_notifications.py` | Routing one event to WebSocket and email consumers |
|
|
220
|
+
| `16_event_pipeline.py` | End-to-end event filtering, mapping and batching |
|
|
221
|
+
|
|
222
|
+
`examples/_servers.py` holds the local HTTP/SSE test servers the networking
|
|
223
|
+
examples use; it is not an example itself.
|
|
224
|
+
|
|
181
225
|
## Why DataCurrent
|
|
182
226
|
|
|
183
227
|
- One model for iterables, queues, HTTP, SSE and WebSockets.
|
|
@@ -196,8 +240,8 @@ in-process streaming layer that works without any of them.
|
|
|
196
240
|
|
|
197
241
|
- Python 3.11+ on asyncio; no Trio or AnyIO backend.
|
|
198
242
|
- In-memory `Channel` and `EventBus` delivery is at most once.
|
|
199
|
-
- No durable broker adapters or OpenTelemetry exporter in
|
|
200
|
-
-
|
|
243
|
+
- No durable broker adapters or OpenTelemetry exporter in this release.
|
|
244
|
+
- The project name is provisional pending trademark clearance.
|
|
201
245
|
|
|
202
246
|
## License
|
|
203
247
|
|
|
@@ -1,9 +1,14 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: datacurrent
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.1
|
|
4
4
|
Summary: Python streaming, made simple: async streams, operators, backpressure and real-time transports.
|
|
5
5
|
Author: DataCurrent contributors
|
|
6
6
|
License: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/CoderProandTester/datacurrent
|
|
8
|
+
Project-URL: Repository, https://github.com/CoderProandTester/datacurrent
|
|
9
|
+
Project-URL: Issues, https://github.com/CoderProandTester/datacurrent/issues
|
|
10
|
+
Project-URL: Changelog, https://github.com/CoderProandTester/datacurrent/blob/main/CHANGELOG.md
|
|
11
|
+
Project-URL: PyPI, https://pypi.org/project/datacurrent/
|
|
7
12
|
Keywords: streaming,async,asyncio,real-time,data pipeline,stream processing,backpressure,reactive,event bus,pubsub,websocket,server-sent events,http streaming,concurrency,observability,http,https
|
|
8
13
|
Classifier: Development Status :: 5 - Production/Stable
|
|
9
14
|
Classifier: Framework :: AsyncIO
|
|
@@ -52,7 +57,15 @@ DataCurrent is a production-ready asynchronous streaming library. It gives you
|
|
|
52
57
|
one consistent API for lists, async generators, queues, WebSockets, Server-Sent
|
|
53
58
|
Events and streaming HTTP responses.
|
|
54
59
|
|
|
55
|
-
**Version 1.0.
|
|
60
|
+
**Version 1.0.1 · Stable / Production**
|
|
61
|
+
|
|
62
|
+
[](https://pypi.org/project/datacurrent/)
|
|
63
|
+
[](https://pypi.org/project/datacurrent/)
|
|
64
|
+
[](https://github.com/CoderProandTester/datacurrent)
|
|
65
|
+
|
|
66
|
+
- **GitHub repository:** <https://github.com/CoderProandTester/datacurrent>
|
|
67
|
+
- **PyPI homepage:** <https://pypi.org/project/datacurrent/>
|
|
68
|
+
- **Examples:** <https://github.com/CoderProandTester/datacurrent/tree/main/examples>
|
|
56
69
|
|
|
57
70
|
- 279 tests passing, with 100% line and branch coverage.
|
|
58
71
|
- Required networking dependencies install automatically.
|
|
@@ -65,7 +78,10 @@ pip install datacurrent
|
|
|
65
78
|
```
|
|
66
79
|
|
|
67
80
|
Python 3.11 or newer is required. `httpx` and `websockets` are installed with the
|
|
68
|
-
package, so HTTP streaming, SSE and WebSocket clients work immediately.
|
|
81
|
+
package, so HTTP streaming, SSE and WebSocket clients work immediately. The
|
|
82
|
+
[`examples/`](https://github.com/CoderProandTester/datacurrent/tree/main/examples)
|
|
83
|
+
directory contains 16 runnable scripts, from a hello-world stream to a WebSocket
|
|
84
|
+
server.
|
|
69
85
|
|
|
70
86
|
Framework helpers are optional:
|
|
71
87
|
|
|
@@ -224,6 +240,39 @@ stream = Stream.from_factory(connect_and_read).retry(
|
|
|
224
240
|
Retries require a replayable source, such as a factory or a list. A consumed
|
|
225
241
|
generator raises `NonReplayableStreamError` instead of silently restarting.
|
|
226
242
|
|
|
243
|
+
## Examples
|
|
244
|
+
|
|
245
|
+
Sixteen runnable scripts live in [`examples/`](https://github.com/CoderProandTester/datacurrent/tree/main/examples).
|
|
246
|
+
Each one is self-contained and is executed by the test suite, so the output you
|
|
247
|
+
see is the output the project verifies.
|
|
248
|
+
|
|
249
|
+
```bash
|
|
250
|
+
python examples/01_hello_stream.py
|
|
251
|
+
python -m pytest tests/unit/test_examples.py -q # run them all
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
| Script | What it demonstrates |
|
|
255
|
+
|---|---|
|
|
256
|
+
| `01_hello_stream.py` | Creating a stream, iterating it, `tap` and terminal operations |
|
|
257
|
+
| `02_transformations.py` | `filter`, `map`, `distinct`, `batch`, `window`, `reduce`, `enumerate` |
|
|
258
|
+
| `03_large_dataset.py` | 100,000 records streamed in batches with bounded memory |
|
|
259
|
+
| `04_filter_events.py` | `EventBus` wildcard topics and multiple handlers |
|
|
260
|
+
| `05_multi_subscriber.py` | `Channel` fan-out to three independent consumers |
|
|
261
|
+
| `06_websocket_client.py` | `WebSocketStream` JSON send/receive against a local echo server |
|
|
262
|
+
| `07_websocket_server.py` | Broadcasting a `Channel` to connected WebSocket clients |
|
|
263
|
+
| `08_sse_client.py` | `SSEStream` event ids, event types and JSON payloads |
|
|
264
|
+
| `09_http_streaming.py` | `HTTPStream` line iteration and raw body streaming |
|
|
265
|
+
| `10_fastapi_integration.py` | Serving a DataCurrent stream as a FastAPI SSE endpoint |
|
|
266
|
+
| `11_backpressure.py` | Bounded queues, producer suspension and counted drops |
|
|
267
|
+
| `12_concurrent_processing.py` | Bounded concurrency with order preserved |
|
|
268
|
+
| `13_retry_recovery.py` | `RetryPolicy`, `recover` and replayable sources |
|
|
269
|
+
| `14_custom_transport.py` | Implementing `StreamTransport` for a custom protocol |
|
|
270
|
+
| `15_realtime_notifications.py` | Routing one event to WebSocket and email consumers |
|
|
271
|
+
| `16_event_pipeline.py` | End-to-end event filtering, mapping and batching |
|
|
272
|
+
|
|
273
|
+
`examples/_servers.py` holds the local HTTP/SSE test servers the networking
|
|
274
|
+
examples use; it is not an example itself.
|
|
275
|
+
|
|
227
276
|
## Why DataCurrent
|
|
228
277
|
|
|
229
278
|
- One model for iterables, queues, HTTP, SSE and WebSockets.
|
|
@@ -242,8 +291,8 @@ in-process streaming layer that works without any of them.
|
|
|
242
291
|
|
|
243
292
|
- Python 3.11+ on asyncio; no Trio or AnyIO backend.
|
|
244
293
|
- In-memory `Channel` and `EventBus` delivery is at most once.
|
|
245
|
-
- No durable broker adapters or OpenTelemetry exporter in
|
|
246
|
-
-
|
|
294
|
+
- No durable broker adapters or OpenTelemetry exporter in this release.
|
|
295
|
+
- The project name is provisional pending trademark clearance.
|
|
247
296
|
|
|
248
297
|
## License
|
|
249
298
|
|
|
@@ -48,6 +48,13 @@ classifiers = [
|
|
|
48
48
|
]
|
|
49
49
|
dependencies = ["httpx>=0.27", "websockets>=12"]
|
|
50
50
|
|
|
51
|
+
[project.urls]
|
|
52
|
+
Homepage = "https://github.com/CoderProandTester/datacurrent"
|
|
53
|
+
Repository = "https://github.com/CoderProandTester/datacurrent"
|
|
54
|
+
Issues = "https://github.com/CoderProandTester/datacurrent/issues"
|
|
55
|
+
Changelog = "https://github.com/CoderProandTester/datacurrent/blob/main/CHANGELOG.md"
|
|
56
|
+
PyPI = "https://pypi.org/project/datacurrent/"
|
|
57
|
+
|
|
51
58
|
[project.optional-dependencies]
|
|
52
59
|
starlette = ["starlette>=0.36"]
|
|
53
60
|
fastapi = ["fastapi>=0.110"]
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|