librus-python-api 1.6.2__tar.gz → 1.6.3__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 (56) hide show
  1. {librus_python_api-1.6.2 → librus_python_api-1.6.3}/CHANGELOG.md +20 -0
  2. {librus_python_api-1.6.2 → librus_python_api-1.6.3}/PKG-INFO +8 -9
  3. {librus_python_api-1.6.2 → librus_python_api-1.6.3}/README.md +6 -7
  4. {librus_python_api-1.6.2 → librus_python_api-1.6.3}/pyproject.toml +1 -1
  5. {librus_python_api-1.6.2 → librus_python_api-1.6.3}/src/librus_python_api/__init__.py +1 -1
  6. {librus_python_api-1.6.2 → librus_python_api-1.6.3}/uv.lock +8 -8
  7. {librus_python_api-1.6.2 → librus_python_api-1.6.3}/.gitignore +0 -0
  8. {librus_python_api-1.6.2 → librus_python_api-1.6.3}/API.md +0 -0
  9. {librus_python_api-1.6.2 → librus_python_api-1.6.3}/LICENSE +0 -0
  10. {librus_python_api-1.6.2 → librus_python_api-1.6.3}/SECURITY.md +0 -0
  11. {librus_python_api-1.6.2 → librus_python_api-1.6.3}/src/librus_python_api/_notification_bootstrap.py +0 -0
  12. {librus_python_api-1.6.2 → librus_python_api-1.6.3}/src/librus_python_api/_notification_codec.py +0 -0
  13. {librus_python_api-1.6.2 → librus_python_api-1.6.3}/src/librus_python_api/_storage.py +0 -0
  14. {librus_python_api-1.6.2 → librus_python_api-1.6.3}/src/librus_python_api/_windows_filesystem.py +0 -0
  15. {librus_python_api-1.6.2 → librus_python_api-1.6.3}/src/librus_python_api/announcements.py +0 -0
  16. {librus_python_api-1.6.2 → librus_python_api-1.6.3}/src/librus_python_api/attachment_routes.py +0 -0
  17. {librus_python_api-1.6.2 → librus_python_api-1.6.3}/src/librus_python_api/attachments.py +0 -0
  18. {librus_python_api-1.6.2 → librus_python_api-1.6.3}/src/librus_python_api/attendance.py +0 -0
  19. {librus_python_api-1.6.2 → librus_python_api-1.6.3}/src/librus_python_api/attendance_frequency.py +0 -0
  20. {librus_python_api-1.6.2 → librus_python_api-1.6.3}/src/librus_python_api/budget.py +0 -0
  21. {librus_python_api-1.6.2 → librus_python_api-1.6.3}/src/librus_python_api/checkpoint.py +0 -0
  22. {librus_python_api-1.6.2 → librus_python_api-1.6.3}/src/librus_python_api/class_free_days.py +0 -0
  23. {librus_python_api-1.6.2 → librus_python_api-1.6.3}/src/librus_python_api/completed_lessons.py +0 -0
  24. {librus_python_api-1.6.2 → librus_python_api-1.6.3}/src/librus_python_api/config.py +0 -0
  25. {librus_python_api-1.6.2 → librus_python_api-1.6.3}/src/librus_python_api/detail_fields.py +0 -0
  26. {librus_python_api-1.6.2 → librus_python_api-1.6.3}/src/librus_python_api/diagnostics.py +0 -0
  27. {librus_python_api-1.6.2 → librus_python_api-1.6.3}/src/librus_python_api/exceptions.py +0 -0
  28. {librus_python_api-1.6.2 → librus_python_api-1.6.3}/src/librus_python_api/files.py +0 -0
  29. {librus_python_api-1.6.2 → librus_python_api-1.6.3}/src/librus_python_api/formative_grades.py +0 -0
  30. {librus_python_api-1.6.2 → librus_python_api-1.6.3}/src/librus_python_api/grade_parsers.py +0 -0
  31. {librus_python_api-1.6.2 → librus_python_api-1.6.3}/src/librus_python_api/grade_records.py +0 -0
  32. {librus_python_api-1.6.2 → librus_python_api-1.6.3}/src/librus_python_api/homework_range.py +0 -0
  33. {librus_python_api-1.6.2 → librus_python_api-1.6.3}/src/librus_python_api/lifecycle.py +0 -0
  34. {librus_python_api-1.6.2 → librus_python_api-1.6.3}/src/librus_python_api/markup.py +0 -0
  35. {librus_python_api-1.6.2 → librus_python_api-1.6.3}/src/librus_python_api/message_content.py +0 -0
  36. {librus_python_api-1.6.2 → librus_python_api-1.6.3}/src/librus_python_api/messages.py +0 -0
  37. {librus_python_api-1.6.2 → librus_python_api-1.6.3}/src/librus_python_api/models.py +0 -0
  38. {librus_python_api-1.6.2 → librus_python_api-1.6.3}/src/librus_python_api/modern_body.py +0 -0
  39. {librus_python_api-1.6.2 → librus_python_api-1.6.3}/src/librus_python_api/modern_mailbox.py +0 -0
  40. {librus_python_api-1.6.2 → librus_python_api-1.6.3}/src/librus_python_api/modern_messages.py +0 -0
  41. {librus_python_api-1.6.2 → librus_python_api-1.6.3}/src/librus_python_api/notification_models.py +0 -0
  42. {librus_python_api-1.6.2 → librus_python_api-1.6.3}/src/librus_python_api/notification_persistence.py +0 -0
  43. {librus_python_api-1.6.2 → librus_python_api-1.6.3}/src/librus_python_api/notification_workflow.py +0 -0
  44. {librus_python_api-1.6.2 → librus_python_api-1.6.3}/src/librus_python_api/notifications.py +0 -0
  45. {librus_python_api-1.6.2 → librus_python_api-1.6.3}/src/librus_python_api/parsers.py +0 -0
  46. {librus_python_api-1.6.2 → librus_python_api-1.6.3}/src/librus_python_api/parsing.py +0 -0
  47. {librus_python_api-1.6.2 → librus_python_api-1.6.3}/src/librus_python_api/persistence.py +0 -0
  48. {librus_python_api-1.6.2 → librus_python_api-1.6.3}/src/librus_python_api/py.typed +0 -0
  49. {librus_python_api-1.6.2 → librus_python_api-1.6.3}/src/librus_python_api/recipients.py +0 -0
  50. {librus_python_api-1.6.2 → librus_python_api-1.6.3}/src/librus_python_api/scheduler.py +0 -0
  51. {librus_python_api-1.6.2 → librus_python_api-1.6.3}/src/librus_python_api/school_reads.py +0 -0
  52. {librus_python_api-1.6.2 → librus_python_api-1.6.3}/src/librus_python_api/school_year_archive.py +0 -0
  53. {librus_python_api-1.6.2 → librus_python_api-1.6.3}/src/librus_python_api/sending.py +0 -0
  54. {librus_python_api-1.6.2 → librus_python_api-1.6.3}/src/librus_python_api/service.py +0 -0
  55. {librus_python_api-1.6.2 → librus_python_api-1.6.3}/src/librus_python_api/timetable.py +0 -0
  56. {librus_python_api-1.6.2 → librus_python_api-1.6.3}/src/librus_python_api/transport.py +0 -0
@@ -1,5 +1,25 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.6.3 (2026-10-22) - Dependency security update
4
+
5
+ Raises dependency floors and tooling pins past published advisories. Public
6
+ types, signatures and parser behaviour are unchanged.
7
+
8
+ - Runtime: require `aiohttp>=3.14.4`. Earlier 3.14 releases are affected by
9
+ GHSA-494j-54xm-rwp3 (a Secure cookie in the shared cookie jar could be sent
10
+ over plain HTTP) and GHSA-gx76-c99x-2c96 (a subdomain could strip the
11
+ host-only flag from a parent-domain cookie), both relevant to the client
12
+ cookie jar, plus server-side advisories that this client does not reach. The
13
+ lock already used 3.14.5; the floor stops a resolver from choosing an affected
14
+ release.
15
+ - Development lock: certifi 2026.10.19 drops the compromised emSign ECC Root CA
16
+ G3 (GHSA-6q48-6c7w-9gw2), and virtualenv 21.14.12 fixes activation-script and
17
+ path quoting advisories. Neither is a runtime dependency.
18
+ - CI and release workflows pin uv 0.13.5 with per-platform checksums. uv 0.12.7
19
+ trusted the same compromised root (GHSA-hq85-5cpj-mr62) and could write
20
+ outside the install prefix on Windows (GHSA-2cv4-cqwr-gwf7). The lockfile
21
+ format revision moves from 3 to 5 with no resolution change.
22
+
3
23
  ## 1.6.2 (2026-10-19) - School layout variants and behaviour points
4
24
 
5
25
  Fixes for completed-lesson and grade pages that 1.6.1 rejected with
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: librus-python-api
3
- Version: 1.6.2
3
+ Version: 1.6.3
4
4
  Summary: Independent bounded async Librus Synergia client
5
5
  Project-URL: Repository, https://github.com/krzysztofbury/librus-python-api
6
6
  Project-URL: Issues, https://github.com/krzysztofbury/librus-python-api/issues
@@ -16,7 +16,7 @@ Classifier: Programming Language :: Python :: 3.13
16
16
  Classifier: Programming Language :: Python :: 3.14
17
17
  Classifier: Typing :: Typed
18
18
  Requires-Python: >=3.13
19
- Requires-Dist: aiohttp<4,>=3.14.2
19
+ Requires-Dist: aiohttp<4,>=3.14.4
20
20
  Requires-Dist: lxml<7,>=6.1
21
21
  Requires-Dist: pydantic<3,>=2.12
22
22
  Requires-Dist: pywin32<400,>=312; sys_platform == 'win32'
@@ -42,9 +42,9 @@ private ACLs. Windows installations include `pywin32` and `tzdata` automatically
42
42
  Network paths, reparse-point paths and unsafe storage permissions fail closed.
43
43
  See [platform requirements](contracts/persistence.md#windows-disk-boundary-25).
44
44
 
45
- **Status:** `1.6.2` accepts more completed-lesson and grade layouts, including
46
- behaviour points, which are validated and not reported as grades.
47
- Class free days, typed capability outcomes and the live-check freshness watchdog
45
+ **Status:** `1.6.3` requires an aiohttp release without known advisories and
46
+ keeps the 1.6.2 completed-lesson and grade layouts, including behaviour points,
47
+ which are validated and not reported as grades. Class free days, typed capability outcomes and the live-check freshness watchdog
48
48
  remain available. See [verification](VERIFICATION.md).
49
49
  The stable 1.x API does not guarantee every school layout. School features depend
50
50
  on what each account can access. See the [compatibility policy](API.md#compatibility-policy).
@@ -55,7 +55,7 @@ See [limitations](#supported-features-and-limitations) below.
55
55
  Install the exact release from PyPI after its gated publication completes:
56
56
 
57
57
  ```sh
58
- python -m pip install librus-python-api==1.6.2
58
+ python -m pip install librus-python-api==1.6.3
59
59
  ```
60
60
 
61
61
  Pin the exact version qualified by your application. Before publication, use a
@@ -71,7 +71,7 @@ python -m pip install .
71
71
  To install a locally built wheel instead:
72
72
 
73
73
  ```sh
74
- python -m pip install ./dist/librus_python_api-1.6.2-py3-none-any.whl
74
+ python -m pip install ./dist/librus_python_api-1.6.3-py3-none-any.whl
75
75
  ```
76
76
 
77
77
  No CLI or background process is installed: import the library in your own program.
@@ -250,7 +250,7 @@ Completed lessons may be disabled by the school. Behaviour notes are not
250
250
  implemented. Some recipient, archive and receipt layouts remain
251
251
  unqualified; backend acceptance is not proof of delivery. Tests cover supported
252
252
  contracts, not every school or role. Detailed coverage is in the
253
- [verification log][verification] and [roadmap][roadmap].
253
+ [verification log][verification]; open work is tracked in [issues][issues].
254
254
 
255
255
  ## Development and support
256
256
 
@@ -265,7 +265,6 @@ MIT licensed. See [LICENSE][license].
265
265
  [api]: https://github.com/krzysztofbury/librus-python-api/blob/main/API.md
266
266
  [upgrade]: https://github.com/krzysztofbury/librus-python-api/blob/main/contracts/account-context.md
267
267
  [verification]: https://github.com/krzysztofbury/librus-python-api/blob/main/VERIFICATION.md
268
- [roadmap]: https://github.com/krzysztofbury/librus-python-api/blob/main/TODO.md
269
268
  [contributing]: https://github.com/krzysztofbury/librus-python-api/blob/main/CONTRIBUTING.md
270
269
  [issues]: https://github.com/krzysztofbury/librus-python-api/issues
271
270
  [security]: https://github.com/krzysztofbury/librus-python-api/blob/main/SECURITY.md
@@ -16,9 +16,9 @@ private ACLs. Windows installations include `pywin32` and `tzdata` automatically
16
16
  Network paths, reparse-point paths and unsafe storage permissions fail closed.
17
17
  See [platform requirements](contracts/persistence.md#windows-disk-boundary-25).
18
18
 
19
- **Status:** `1.6.2` accepts more completed-lesson and grade layouts, including
20
- behaviour points, which are validated and not reported as grades.
21
- Class free days, typed capability outcomes and the live-check freshness watchdog
19
+ **Status:** `1.6.3` requires an aiohttp release without known advisories and
20
+ keeps the 1.6.2 completed-lesson and grade layouts, including behaviour points,
21
+ which are validated and not reported as grades. Class free days, typed capability outcomes and the live-check freshness watchdog
22
22
  remain available. See [verification](VERIFICATION.md).
23
23
  The stable 1.x API does not guarantee every school layout. School features depend
24
24
  on what each account can access. See the [compatibility policy](API.md#compatibility-policy).
@@ -29,7 +29,7 @@ See [limitations](#supported-features-and-limitations) below.
29
29
  Install the exact release from PyPI after its gated publication completes:
30
30
 
31
31
  ```sh
32
- python -m pip install librus-python-api==1.6.2
32
+ python -m pip install librus-python-api==1.6.3
33
33
  ```
34
34
 
35
35
  Pin the exact version qualified by your application. Before publication, use a
@@ -45,7 +45,7 @@ python -m pip install .
45
45
  To install a locally built wheel instead:
46
46
 
47
47
  ```sh
48
- python -m pip install ./dist/librus_python_api-1.6.2-py3-none-any.whl
48
+ python -m pip install ./dist/librus_python_api-1.6.3-py3-none-any.whl
49
49
  ```
50
50
 
51
51
  No CLI or background process is installed: import the library in your own program.
@@ -224,7 +224,7 @@ Completed lessons may be disabled by the school. Behaviour notes are not
224
224
  implemented. Some recipient, archive and receipt layouts remain
225
225
  unqualified; backend acceptance is not proof of delivery. Tests cover supported
226
226
  contracts, not every school or role. Detailed coverage is in the
227
- [verification log][verification] and [roadmap][roadmap].
227
+ [verification log][verification]; open work is tracked in [issues][issues].
228
228
 
229
229
  ## Development and support
230
230
 
@@ -239,7 +239,6 @@ MIT licensed. See [LICENSE][license].
239
239
  [api]: https://github.com/krzysztofbury/librus-python-api/blob/main/API.md
240
240
  [upgrade]: https://github.com/krzysztofbury/librus-python-api/blob/main/contracts/account-context.md
241
241
  [verification]: https://github.com/krzysztofbury/librus-python-api/blob/main/VERIFICATION.md
242
- [roadmap]: https://github.com/krzysztofbury/librus-python-api/blob/main/TODO.md
243
242
  [contributing]: https://github.com/krzysztofbury/librus-python-api/blob/main/CONTRIBUTING.md
244
243
  [issues]: https://github.com/krzysztofbury/librus-python-api/issues
245
244
  [security]: https://github.com/krzysztofbury/librus-python-api/blob/main/SECURITY.md
@@ -21,7 +21,7 @@ classifiers = [
21
21
  "Programming Language :: Python :: 3.14",
22
22
  "Typing :: Typed",
23
23
  ]
24
- dependencies = ["aiohttp>=3.14.2,<4", "lxml>=6.1,<7", "pydantic>=2.12,<3", "yarl>=1.20,<2", "pywin32>=312,<400; sys_platform == 'win32'", "tzdata>=2026.5; sys_platform == 'win32'"]
24
+ dependencies = ["aiohttp>=3.14.4,<4", "lxml>=6.1,<7", "pydantic>=2.12,<3", "yarl>=1.20,<2", "pywin32>=312,<400; sys_platform == 'win32'", "tzdata>=2026.5; sys_platform == 'win32'"]
25
25
 
26
26
  [project.urls]
27
27
  Repository = "https://github.com/krzysztofbury/librus-python-api"
@@ -138,7 +138,7 @@ from librus_python_api.models import (
138
138
  from librus_python_api.sending import SendAttempt
139
139
  from librus_python_api.service import AccountClient, LibrusService
140
140
 
141
- __version__ = "1.6.2"
141
+ __version__ = "1.6.3"
142
142
 
143
143
  __all__ = [
144
144
  "ArchiveAbsences",
@@ -1,5 +1,5 @@
1
1
  version = 1
2
- revision = 3
2
+ revision = 5
3
3
  requires-python = ">=3.13"
4
4
  resolution-markers = [
5
5
  "python_full_version >= '3.15'",
@@ -275,11 +275,11 @@ filecache = [
275
275
 
276
276
  [[package]]
277
277
  name = "certifi"
278
- version = "2026.7.22"
278
+ version = "2026.10.19"
279
279
  source = { registry = "https://pypi.org/simple" }
280
- sdist = { url = "https://files.pythonhosted.org/packages/a3/c2/24167ea9858356b47a87a50d39908bfdb72ceeefe0041586e704e5376b3a/certifi-2026.7.22.tar.gz", hash = "sha256:741e2c3b351ddf169a738da9f2c048608ff7f2c5cc02f1ebc6b118bb090d5d55", size = 138112, upload-time = "2026-07-22T03:35:12.644Z" }
280
+ sdist = { url = "https://files.pythonhosted.org/packages/a6/bd/1436c50cc46699de0230fbaacc1d1de7bfec413176099949e9d5112e88f2/certifi-2026.10.19.tar.gz", hash = "sha256:035c1e85572b141bf1c3a3eff0e33a8eb74917522f2559075ff8d2fea780a1ae", size = 137598, upload-time = "2026-10-20T02:24:16.604Z" }
281
281
  wheels = [
282
- { url = "https://files.pythonhosted.org/packages/0b/a7/71ac2cff56fec219ed242bb11b8efb69fcc4bec75db06fb7bfe35de520e6/certifi-2026.7.22-py3-none-any.whl", hash = "sha256:62f22742b58a1a33014a2b6b706588a8d7e2a88ae7bd1a6ebe8c992928483775", size = 136983, upload-time = "2026-07-22T03:35:11.276Z" },
282
+ { url = "https://files.pythonhosted.org/packages/c4/51/29046e48f693c54e5b7412216d447a1d8362c9653148d98c02cdf65fa733/certifi-2026.10.19-py3-none-any.whl", hash = "sha256:42d35340cc5b9ba78e818ddbff0c5b1c2b779de448a340fd1b989f5fa8670e1b", size = 136464, upload-time = "2026-10-20T02:24:15.072Z" },
283
283
  ]
284
284
 
285
285
  [[package]]
@@ -931,7 +931,7 @@ dev = [
931
931
 
932
932
  [package.metadata]
933
933
  requires-dist = [
934
- { name = "aiohttp", specifier = ">=3.14.2,<4" },
934
+ { name = "aiohttp", specifier = ">=3.14.4,<4" },
935
935
  { name = "lxml", specifier = ">=6.1,<7" },
936
936
  { name = "pydantic", specifier = ">=2.12,<3" },
937
937
  { name = "pywin32", marker = "sys_platform == 'win32'", specifier = ">=312,<400" },
@@ -2291,7 +2291,7 @@ wheels = [
2291
2291
 
2292
2292
  [[package]]
2293
2293
  name = "virtualenv"
2294
- version = "21.14.1"
2294
+ version = "21.14.12"
2295
2295
  source = { registry = "https://pypi.org/simple" }
2296
2296
  dependencies = [
2297
2297
  { name = "distlib" },
@@ -2300,9 +2300,9 @@ dependencies = [
2300
2300
  { name = "platformdirs" },
2301
2301
  { name = "python-discovery" },
2302
2302
  ]
2303
- sdist = { url = "https://files.pythonhosted.org/packages/50/67/b5d37693e5e666b68100db8fe34f00db28279330db55f739a3c799ff2449/virtualenv-21.14.1.tar.gz", hash = "sha256:719b189804e66678017d9f63bbfc590c44f6b96ab4829513806394f9b375929c", size = 5462838, upload-time = "2026-09-29T23:33:33.991Z" }
2303
+ sdist = { url = "https://files.pythonhosted.org/packages/c9/2c/1a69b3346931e9a7db9cc00cc0fa847c843a85fa7cf52a598f57261c68df/virtualenv-21.14.12.tar.gz", hash = "sha256:bbcfb78e36c22ad70c6917c4aecb5e63477d3c138e9f88c946f320e31859c76a", size = 5562800, upload-time = "2026-10-21T01:58:51.724Z" }
2304
2304
  wheels = [
2305
- { url = "https://files.pythonhosted.org/packages/85/a8/22be2d14ef0d7b1e9e7dc1d839a85073fc20917be1747d6f1347d1cfc8c3/virtualenv-21.14.1-py3-none-any.whl", hash = "sha256:6fd04089fc0dc33549e7abdff70fc3b63d4e15799f2dbf3281f80d13b9fce522", size = 5486534, upload-time = "2026-09-29T23:33:32.333Z" },
2305
+ { url = "https://files.pythonhosted.org/packages/a0/92/f3b8af2d36ddec4dc61dc25655dc010e419ff456cb4ca0e720c8112f1047/virtualenv-21.14.12-py3-none-any.whl", hash = "sha256:7820aeaef23f1f59a96458edfc7f9d3deac937155718de15f1c9a64471e15551", size = 5556824, upload-time = "2026-10-21T01:58:48.505Z" },
2306
2306
  ]
2307
2307
 
2308
2308
  [[package]]