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.
Files changed (66) hide show
  1. {edgesync-0.2.0 → edgesync-0.2.1}/CHANGELOG.md +17 -1
  2. {edgesync-0.2.0 → edgesync-0.2.1}/PKG-INFO +13 -10
  3. {edgesync-0.2.0 → edgesync-0.2.1}/README.md +9 -9
  4. edgesync-0.2.1/VERSION +1 -0
  5. {edgesync-0.2.0 → edgesync-0.2.1}/pyproject.toml +3 -0
  6. edgesync-0.2.0/VERSION +0 -1
  7. {edgesync-0.2.0 → edgesync-0.2.1}/.github/workflows/ci.yml +0 -0
  8. {edgesync-0.2.0 → edgesync-0.2.1}/.github/workflows/release.yml +0 -0
  9. {edgesync-0.2.0 → edgesync-0.2.1}/.gitignore +0 -0
  10. {edgesync-0.2.0 → edgesync-0.2.1}/CONTRIBUTING.md +0 -0
  11. {edgesync-0.2.0 → edgesync-0.2.1}/LICENSE +0 -0
  12. {edgesync-0.2.0 → edgesync-0.2.1}/SECURITY.md +0 -0
  13. {edgesync-0.2.0 → edgesync-0.2.1}/docs/getting-started.md +0 -0
  14. {edgesync-0.2.0 → edgesync-0.2.1}/docs/integrations.md +0 -0
  15. {edgesync-0.2.0 → edgesync-0.2.1}/docs/reliability.md +0 -0
  16. {edgesync-0.2.0 → edgesync-0.2.1}/docs/storage.md +0 -0
  17. {edgesync-0.2.0 → edgesync-0.2.1}/edgesync/__init__.py +0 -0
  18. {edgesync-0.2.0 → edgesync-0.2.1}/edgesync/client.py +0 -0
  19. {edgesync-0.2.0 → edgesync-0.2.1}/edgesync/config.py +0 -0
  20. {edgesync-0.2.0 → edgesync-0.2.1}/edgesync/exceptions.py +0 -0
  21. {edgesync-0.2.0 → edgesync-0.2.1}/edgesync/logging.py +0 -0
  22. {edgesync-0.2.0 → edgesync-0.2.1}/edgesync/models/__init__.py +0 -0
  23. {edgesync-0.2.0 → edgesync-0.2.1}/edgesync/models/delivery.py +0 -0
  24. {edgesync-0.2.0 → edgesync-0.2.1}/edgesync/models/message.py +0 -0
  25. {edgesync-0.2.0 → edgesync-0.2.1}/edgesync/models/receipt.py +0 -0
  26. {edgesync-0.2.0 → edgesync-0.2.1}/edgesync/models/stats.py +0 -0
  27. {edgesync-0.2.0 → edgesync-0.2.1}/edgesync/py.typed +0 -0
  28. {edgesync-0.2.0 → edgesync-0.2.1}/edgesync/queue/__init__.py +0 -0
  29. {edgesync-0.2.0 → edgesync-0.2.1}/edgesync/queue/manager.py +0 -0
  30. {edgesync-0.2.0 → edgesync-0.2.1}/edgesync/retry/__init__.py +0 -0
  31. {edgesync-0.2.0 → edgesync-0.2.1}/edgesync/retry/backoff.py +0 -0
  32. {edgesync-0.2.0 → edgesync-0.2.1}/edgesync/retry/policy.py +0 -0
  33. {edgesync-0.2.0 → edgesync-0.2.1}/edgesync/storage/__init__.py +0 -0
  34. {edgesync-0.2.0 → edgesync-0.2.1}/edgesync/storage/base.py +0 -0
  35. {edgesync-0.2.0 → edgesync-0.2.1}/edgesync/storage/migrations.py +0 -0
  36. {edgesync-0.2.0 → edgesync-0.2.1}/edgesync/storage/sqlite.py +0 -0
  37. {edgesync-0.2.0 → edgesync-0.2.1}/edgesync/transports/__init__.py +0 -0
  38. {edgesync-0.2.0 → edgesync-0.2.1}/edgesync/transports/base.py +0 -0
  39. {edgesync-0.2.0 → edgesync-0.2.1}/edgesync/transports/http.py +0 -0
  40. {edgesync-0.2.0 → edgesync-0.2.1}/edgesync/transports/registry.py +0 -0
  41. {edgesync-0.2.0 → edgesync-0.2.1}/edgesync/utils/__init__.py +0 -0
  42. {edgesync-0.2.0 → edgesync-0.2.1}/edgesync/utils/clock.py +0 -0
  43. {edgesync-0.2.0 → edgesync-0.2.1}/edgesync/utils/ids.py +0 -0
  44. {edgesync-0.2.0 → edgesync-0.2.1}/edgesync/worker/__init__.py +0 -0
  45. {edgesync-0.2.0 → edgesync-0.2.1}/edgesync/worker/lifecycle.py +0 -0
  46. {edgesync-0.2.0 → edgesync-0.2.1}/edgesync/worker/scheduler.py +0 -0
  47. {edgesync-0.2.0 → edgesync-0.2.1}/edgesync/worker/sync_worker.py +0 -0
  48. {edgesync-0.2.0 → edgesync-0.2.1}/tests/__init__.py +0 -0
  49. {edgesync-0.2.0 → edgesync-0.2.1}/tests/conftest.py +0 -0
  50. {edgesync-0.2.0 → edgesync-0.2.1}/tests/fixtures/__init__.py +0 -0
  51. {edgesync-0.2.0 → edgesync-0.2.1}/tests/fixtures/factories.py +0 -0
  52. {edgesync-0.2.0 → edgesync-0.2.1}/tests/fixtures/fake_transport.py +0 -0
  53. {edgesync-0.2.0 → edgesync-0.2.1}/tests/integration/__init__.py +0 -0
  54. {edgesync-0.2.0 → edgesync-0.2.1}/tests/integration/test_client.py +0 -0
  55. {edgesync-0.2.0 → edgesync-0.2.1}/tests/integration/test_http_transport.py +0 -0
  56. {edgesync-0.2.0 → edgesync-0.2.1}/tests/integration/test_sqlite_storage.py +0 -0
  57. {edgesync-0.2.0 → edgesync-0.2.1}/tests/integration/test_worker.py +0 -0
  58. {edgesync-0.2.0 → edgesync-0.2.1}/tests/reliability/__init__.py +0 -0
  59. {edgesync-0.2.0 → edgesync-0.2.1}/tests/reliability/test_reliability.py +0 -0
  60. {edgesync-0.2.0 → edgesync-0.2.1}/tests/unit/__init__.py +0 -0
  61. {edgesync-0.2.0 → edgesync-0.2.1}/tests/unit/test_backoff.py +0 -0
  62. {edgesync-0.2.0 → edgesync-0.2.1}/tests/unit/test_config.py +0 -0
  63. {edgesync-0.2.0 → edgesync-0.2.1}/tests/unit/test_models.py +0 -0
  64. {edgesync-0.2.0 → edgesync-0.2.1}/tests/unit/test_queue_manager.py +0 -0
  65. {edgesync-0.2.0 → edgesync-0.2.1}/tests/unit/test_retry_policy.py +0 -0
  66. {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.0...HEAD
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.0
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
  [![CI](https://github.com/adhuldas/EdgeSync/actions/workflows/ci.yml/badge.svg)](https://github.com/adhuldas/EdgeSync/actions/workflows/ci.yml)
32
35
  [![PyPI](https://img.shields.io/pypi/v/edgesync.svg)](https://pypi.org/project/edgesync/)
33
- [![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)
36
+ [![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/adhuldas/EdgeSync/blob/main/LICENSE)
34
37
  [![Python](https://img.shields.io/badge/python-3.10%2B-blue.svg)](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
  [![CI](https://github.com/adhuldas/EdgeSync/actions/workflows/ci.yml/badge.svg)](https://github.com/adhuldas/EdgeSync/actions/workflows/ci.yml)
4
4
  [![PyPI](https://img.shields.io/pypi/v/edgesync.svg)](https://pypi.org/project/edgesync/)
5
- [![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)
5
+ [![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/adhuldas/EdgeSync/blob/main/LICENSE)
6
6
  [![Python](https://img.shields.io/badge/python-3.10%2B-blue.svg)](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