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.
Files changed (51) hide show
  1. {datacurrent-1.0.1 → datacurrent-1.0.2}/CHANGELOG.md +17 -0
  2. datacurrent-1.0.2/CONTRIBUTING.md +137 -0
  3. {datacurrent-1.0.1 → datacurrent-1.0.2}/MANIFEST.in +1 -0
  4. {datacurrent-1.0.1/datacurrent.egg-info → datacurrent-1.0.2}/PKG-INFO +2 -2
  5. {datacurrent-1.0.1 → datacurrent-1.0.2}/README.md +1 -1
  6. {datacurrent-1.0.1 → datacurrent-1.0.2}/datacurrent/_version.py +1 -1
  7. {datacurrent-1.0.1 → datacurrent-1.0.2/datacurrent.egg-info}/PKG-INFO +2 -2
  8. {datacurrent-1.0.1 → datacurrent-1.0.2}/datacurrent.egg-info/SOURCES.txt +1 -0
  9. {datacurrent-1.0.1 → datacurrent-1.0.2}/LICENSE +0 -0
  10. {datacurrent-1.0.1 → datacurrent-1.0.2}/datacurrent/__init__.py +0 -0
  11. {datacurrent-1.0.1 → datacurrent-1.0.2}/datacurrent/buffering/__init__.py +0 -0
  12. {datacurrent-1.0.1 → datacurrent-1.0.2}/datacurrent/buffering/backpressure.py +0 -0
  13. {datacurrent-1.0.1 → datacurrent-1.0.2}/datacurrent/buffering/queue.py +0 -0
  14. {datacurrent-1.0.1 → datacurrent-1.0.2}/datacurrent/concurrency/__init__.py +0 -0
  15. {datacurrent-1.0.1 → datacurrent-1.0.2}/datacurrent/concurrency/limits.py +0 -0
  16. {datacurrent-1.0.1 → datacurrent-1.0.2}/datacurrent/concurrency/tasks.py +0 -0
  17. {datacurrent-1.0.1 → datacurrent-1.0.2}/datacurrent/config.py +0 -0
  18. {datacurrent-1.0.1 → datacurrent-1.0.2}/datacurrent/core/__init__.py +0 -0
  19. {datacurrent-1.0.1 → datacurrent-1.0.2}/datacurrent/core/_util.py +0 -0
  20. {datacurrent-1.0.1 → datacurrent-1.0.2}/datacurrent/core/lifecycle.py +0 -0
  21. {datacurrent-1.0.1 → datacurrent-1.0.2}/datacurrent/core/operators.py +0 -0
  22. {datacurrent-1.0.1 → datacurrent-1.0.2}/datacurrent/core/pipeline.py +0 -0
  23. {datacurrent-1.0.1 → datacurrent-1.0.2}/datacurrent/core/sink.py +0 -0
  24. {datacurrent-1.0.1 → datacurrent-1.0.2}/datacurrent/core/stream.py +0 -0
  25. {datacurrent-1.0.1 → datacurrent-1.0.2}/datacurrent/events/__init__.py +0 -0
  26. {datacurrent-1.0.1 → datacurrent-1.0.2}/datacurrent/events/bus.py +0 -0
  27. {datacurrent-1.0.1 → datacurrent-1.0.2}/datacurrent/events/routing.py +0 -0
  28. {datacurrent-1.0.1 → datacurrent-1.0.2}/datacurrent/events/subscriptions.py +0 -0
  29. {datacurrent-1.0.1 → datacurrent-1.0.2}/datacurrent/exceptions.py +0 -0
  30. {datacurrent-1.0.1 → datacurrent-1.0.2}/datacurrent/integrations/__init__.py +0 -0
  31. {datacurrent-1.0.1 → datacurrent-1.0.2}/datacurrent/integrations/fastapi.py +0 -0
  32. {datacurrent-1.0.1 → datacurrent-1.0.2}/datacurrent/integrations/starlette.py +0 -0
  33. {datacurrent-1.0.1 → datacurrent-1.0.2}/datacurrent/observability/__init__.py +0 -0
  34. {datacurrent-1.0.1 → datacurrent-1.0.2}/datacurrent/observability/logging.py +0 -0
  35. {datacurrent-1.0.1 → datacurrent-1.0.2}/datacurrent/observability/metrics.py +0 -0
  36. {datacurrent-1.0.1 → datacurrent-1.0.2}/datacurrent/py.typed +0 -0
  37. {datacurrent-1.0.1 → datacurrent-1.0.2}/datacurrent/reliability/__init__.py +0 -0
  38. {datacurrent-1.0.1 → datacurrent-1.0.2}/datacurrent/reliability/retry.py +0 -0
  39. {datacurrent-1.0.1 → datacurrent-1.0.2}/datacurrent/reliability/timeout.py +0 -0
  40. {datacurrent-1.0.1 → datacurrent-1.0.2}/datacurrent/transports/__init__.py +0 -0
  41. {datacurrent-1.0.1 → datacurrent-1.0.2}/datacurrent/transports/_deps.py +0 -0
  42. {datacurrent-1.0.1 → datacurrent-1.0.2}/datacurrent/transports/base.py +0 -0
  43. {datacurrent-1.0.1 → datacurrent-1.0.2}/datacurrent/transports/http.py +0 -0
  44. {datacurrent-1.0.1 → datacurrent-1.0.2}/datacurrent/transports/memory.py +0 -0
  45. {datacurrent-1.0.1 → datacurrent-1.0.2}/datacurrent/transports/sse.py +0 -0
  46. {datacurrent-1.0.1 → datacurrent-1.0.2}/datacurrent/transports/websocket.py +0 -0
  47. {datacurrent-1.0.1 → datacurrent-1.0.2}/datacurrent.egg-info/dependency_links.txt +0 -0
  48. {datacurrent-1.0.1 → datacurrent-1.0.2}/datacurrent.egg-info/requires.txt +0 -0
  49. {datacurrent-1.0.1 → datacurrent-1.0.2}/datacurrent.egg-info/top_level.txt +0 -0
  50. {datacurrent-1.0.1 → datacurrent-1.0.2}/pyproject.toml +0 -0
  51. {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,7 @@
1
1
  include README.md
2
2
  include LICENSE
3
3
  include CHANGELOG.md
4
+ include CONTRIBUTING.md
4
5
  include MANIFEST.in
5
6
  recursive-include datacurrent *.py py.typed
6
7
  prune tests
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: datacurrent
3
- Version: 1.0.1
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.1 · Stable / Production**
60
+ **Version 1.0.2 · Stable / Production**
61
61
 
62
62
  [![PyPI version](https://img.shields.io/pypi/v/datacurrent.svg)](https://pypi.org/project/datacurrent/)
63
63
  [![Python versions](https://img.shields.io/pypi/pyversions/datacurrent.svg)](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.1 · Stable / Production**
9
+ **Version 1.0.2 · Stable / Production**
10
10
 
11
11
  [![PyPI version](https://img.shields.io/pypi/v/datacurrent.svg)](https://pypi.org/project/datacurrent/)
12
12
  [![Python versions](https://img.shields.io/pypi/pyversions/datacurrent.svg)](https://pypi.org/project/datacurrent/)
@@ -2,5 +2,5 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
- __version__ = "1.0.1"
5
+ __version__ = "1.0.2"
6
6
  VERSION = tuple(int(part) for part in __version__.split("."))
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: datacurrent
3
- Version: 1.0.1
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.1 · Stable / Production**
60
+ **Version 1.0.2 · Stable / Production**
61
61
 
62
62
  [![PyPI version](https://img.shields.io/pypi/v/datacurrent.svg)](https://pypi.org/project/datacurrent/)
63
63
  [![Python versions](https://img.shields.io/pypi/pyversions/datacurrent.svg)](https://pypi.org/project/datacurrent/)
@@ -1,4 +1,5 @@
1
1
  CHANGELOG.md
2
+ CONTRIBUTING.md
2
3
  LICENSE
3
4
  MANIFEST.in
4
5
  README.md
File without changes
File without changes
File without changes