datacurrent 1.0.1__tar.gz → 1.0.2__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.1 → datacurrent-1.0.2}/CHANGELOG.md +17 -0
- datacurrent-1.0.2/CONTRIBUTING.md +137 -0
- {datacurrent-1.0.1 → datacurrent-1.0.2}/MANIFEST.in +1 -0
- {datacurrent-1.0.1/datacurrent.egg-info → datacurrent-1.0.2}/PKG-INFO +2 -2
- {datacurrent-1.0.1 → datacurrent-1.0.2}/README.md +1 -1
- {datacurrent-1.0.1 → datacurrent-1.0.2}/datacurrent/_version.py +1 -1
- {datacurrent-1.0.1 → datacurrent-1.0.2/datacurrent.egg-info}/PKG-INFO +2 -2
- {datacurrent-1.0.1 → datacurrent-1.0.2}/datacurrent.egg-info/SOURCES.txt +1 -0
- {datacurrent-1.0.1 → datacurrent-1.0.2}/LICENSE +0 -0
- {datacurrent-1.0.1 → datacurrent-1.0.2}/datacurrent/__init__.py +0 -0
- {datacurrent-1.0.1 → datacurrent-1.0.2}/datacurrent/buffering/__init__.py +0 -0
- {datacurrent-1.0.1 → datacurrent-1.0.2}/datacurrent/buffering/backpressure.py +0 -0
- {datacurrent-1.0.1 → datacurrent-1.0.2}/datacurrent/buffering/queue.py +0 -0
- {datacurrent-1.0.1 → datacurrent-1.0.2}/datacurrent/concurrency/__init__.py +0 -0
- {datacurrent-1.0.1 → datacurrent-1.0.2}/datacurrent/concurrency/limits.py +0 -0
- {datacurrent-1.0.1 → datacurrent-1.0.2}/datacurrent/concurrency/tasks.py +0 -0
- {datacurrent-1.0.1 → datacurrent-1.0.2}/datacurrent/config.py +0 -0
- {datacurrent-1.0.1 → datacurrent-1.0.2}/datacurrent/core/__init__.py +0 -0
- {datacurrent-1.0.1 → datacurrent-1.0.2}/datacurrent/core/_util.py +0 -0
- {datacurrent-1.0.1 → datacurrent-1.0.2}/datacurrent/core/lifecycle.py +0 -0
- {datacurrent-1.0.1 → datacurrent-1.0.2}/datacurrent/core/operators.py +0 -0
- {datacurrent-1.0.1 → datacurrent-1.0.2}/datacurrent/core/pipeline.py +0 -0
- {datacurrent-1.0.1 → datacurrent-1.0.2}/datacurrent/core/sink.py +0 -0
- {datacurrent-1.0.1 → datacurrent-1.0.2}/datacurrent/core/stream.py +0 -0
- {datacurrent-1.0.1 → datacurrent-1.0.2}/datacurrent/events/__init__.py +0 -0
- {datacurrent-1.0.1 → datacurrent-1.0.2}/datacurrent/events/bus.py +0 -0
- {datacurrent-1.0.1 → datacurrent-1.0.2}/datacurrent/events/routing.py +0 -0
- {datacurrent-1.0.1 → datacurrent-1.0.2}/datacurrent/events/subscriptions.py +0 -0
- {datacurrent-1.0.1 → datacurrent-1.0.2}/datacurrent/exceptions.py +0 -0
- {datacurrent-1.0.1 → datacurrent-1.0.2}/datacurrent/integrations/__init__.py +0 -0
- {datacurrent-1.0.1 → datacurrent-1.0.2}/datacurrent/integrations/fastapi.py +0 -0
- {datacurrent-1.0.1 → datacurrent-1.0.2}/datacurrent/integrations/starlette.py +0 -0
- {datacurrent-1.0.1 → datacurrent-1.0.2}/datacurrent/observability/__init__.py +0 -0
- {datacurrent-1.0.1 → datacurrent-1.0.2}/datacurrent/observability/logging.py +0 -0
- {datacurrent-1.0.1 → datacurrent-1.0.2}/datacurrent/observability/metrics.py +0 -0
- {datacurrent-1.0.1 → datacurrent-1.0.2}/datacurrent/py.typed +0 -0
- {datacurrent-1.0.1 → datacurrent-1.0.2}/datacurrent/reliability/__init__.py +0 -0
- {datacurrent-1.0.1 → datacurrent-1.0.2}/datacurrent/reliability/retry.py +0 -0
- {datacurrent-1.0.1 → datacurrent-1.0.2}/datacurrent/reliability/timeout.py +0 -0
- {datacurrent-1.0.1 → datacurrent-1.0.2}/datacurrent/transports/__init__.py +0 -0
- {datacurrent-1.0.1 → datacurrent-1.0.2}/datacurrent/transports/_deps.py +0 -0
- {datacurrent-1.0.1 → datacurrent-1.0.2}/datacurrent/transports/base.py +0 -0
- {datacurrent-1.0.1 → datacurrent-1.0.2}/datacurrent/transports/http.py +0 -0
- {datacurrent-1.0.1 → datacurrent-1.0.2}/datacurrent/transports/memory.py +0 -0
- {datacurrent-1.0.1 → datacurrent-1.0.2}/datacurrent/transports/sse.py +0 -0
- {datacurrent-1.0.1 → datacurrent-1.0.2}/datacurrent/transports/websocket.py +0 -0
- {datacurrent-1.0.1 → datacurrent-1.0.2}/datacurrent.egg-info/dependency_links.txt +0 -0
- {datacurrent-1.0.1 → datacurrent-1.0.2}/datacurrent.egg-info/requires.txt +0 -0
- {datacurrent-1.0.1 → datacurrent-1.0.2}/datacurrent.egg-info/top_level.txt +0 -0
- {datacurrent-1.0.1 → datacurrent-1.0.2}/pyproject.toml +0 -0
- {datacurrent-1.0.1 → datacurrent-1.0.2}/setup.cfg +0 -0
|
@@ -4,6 +4,23 @@ 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.2] — 2026-11-13
|
|
8
|
+
|
|
9
|
+
Automation and packaging release. The public API is unchanged.
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
|
|
13
|
+
- GitHub Actions CI (`.github/workflows/ci.yml`) running `ruff`, `mypy` and the
|
|
14
|
+
coverage-enforcing test suite on Python 3.11 through 3.14 for every push and
|
|
15
|
+
pull request.
|
|
16
|
+
|
|
17
|
+
### Fixed
|
|
18
|
+
|
|
19
|
+
- The source distribution ships `CONTRIBUTING.md`; the manifest entry was added
|
|
20
|
+
after the 1.0.1 build.
|
|
21
|
+
- The release workflow now skips the PyPI upload when the version is already
|
|
22
|
+
published, instead of failing on a duplicate file.
|
|
23
|
+
|
|
7
24
|
## [1.0.1] — 2026-11-13
|
|
8
25
|
|
|
9
26
|
Documentation, metadata and packaging release. The public API is unchanged.
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
# Contributing to DataCurrent
|
|
2
|
+
|
|
3
|
+
Thanks for helping improve DataCurrent. This guide covers setup, the checks your
|
|
4
|
+
change must pass, and how releases are published.
|
|
5
|
+
|
|
6
|
+
- Repository: <https://github.com/CoderProandTester/datacurrent>
|
|
7
|
+
- Issues: <https://github.com/CoderProandTester/datacurrent/issues>
|
|
8
|
+
- PyPI: <https://pypi.org/project/datacurrent/>
|
|
9
|
+
|
|
10
|
+
## Development setup
|
|
11
|
+
|
|
12
|
+
Python 3.11 or newer is required.
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
git clone https://github.com/CoderProandTester/datacurrent.git
|
|
16
|
+
cd datacurrent
|
|
17
|
+
python -m venv .venv
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
Activate the environment, then install the package with the development extras:
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
# Windows (Git Bash)
|
|
24
|
+
source .venv/Scripts/activate
|
|
25
|
+
# macOS / Linux
|
|
26
|
+
source .venv/bin/activate
|
|
27
|
+
|
|
28
|
+
python -m pip install --upgrade pip
|
|
29
|
+
python -m pip install -e ".[dev]"
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
`dev` pulls in `pytest`, `pytest-asyncio`, `pytest-cov`, `hypothesis`, `build`,
|
|
33
|
+
`twine`, `ruff` and `mypy`.
|
|
34
|
+
|
|
35
|
+
## Before you change anything
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
python scripts/dev.py check # ruff + mypy
|
|
39
|
+
python scripts/dev.py test # full test suite
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
`scripts/dev.py` runs every command with the interpreter that launched it, so it
|
|
43
|
+
always uses the active virtual environment. `python scripts/dev.py --help`
|
|
44
|
+
lists all tasks.
|
|
45
|
+
|
|
46
|
+
## Layout
|
|
47
|
+
|
|
48
|
+
| Path | Contents |
|
|
49
|
+
|---|---|
|
|
50
|
+
| `datacurrent/core/` | `Stream`, operators, pipelines, terminals |
|
|
51
|
+
| `datacurrent/buffering/` | `BoundedQueue`, backpressure policies |
|
|
52
|
+
| `datacurrent/concurrency/` | `ConcurrencyLimiter`, task tracking, `gather_limited` |
|
|
53
|
+
| `datacurrent/reliability/` | retries, timeouts |
|
|
54
|
+
| `datacurrent/transports/` | HTTP, SSE, WebSocket and the transport base |
|
|
55
|
+
| `datacurrent/events/` | `Channel`, `EventBus`, routing |
|
|
56
|
+
| `datacurrent/integrations/` | FastAPI and Starlette helpers |
|
|
57
|
+
| `datacurrent/observability/` | metrics, stats, structured logging |
|
|
58
|
+
| `docs/` | guides and the API reference |
|
|
59
|
+
| `examples/` | sixteen runnable, test-covered scripts |
|
|
60
|
+
| `tests/` | unit, property-based, stress and packaging tests |
|
|
61
|
+
| `benchmarks/` | reproducible micro-benchmarks |
|
|
62
|
+
|
|
63
|
+
## Making a change
|
|
64
|
+
|
|
65
|
+
1. Keep the public API in `datacurrent/__init__.py` and `__all__` in sync when
|
|
66
|
+
you add or remove an export.
|
|
67
|
+
2. Preserve the existing guarantees: laziness, single consumption, bounded
|
|
68
|
+
buffers that block by default, counted drops, and cancellation-safe cleanup.
|
|
69
|
+
3. New behaviour needs tests. The project enforces **100% line and branch
|
|
70
|
+
coverage**, so aim for that before you open a pull request.
|
|
71
|
+
4. Add an example when you add a user-facing feature, and list it in the README
|
|
72
|
+
examples table. Examples must define `async def main()` and run in under 30
|
|
73
|
+
seconds; `tests/unit/test_examples.py` executes every file that does not start
|
|
74
|
+
with `_`.
|
|
75
|
+
5. Update `CHANGELOG.md` under an "Unreleased" or new version heading. The format
|
|
76
|
+
follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and versions
|
|
77
|
+
follow [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
78
|
+
|
|
79
|
+
## Checks
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
python scripts/dev.py lint # ruff check .
|
|
83
|
+
python scripts/dev.py fmt # ruff format .
|
|
84
|
+
python scripts/dev.py typecheck # mypy
|
|
85
|
+
python scripts/dev.py cov # pytest with coverage (must be 100%)
|
|
86
|
+
python scripts/dev.py examples # just the example scripts
|
|
87
|
+
python scripts/dev.py build # sdist + wheel
|
|
88
|
+
python scripts/dev.py check-dist # twine check dist/*
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
A change is ready when `lint`, `typecheck` and `cov` all pass. Please do not
|
|
92
|
+
weaken assertions, skip tests or add suppressions to get a green run; fix the
|
|
93
|
+
cause instead.
|
|
94
|
+
|
|
95
|
+
## Style
|
|
96
|
+
|
|
97
|
+
- `ruff` with a 100-character line length, targeting Python 3.11 syntax.
|
|
98
|
+
- Full type annotations on public functions; the package ships `py.typed`.
|
|
99
|
+
- Async-first: no blocking I/O on the event loop.
|
|
100
|
+
- Prefer editing existing modules over adding new ones.
|
|
101
|
+
- Comments explain why, not what.
|
|
102
|
+
|
|
103
|
+
## Reporting a bug
|
|
104
|
+
|
|
105
|
+
Open an issue at <https://github.com/CoderProandTester/datacurrent/issues> with
|
|
106
|
+
the version (`python -c "import datacurrent; print(datacurrent.__version__)"`),
|
|
107
|
+
your Python version and platform, a minimal reproduction, and what you expected
|
|
108
|
+
instead. Security issues should be reported privately rather than in a public
|
|
109
|
+
issue.
|
|
110
|
+
|
|
111
|
+
## Release process
|
|
112
|
+
|
|
113
|
+
Versions are read from `datacurrent/_version.py`; that file is the single source
|
|
114
|
+
of truth. Releases are normally published by GitHub Actions with PyPI trusted
|
|
115
|
+
publishing, so the upload carries a signed provenance attestation.
|
|
116
|
+
|
|
117
|
+
```bash
|
|
118
|
+
# 1. Bump the version and document it
|
|
119
|
+
# datacurrent/_version.py -> __version__ = "1.0.2"
|
|
120
|
+
# CHANGELOG.md -> new heading with the date
|
|
121
|
+
|
|
122
|
+
# 2. Verify everything
|
|
123
|
+
python scripts/dev.py release # lint, mypy, tests, build, twine check
|
|
124
|
+
|
|
125
|
+
# 3. Publish
|
|
126
|
+
# Preferred: GitHub Release -> the release workflow uploads to PyPI
|
|
127
|
+
# Fallback: twine upload dist/*
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
Set `TWINE_USERNAME=__token__` and `TWINE_PASSWORD=<PyPI API token>` (or use
|
|
131
|
+
`~/.pypirc`) for the manual path. PyPI rejects re-uploads of an existing version,
|
|
132
|
+
so a failed upload always needs a new version number.
|
|
133
|
+
|
|
134
|
+
## License
|
|
135
|
+
|
|
136
|
+
By contributing you agree that your contributions are licensed under the MIT
|
|
137
|
+
license in `LICENSE`.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: datacurrent
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.2
|
|
4
4
|
Summary: Python streaming, made simple: async streams, operators, backpressure and real-time transports.
|
|
5
5
|
Author: DataCurrent contributors
|
|
6
6
|
License: MIT
|
|
@@ -57,7 +57,7 @@ DataCurrent is a production-ready asynchronous streaming library. It gives you
|
|
|
57
57
|
one consistent API for lists, async generators, queues, WebSockets, Server-Sent
|
|
58
58
|
Events and streaming HTTP responses.
|
|
59
59
|
|
|
60
|
-
**Version 1.0.
|
|
60
|
+
**Version 1.0.2 · Stable / Production**
|
|
61
61
|
|
|
62
62
|
[](https://pypi.org/project/datacurrent/)
|
|
63
63
|
[](https://pypi.org/project/datacurrent/)
|
|
@@ -6,7 +6,7 @@ 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.2 · Stable / Production**
|
|
10
10
|
|
|
11
11
|
[](https://pypi.org/project/datacurrent/)
|
|
12
12
|
[](https://pypi.org/project/datacurrent/)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: datacurrent
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.2
|
|
4
4
|
Summary: Python streaming, made simple: async streams, operators, backpressure and real-time transports.
|
|
5
5
|
Author: DataCurrent contributors
|
|
6
6
|
License: MIT
|
|
@@ -57,7 +57,7 @@ DataCurrent is a production-ready asynchronous streaming library. It gives you
|
|
|
57
57
|
one consistent API for lists, async generators, queues, WebSockets, Server-Sent
|
|
58
58
|
Events and streaming HTTP responses.
|
|
59
59
|
|
|
60
|
-
**Version 1.0.
|
|
60
|
+
**Version 1.0.2 · Stable / Production**
|
|
61
61
|
|
|
62
62
|
[](https://pypi.org/project/datacurrent/)
|
|
63
63
|
[](https://pypi.org/project/datacurrent/)
|
|
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
|