edgesync 0.2.0__tar.gz → 0.2.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.
- {edgesync-0.2.0 → edgesync-0.2.1}/CHANGELOG.md +17 -1
- {edgesync-0.2.0 → edgesync-0.2.1}/PKG-INFO +13 -10
- {edgesync-0.2.0 → edgesync-0.2.1}/README.md +9 -9
- edgesync-0.2.1/VERSION +1 -0
- {edgesync-0.2.0 → edgesync-0.2.1}/pyproject.toml +3 -0
- edgesync-0.2.0/VERSION +0 -1
- {edgesync-0.2.0 → edgesync-0.2.1}/.github/workflows/ci.yml +0 -0
- {edgesync-0.2.0 → edgesync-0.2.1}/.github/workflows/release.yml +0 -0
- {edgesync-0.2.0 → edgesync-0.2.1}/.gitignore +0 -0
- {edgesync-0.2.0 → edgesync-0.2.1}/CONTRIBUTING.md +0 -0
- {edgesync-0.2.0 → edgesync-0.2.1}/LICENSE +0 -0
- {edgesync-0.2.0 → edgesync-0.2.1}/SECURITY.md +0 -0
- {edgesync-0.2.0 → edgesync-0.2.1}/docs/getting-started.md +0 -0
- {edgesync-0.2.0 → edgesync-0.2.1}/docs/integrations.md +0 -0
- {edgesync-0.2.0 → edgesync-0.2.1}/docs/reliability.md +0 -0
- {edgesync-0.2.0 → edgesync-0.2.1}/docs/storage.md +0 -0
- {edgesync-0.2.0 → edgesync-0.2.1}/edgesync/__init__.py +0 -0
- {edgesync-0.2.0 → edgesync-0.2.1}/edgesync/client.py +0 -0
- {edgesync-0.2.0 → edgesync-0.2.1}/edgesync/config.py +0 -0
- {edgesync-0.2.0 → edgesync-0.2.1}/edgesync/exceptions.py +0 -0
- {edgesync-0.2.0 → edgesync-0.2.1}/edgesync/logging.py +0 -0
- {edgesync-0.2.0 → edgesync-0.2.1}/edgesync/models/__init__.py +0 -0
- {edgesync-0.2.0 → edgesync-0.2.1}/edgesync/models/delivery.py +0 -0
- {edgesync-0.2.0 → edgesync-0.2.1}/edgesync/models/message.py +0 -0
- {edgesync-0.2.0 → edgesync-0.2.1}/edgesync/models/receipt.py +0 -0
- {edgesync-0.2.0 → edgesync-0.2.1}/edgesync/models/stats.py +0 -0
- {edgesync-0.2.0 → edgesync-0.2.1}/edgesync/py.typed +0 -0
- {edgesync-0.2.0 → edgesync-0.2.1}/edgesync/queue/__init__.py +0 -0
- {edgesync-0.2.0 → edgesync-0.2.1}/edgesync/queue/manager.py +0 -0
- {edgesync-0.2.0 → edgesync-0.2.1}/edgesync/retry/__init__.py +0 -0
- {edgesync-0.2.0 → edgesync-0.2.1}/edgesync/retry/backoff.py +0 -0
- {edgesync-0.2.0 → edgesync-0.2.1}/edgesync/retry/policy.py +0 -0
- {edgesync-0.2.0 → edgesync-0.2.1}/edgesync/storage/__init__.py +0 -0
- {edgesync-0.2.0 → edgesync-0.2.1}/edgesync/storage/base.py +0 -0
- {edgesync-0.2.0 → edgesync-0.2.1}/edgesync/storage/migrations.py +0 -0
- {edgesync-0.2.0 → edgesync-0.2.1}/edgesync/storage/sqlite.py +0 -0
- {edgesync-0.2.0 → edgesync-0.2.1}/edgesync/transports/__init__.py +0 -0
- {edgesync-0.2.0 → edgesync-0.2.1}/edgesync/transports/base.py +0 -0
- {edgesync-0.2.0 → edgesync-0.2.1}/edgesync/transports/http.py +0 -0
- {edgesync-0.2.0 → edgesync-0.2.1}/edgesync/transports/registry.py +0 -0
- {edgesync-0.2.0 → edgesync-0.2.1}/edgesync/utils/__init__.py +0 -0
- {edgesync-0.2.0 → edgesync-0.2.1}/edgesync/utils/clock.py +0 -0
- {edgesync-0.2.0 → edgesync-0.2.1}/edgesync/utils/ids.py +0 -0
- {edgesync-0.2.0 → edgesync-0.2.1}/edgesync/worker/__init__.py +0 -0
- {edgesync-0.2.0 → edgesync-0.2.1}/edgesync/worker/lifecycle.py +0 -0
- {edgesync-0.2.0 → edgesync-0.2.1}/edgesync/worker/scheduler.py +0 -0
- {edgesync-0.2.0 → edgesync-0.2.1}/edgesync/worker/sync_worker.py +0 -0
- {edgesync-0.2.0 → edgesync-0.2.1}/tests/__init__.py +0 -0
- {edgesync-0.2.0 → edgesync-0.2.1}/tests/conftest.py +0 -0
- {edgesync-0.2.0 → edgesync-0.2.1}/tests/fixtures/__init__.py +0 -0
- {edgesync-0.2.0 → edgesync-0.2.1}/tests/fixtures/factories.py +0 -0
- {edgesync-0.2.0 → edgesync-0.2.1}/tests/fixtures/fake_transport.py +0 -0
- {edgesync-0.2.0 → edgesync-0.2.1}/tests/integration/__init__.py +0 -0
- {edgesync-0.2.0 → edgesync-0.2.1}/tests/integration/test_client.py +0 -0
- {edgesync-0.2.0 → edgesync-0.2.1}/tests/integration/test_http_transport.py +0 -0
- {edgesync-0.2.0 → edgesync-0.2.1}/tests/integration/test_sqlite_storage.py +0 -0
- {edgesync-0.2.0 → edgesync-0.2.1}/tests/integration/test_worker.py +0 -0
- {edgesync-0.2.0 → edgesync-0.2.1}/tests/reliability/__init__.py +0 -0
- {edgesync-0.2.0 → edgesync-0.2.1}/tests/reliability/test_reliability.py +0 -0
- {edgesync-0.2.0 → edgesync-0.2.1}/tests/unit/__init__.py +0 -0
- {edgesync-0.2.0 → edgesync-0.2.1}/tests/unit/test_backoff.py +0 -0
- {edgesync-0.2.0 → edgesync-0.2.1}/tests/unit/test_config.py +0 -0
- {edgesync-0.2.0 → edgesync-0.2.1}/tests/unit/test_models.py +0 -0
- {edgesync-0.2.0 → edgesync-0.2.1}/tests/unit/test_queue_manager.py +0 -0
- {edgesync-0.2.0 → edgesync-0.2.1}/tests/unit/test_retry_policy.py +0 -0
- {edgesync-0.2.0 → edgesync-0.2.1}/uv.lock +0 -0
|
@@ -7,6 +7,21 @@ project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.2.1] - 2026-08-24
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- `Contributing` and `License` links in the package's `[project.urls]` metadata, so they
|
|
15
|
+
show up in PyPI's project sidebar alongside Homepage/Repository/Documentation/Changelog.
|
|
16
|
+
- `Issue Tracker` link in `[project.urls]`.
|
|
17
|
+
|
|
18
|
+
### Fixed
|
|
19
|
+
|
|
20
|
+
- `README.md` links to `docs/`, `CONTRIBUTING.md`, and `LICENSE` used repo-relative paths,
|
|
21
|
+
which render correctly on GitHub but break on PyPI (e.g. resolving to
|
|
22
|
+
`pypi.org/project/edgesync/CONTRIBUTING.md/`) since PyPI renders the README as a
|
|
23
|
+
standalone page. They're now absolute `github.com` URLs.
|
|
24
|
+
|
|
10
25
|
## [0.2.0] - 2026-08-23
|
|
11
26
|
|
|
12
27
|
### Added
|
|
@@ -47,6 +62,7 @@ project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
|
47
62
|
- Crash and restart recovery via expired-lease sweeps, safe across concurrent workers and
|
|
48
63
|
processes sharing the same database file.
|
|
49
64
|
|
|
50
|
-
[Unreleased]: https://github.com/adhuldas/EdgeSync/compare/v0.2.
|
|
65
|
+
[Unreleased]: https://github.com/adhuldas/EdgeSync/compare/v0.2.1...HEAD
|
|
66
|
+
[0.2.1]: https://github.com/adhuldas/EdgeSync/compare/v0.2.0...v0.2.1
|
|
51
67
|
[0.2.0]: https://github.com/adhuldas/EdgeSync/compare/v0.1.0...v0.2.0
|
|
52
68
|
[0.1.0]: https://github.com/adhuldas/EdgeSync/releases/tag/v0.1.0
|
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: edgesync
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.1
|
|
4
4
|
Summary: Reliable data delivery for unreliable networks.
|
|
5
5
|
Project-URL: Homepage, https://github.com/adhuldas/EdgeSync
|
|
6
6
|
Project-URL: Repository, https://github.com/adhuldas/EdgeSync
|
|
7
7
|
Project-URL: Documentation, https://github.com/adhuldas/EdgeSync/tree/main/docs
|
|
8
8
|
Project-URL: Changelog, https://github.com/adhuldas/EdgeSync/blob/main/CHANGELOG.md
|
|
9
|
+
Project-URL: Issue Tracker, https://github.com/adhuldas/EdgeSync/issues
|
|
10
|
+
Project-URL: Contributing, https://github.com/adhuldas/EdgeSync/blob/main/CONTRIBUTING.md
|
|
11
|
+
Project-URL: License, https://github.com/adhuldas/EdgeSync/blob/main/LICENSE
|
|
9
12
|
Author-email: Adhul Das M K <adhulamz@gmail.com>
|
|
10
13
|
License-Expression: MIT
|
|
11
14
|
License-File: LICENSE
|
|
@@ -30,7 +33,7 @@ Description-Content-Type: text/markdown
|
|
|
30
33
|
|
|
31
34
|
[](https://github.com/adhuldas/EdgeSync/actions/workflows/ci.yml)
|
|
32
35
|
[](https://pypi.org/project/edgesync/)
|
|
33
|
-
[](LICENSE)
|
|
36
|
+
[](https://github.com/adhuldas/EdgeSync/blob/main/LICENSE)
|
|
34
37
|
[](pyproject.toml)
|
|
35
38
|
|
|
36
39
|
A lightweight Python library for reliable data delivery from edge applications to cloud
|
|
@@ -52,7 +55,7 @@ solves this with a durable store-and-forward architecture:
|
|
|
52
55
|
5. Pending data survives process crashes and device restarts.
|
|
53
56
|
|
|
54
57
|
EdgeSync provides **at-least-once** delivery, not exactly-once — see
|
|
55
|
-
[docs/reliability.md](docs/reliability.md) for the exact guarantee and how to build
|
|
58
|
+
[docs/reliability.md](https://github.com/adhuldas/EdgeSync/blob/main/docs/reliability.md) for the exact guarantee and how to build
|
|
56
59
|
idempotent consumers on top of it.
|
|
57
60
|
|
|
58
61
|
## Install
|
|
@@ -114,7 +117,7 @@ async def telemetry(payload: dict):
|
|
|
114
117
|
|
|
115
118
|
Flask is synchronous, so it needs a small bridge to run EdgeSync's event loop on a background
|
|
116
119
|
thread rather than spinning up a new loop per request. See
|
|
117
|
-
[docs/integrations.md](docs/integrations.md) for the full FastAPI, Flask, and plain-`asyncio`
|
|
120
|
+
[docs/integrations.md](https://github.com/adhuldas/EdgeSync/blob/main/docs/integrations.md) for the full FastAPI, Flask, and plain-`asyncio`
|
|
118
121
|
guide, including the ready-to-use Flask bridge.
|
|
119
122
|
|
|
120
123
|
## Features
|
|
@@ -134,10 +137,10 @@ guide, including the ready-to-use Flask bridge.
|
|
|
134
137
|
|
|
135
138
|
## Documentation
|
|
136
139
|
|
|
137
|
-
- [Getting started](docs/getting-started.md)
|
|
138
|
-
- [Using EdgeSync with FastAPI, Flask, and plain asyncio](docs/integrations.md)
|
|
139
|
-
- [Reliability & delivery guarantees](docs/reliability.md)
|
|
140
|
-
- [Storage design](docs/storage.md)
|
|
140
|
+
- [Getting started](https://github.com/adhuldas/EdgeSync/blob/main/docs/getting-started.md)
|
|
141
|
+
- [Using EdgeSync with FastAPI, Flask, and plain asyncio](https://github.com/adhuldas/EdgeSync/blob/main/docs/integrations.md)
|
|
142
|
+
- [Reliability & delivery guarantees](https://github.com/adhuldas/EdgeSync/blob/main/docs/reliability.md)
|
|
143
|
+
- [Storage design](https://github.com/adhuldas/EdgeSync/blob/main/docs/storage.md)
|
|
141
144
|
|
|
142
145
|
## Development
|
|
143
146
|
|
|
@@ -148,8 +151,8 @@ uv run ruff check .
|
|
|
148
151
|
uv run mypy
|
|
149
152
|
```
|
|
150
153
|
|
|
151
|
-
See [CONTRIBUTING.md](CONTRIBUTING.md) for the full workflow.
|
|
154
|
+
See [CONTRIBUTING.md](https://github.com/adhuldas/EdgeSync/blob/main/CONTRIBUTING.md) for the full workflow.
|
|
152
155
|
|
|
153
156
|
## License
|
|
154
157
|
|
|
155
|
-
MIT — see [LICENSE](LICENSE).
|
|
158
|
+
MIT — see [LICENSE](https://github.com/adhuldas/EdgeSync/blob/main/LICENSE).
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
[](https://github.com/adhuldas/EdgeSync/actions/workflows/ci.yml)
|
|
4
4
|
[](https://pypi.org/project/edgesync/)
|
|
5
|
-
[](LICENSE)
|
|
5
|
+
[](https://github.com/adhuldas/EdgeSync/blob/main/LICENSE)
|
|
6
6
|
[](pyproject.toml)
|
|
7
7
|
|
|
8
8
|
A lightweight Python library for reliable data delivery from edge applications to cloud
|
|
@@ -24,7 +24,7 @@ solves this with a durable store-and-forward architecture:
|
|
|
24
24
|
5. Pending data survives process crashes and device restarts.
|
|
25
25
|
|
|
26
26
|
EdgeSync provides **at-least-once** delivery, not exactly-once — see
|
|
27
|
-
[docs/reliability.md](docs/reliability.md) for the exact guarantee and how to build
|
|
27
|
+
[docs/reliability.md](https://github.com/adhuldas/EdgeSync/blob/main/docs/reliability.md) for the exact guarantee and how to build
|
|
28
28
|
idempotent consumers on top of it.
|
|
29
29
|
|
|
30
30
|
## Install
|
|
@@ -86,7 +86,7 @@ async def telemetry(payload: dict):
|
|
|
86
86
|
|
|
87
87
|
Flask is synchronous, so it needs a small bridge to run EdgeSync's event loop on a background
|
|
88
88
|
thread rather than spinning up a new loop per request. See
|
|
89
|
-
[docs/integrations.md](docs/integrations.md) for the full FastAPI, Flask, and plain-`asyncio`
|
|
89
|
+
[docs/integrations.md](https://github.com/adhuldas/EdgeSync/blob/main/docs/integrations.md) for the full FastAPI, Flask, and plain-`asyncio`
|
|
90
90
|
guide, including the ready-to-use Flask bridge.
|
|
91
91
|
|
|
92
92
|
## Features
|
|
@@ -106,10 +106,10 @@ guide, including the ready-to-use Flask bridge.
|
|
|
106
106
|
|
|
107
107
|
## Documentation
|
|
108
108
|
|
|
109
|
-
- [Getting started](docs/getting-started.md)
|
|
110
|
-
- [Using EdgeSync with FastAPI, Flask, and plain asyncio](docs/integrations.md)
|
|
111
|
-
- [Reliability & delivery guarantees](docs/reliability.md)
|
|
112
|
-
- [Storage design](docs/storage.md)
|
|
109
|
+
- [Getting started](https://github.com/adhuldas/EdgeSync/blob/main/docs/getting-started.md)
|
|
110
|
+
- [Using EdgeSync with FastAPI, Flask, and plain asyncio](https://github.com/adhuldas/EdgeSync/blob/main/docs/integrations.md)
|
|
111
|
+
- [Reliability & delivery guarantees](https://github.com/adhuldas/EdgeSync/blob/main/docs/reliability.md)
|
|
112
|
+
- [Storage design](https://github.com/adhuldas/EdgeSync/blob/main/docs/storage.md)
|
|
113
113
|
|
|
114
114
|
## Development
|
|
115
115
|
|
|
@@ -120,8 +120,8 @@ uv run ruff check .
|
|
|
120
120
|
uv run mypy
|
|
121
121
|
```
|
|
122
122
|
|
|
123
|
-
See [CONTRIBUTING.md](CONTRIBUTING.md) for the full workflow.
|
|
123
|
+
See [CONTRIBUTING.md](https://github.com/adhuldas/EdgeSync/blob/main/CONTRIBUTING.md) for the full workflow.
|
|
124
124
|
|
|
125
125
|
## License
|
|
126
126
|
|
|
127
|
-
MIT — see [LICENSE](LICENSE).
|
|
127
|
+
MIT — see [LICENSE](https://github.com/adhuldas/EdgeSync/blob/main/LICENSE).
|
edgesync-0.2.1/VERSION
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
0.2.1
|
|
@@ -30,6 +30,9 @@ Homepage = "https://github.com/adhuldas/EdgeSync"
|
|
|
30
30
|
Repository = "https://github.com/adhuldas/EdgeSync"
|
|
31
31
|
Documentation = "https://github.com/adhuldas/EdgeSync/tree/main/docs"
|
|
32
32
|
Changelog = "https://github.com/adhuldas/EdgeSync/blob/main/CHANGELOG.md"
|
|
33
|
+
"Issue Tracker" = "https://github.com/adhuldas/EdgeSync/issues"
|
|
34
|
+
Contributing = "https://github.com/adhuldas/EdgeSync/blob/main/CONTRIBUTING.md"
|
|
35
|
+
License = "https://github.com/adhuldas/EdgeSync/blob/main/LICENSE"
|
|
33
36
|
|
|
34
37
|
[dependency-groups]
|
|
35
38
|
dev = [
|
edgesync-0.2.0/VERSION
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
0.2.0
|
|
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
|
|
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
|