Changelog
Table Of Contents
- π¦ v1.3.2.20260826b2 β kms-v1.3.2b2/2026.08.26
- π¦ v1.3.2.20260826b1 β kms-v1.3.2b1/2026.08.26
- π¦ v1.3.2.20260826b0 β kms-v1.3.2b0/2026.08.26
- π¦ v1.3.1.20260812 β kms-v1.3.1/2026.08.12
- π¦ v1.3.0.20260731 β kms-v1.3.0/2026.07.31
- π¦ v1.3.0.20260730.1 β kms-v1.3.0/2026.07.30a
- π¦ v1.3.0.20260730 β kms-v1.3.0/2026.07.30
- π¦ v1.3.0.20260727rc1 β kms-v1.3.0rc1/2026.07.27
- π¦ v1.3.0.20260724rc0 β kms-v1.3.0rc0/2026.07.24
- π¦ v1.3.0.20260721b0 β kms-v1.3.0b0/2026.07.21
- π¦ v1.3.0.20260703a4 β kms-v1.3.0a4/2026.07.03
- π¦ v1.3.0.20260610a3 β kms-v1.3.0-alpha3/2026.06.10
- π¦ v1.3.0.20260524a2 β kms-v1.3.0a2/2026.05.24
- π¦ v1.3.0.20260524a1 β kms-v1.3.0-alpha1/2026.05.24
- π¦ v1.3.0.20260523a0 β kms-v1.3.0-alpha0/2026.05.23
- π¦ v1.2.5.20260912 β kms-v1.2.5/2026.09.12
- π¦ v1.2.5.20260724 β kms-v1.2.5/2026.07.24
- π¦ v1.2.4.20260702 β kms-v1.2.4/2026.07.03
- π¦ v1.2.4.20260610b0 β kms-v1.2.4-beta0/2026.06.10
- π¦ v1.2.3.20260605.4 β kms-v1.2.3/2026.06.05d
- π¦ v1.2.3.20260605.4b3 β kms-v1.2.3b3/2026.06.05d
- π¦ v1.2.3.20260605.4b2 β kms-v1.2.3b2/2026.06.05d
- π¦ v1.2.3.20260605.4b1 β kms-v1.2.3b1/2026.06.05d
- π¦ v1.2.3.20260605.4b0 β kms-v1.2.3b0/2026.06.05d
- π¦ v1.2.3.20260605.3 β [YANKED] kms-v1.2.3/2026.06.05c
- π¦ v1.2.3.20260605.2 β [YANKED] kms-v1.2.3/2026.06.05b
- π¦ v1.2.3.20260605.1 β kms-v1.2.3/2026.06.05a
- π¦ v1.2.3.20260605 β kms-v1.2.3/2026.06.05
- π¦ v1.2.3.20260523.1 β kms-v1.2.3/2026.05.23a
- π¦ v1.2.3.20260523 β kms-v1.2.3/2026.05.23
- π¦ v1.2.2.20260517.3 β kms-v1.2.2/2026.05.17c
- π¦ v1.2.2.20260517.3-b β kms-v1.2.2/2026.05.17c-beta
- π¦ v1.2.2.20260517.2 β kms-v1.2.2/2026.05.17b
- π¦ v1.2.2.20260517.1 β kms-v1.2.2/2026.05.17a
- π¦ v1.2.2.20260517 β kms-v1.2.2/2026.05.17
- π¦ v1.2.2.20260515.1 β kms-v1.2.2/2026.05.15a
- π¦ v1.2.2.20260515 β kms-v1.2.2/2026.05.15
- π¦ v1.2.2.20260506.2 β kms-v1.2.2/2026.05.06b
- π¦ v1.2.1.20260417.2 β kms-v1.2.1/2026.04.17b
- π¦ v1.2.0.20260128.1 β kms-v1.2/2026.01.28a
- π¦ v1.2.0.20260104 β kms-v1.2/2026.01.04
- π¦ v1.2.0.20260101.1a1 β kms-v1.2.0a1/2026.01.01a
- π¦ v1.2.0.20251231a0 β kms-v1.2.0a0/2025.12.31
- π¦ v1.1.1.20251205 β kms-v1.1.1/2025.12.05
- π¦ v1.1.0.20251007.4 β kms-v1.1.0/2025.10.07d
- π¦ v1.0.1.20251005 β kms-v1.0.0/2025.10.05
- π¦ v1.0.0.20250910 β kms-v1.0.0/2025.09.10
- π¦ v1.0.0.20250817 β kms-v1.0.0/2025.08.17
π¦ v1.3.2.20260826b2 β kms-v1.3.2b2/2026.08.26
β Target Node Commit: de8d6fca
π Release Type: Pre-release - Minor Patch
one last thing
Full Changelog: https://github.com/Boss-1s/key_multivalue_storage/compare/v1.3.2.20260826b1β¦v1.3.2.20260826b2
π¦ v1.3.2.20260826b1 β kms-v1.3.2b1/2026.08.26
β Target Node Commit: 8d3a1573
π Release Type: Pre-release - Minor Patch
Iβm just gonna keep doing this until it works
Full Changelog: https://github.com/Boss-1s/key_multivalue_storage/compare/v1.3.2.20260826b0β¦v1.3.2.20260826b1
π¦ v1.3.2.20260826b0 β kms-v1.3.2b0/2026.08.26
β Target Node Commit: ed82d269
π Release Type: Pre-release - Major Patch
testing new release script now
Full Changelog: https://github.com/Boss-1s/key_multivalue_storage/compare/v1.3.1.20260812β¦v1.3.2.20260826b0
π¦ v1.3.1.20260812 β kms-v1.3.1/2026.08.12
β Target Node Commit: 8f98cb36
π Release Type: Major Patch
π Release Notes
Table of Contents
- π‘ Features
- πͺ² Bug Fixes
- π€ Dependency Updates
- β° Other Important Changes
- πͺ« Graceful Deprecation cycle 1.3.1
- π Notes
- π’ Plans for next update
π‘ Features
This release has a lot of quality-of-life and automation work, plus some solid module improvements:
feat(automations): auto-change version for sonar-project.properties(3f731eb)feat: implement storage type stubs for strict dictionary type-hinting(855f8ae)feat: create pull request template(#53, a4b0256)- SonarQube Cloud - analysis + quality gate setup (
d6fc50c,7edc65f,1fa383d) feat: command reset_env in testing(c0d3a6c)feat(automations): sync docs every hour(ec80247)feat: have TODO tree mark comments with DEPRECATED(3d74e16)- Testing revamp (
feat: merge all tests together,feat: new test dependency coverage) (89d9977, c7668a1, 07f8a73)
πͺ² Bug Fixes
Big focus here was correctness + CI stability:
- Fixed storage operator behavior and refactors:
Storage.__or__fix/refactor (#84, #86) (f42b2eb)Storage.__sub__andStorage.__truediv__fixes/refactors (#82, #79, #76) (72645a6, 7f7d501, 3eeccb6)refactor(delete.py): refactor and fix(efa2726)
fix(help): make Console robust to legacy Windows encodings(#62, e6243d8)- Multiple CI/automation fixes (permissions, shell handling, SARIF/reporting, fetch behavior, registry/login flow)
- Coverage/test reliability fixes (
fix: better test coverage#59,fix(tests): inaccurate coverage in CI/CD)
π€ Dependency Updates
Dependency maintenance was heavy in this cycle:
- Switched dependency management direction from Dependabot to Renovate (
da06dba,141e5c0,705ce2f)
Important
Dependabot still handles dependency updates on the following branches: docs. It also still handles global vulnerability warnings.
- Action updates:
github/codeql-actionβ v4.37.4 / v4.37.5 / v4.37.6 (#50, #54, #60)actions/attestβ v4.2.1 / v4.2.2 (#42, #63)astral-sh/setup-uvβ v9 (#48)docker/login-actionβ v4 (#77)
- Package updates:
gitpythonβ v3.1.58 / v3.1.59 (#61, #81)pylintβ v4.0.7 (#78)pre-commitβ v4.6.2 (#85)packagingβ v26.3 (#64)coverageβ v7.15.4 (#70)- Python Docker tag β v3.14.6 / v3.14.7 (#66)
setuptoolsupdates in test scope (#72)
- Environment updates:
- CPython β v3.14.6 / v3.14.7 (#66)
β° Other Important Changes
- Lots of CI/workflow hardening (permissions, check runs, branch/repo path handling, action sequencing)
- Documentation - automation and sync improvements
- Devcontainer and VSCode Tunnel introduction, cleanup, and stabilization
- SonarQube Cloud introduction and stabilization
- Brand new release template
- Beginning to use Copilot Agent for certain tasks that do not break rules in the contribution guidelines.
πͺ« Graceful Deprecation cycle 1.3.1
- Deprecated format specifiers
.tuplefand.tuplet. - Attribute
auto_delete_selfand argumentinstant_deleteofStorage.store()has been deprecated.
π Notes
Main vibe of this release: stability + cleanup + automation maturing.
This update, besides bug fixes, also focused on formalizing and standardizing the development environment for kms.
This release was intended for August 10th, 2026, but was delayed two days due to GitHub Actions being down for over 7 hours on August 8th and over 12 hours overall between August 3rd and 7th.
π By The Numbers
- There were 154 commits since
v1.3.0.20260731. - 10 issues were closed.
- 6 issues were closed by a matching pull request.
- 10 pull requests were merged by various authors.
- @renovate[bot] made their first contribution.
π’ Plans for next update
Regarding kms-semver1.3.2, sadly, because school is starting up, I was forced to rewrite the whole roadmap and push kms-semver1.3.2 for two extra weeks, giving us 8 weeks until the next major patch. (You can see the new release cycles here.) The next patch will mostly be refactors (unlike this one which was mostly bug fixes) to the modules, especially those Storage dunder methodsβ¦those ones are the real deal. The final release date of kms-semver1.3.2 is set to be on September 30th, 2026. Until then, thereβ¦ahemβ¦
Caution
There will be dragonsβ¦.. of artificial intelligenceβ¦.
Sorry. Anywaysβ¦.
Regarding kms-semver1.4.0, after the roadmap rewrite, the new kms-semver1.4.0 stable release date is 2027/01/03, and the first alpha will come out on **2026/10/12. Currently planned features are listed in the roadmap and the milestone. Not much more to say about this update, more info will come out as alpha0 lurks closer.
π Full Changelog: v1.3.0.20260731 vs v1.3.1.20260812
π¦ v1.3.0.20260731 β kms-v1.3.0/2026.07.31
β Target Node Commit: 09779f11
π Release Type: Minor Patch
Whatβs Changed
Repo Updates
None :)
Module Updates
- Fixed a fatal bug in
storage.pywhere Storage.store would not store anything if encode was set to False - Refactored some docstrings in
storage.pyDependency updates
None :)
Notes
***The main point of this release is the patch of Storage.store storing empty data if encode was set to False
Plans for next update
Regarding kms-semver1.3.1, the next major patch, that will come out very soon to address bug issues #14 and #26. If possible, I will also add the feature suggested in feat issue #27. There is no set release date yet; however, the planned range of possible dates goes from August 5th, 2026 to August 11th, 2026.
Regarding kms-semver1.4.0, that is currently set to release around September 30th, 2026. HOWEVER, because school is very unpredictable, I may rewrite the whole roadmap to try and release a minor update to the 1.x.x series to release every 5~6 months instead of 3~4. Currently planned features are listed in the roadmap.
Full Changelog: https://github.com/Boss-1s/key_multivalue_storage/compare/v1.3.0.20260730.1β¦v1.3.0.20260731
π¦ v1.3.0.20260730.1 β kms-v1.3.0/2026.07.30a
β Target Node Commit: 364a8774
π Release Type: Minor Patch
Whatβs Changed
Repo Updates
- Concurrent steps in testing! With this new feature that I had no idea existed now but had wanted for the past 3 years, testing times were cut down from ~34s to ~21s on Ubuntu, ~47s to ~30s on Mac, and ~60s to ~40s on Windows.
- Auto-issue commenter (will be improved on)
Module Updates
- Exposed custom warnings and exceptions to top level (like they should be) via 3f66bfe
- Added example scenarios to custom exception docstrings (27a2234)
- New test:
test-exceptions - The purpose of this test is to ensure all custom exceptions and warnings are exposed to the top level.
Dependency Updates
- chore(deps): bump github/codeql-action from 4 to 4.37.3 by @dependabot[bot] in https://github.com/Boss-1s/key_multivalue_storage/pull/32
- chore(deps): bump actions/attest from 4 to 4.2.0 by @dependabot[bot] in https://github.com/Boss-1s/key_multivalue_storage/pull/33
Notes
The main purpose of this patch is to address the issue of kmsβs custom exceptions and warnings not being exposed to the top level.
Plans for next updates
Regarding kms-semver1.3.1, the next major patch, that will come out very soon to address bug issues #14 and #26. If possible, I will also add the feature suggested in feat issue #27. There is no set release date yet; however, the planned range of possible dates goes from August 5th, 2026 to August 11th, 2026.
Regarding kms-semver1.4.0, that is currently set to release around September 30th, 2026. HOWEVER, because school is very unpredictable, I may rewrite the whole roadmap to try and release a minor update to the 1.x.x series to release every 5~6 months instead of 3~4. Currently planned features are listed in the roadmap.
Full Changelog: https://github.com/Boss-1s/key_multivalue_storage/compare/v1.3.0.20260730β¦v1.3.0.20260730.1
π¦ v1.3.0.20260730 β kms-v1.3.0/2026.07.30
β Target Node Commit: 352a1d4c
π Release Type: Minor Patch
Whatβs Changed
Table of Contents
kms-semver1.3.x diff
Repo Updates
- Refactored README
Module Updates
- Fixed fatal bug where warning class breaking changes was not mitigated
Dependency updates
- None :)
kms-v1.2.3/2026.05.23a diff
Repo Updates
The update incorporates changes from previous versions and focuses on automating the release processes, such as auto-version commits and changelog generation. Key improvements include enhanced documentation, new issue templates, improved nightly build reliability, and refined dependency management.
Module Updates
This update brings significant structural refactoring and code quality improvements to the module. Key adjustments include changes like renaming top_level_key to top_lv_key in Delete.by_propkey(), shifting Storage.keyβs value type to Any, and introducing deprecation warnings for upcoming structural changes and soft deprecating old syntax. Structurally, the core Load, Edit, and Delete classes have been isolated into independent files (modules load, edit, and delete, respectively), while custom exceptions, warnings, and metadata have been moved into a dedicated utils/ directory. Additionally, the update integrates new dependencies like rich and typing-extension, introduces precommit tools, reorganizes the test suite, and completes a full refactor of all docstrings alongside a brand new visual library tree generated by a custom help() method at the library level.
Deprecation Cycle 1.3
Important
None of these are true breaking changes - instead, all old features will still remain in the code carrying DeprecationWarnings until kms-semver2.0.
- All metadata variables from
kms-semver1.2.2was renamed. Consider updating tokms-v1.2.3/2026.06.05(usingpip install key-multivalue-storage===1.2.3.20260605) or later and changing the old names to the new ones in your code. You can still use the old names, however they are no longer recommended for use and will display aDeprecationWarningwarning.
| Old name | New name |
|---|---|
VERSION |
semver |
DATE_VERSION |
calver |
LAST_UPDATE |
last_update |
- In
Storage.Delete.by_propkey: the required argumenttop_level_keywill be renamed totop_lv_key, to match with other methods with the same parameter. This should not affect normal performance, unless you assign the arguments like this:Storage.Delete.by_propkey(_,top_lv_key='key') - All warnings and exceptions will no longer be under
kms.Storagebut rather be under justkms.
import key_multivalue_storage as kms
warnings.filterwarning(category=kms.Storage.DeleteWarning) # Old, will raise DeprecationWarning
warnings.filterwarning(category=kms.DeleteWarning) # New, will work properly
Dependency updates
This release organizes and upgrades several project dependencies, optimizing constraints and bumping underlying tools:
- Production Dependencies
- Added
richas a brand new production requirement (>=15.0.0) to handle advanced library text output formatting and layout features. - Added
typing-extensionsas a brand new core development requirement, pinned to the~=4.16range.
- Added
- CI/CD & GitHub Actions
- Upgraded pipeline environment builders
actions/setup-python,actions/checkout, andastral-sh/setup-uvto major version7. - Incremented
reviewdog/action-actionlintup to1.73.0andoprypin/find-latest-tagto1.1.3.
- Upgraded pipeline environment builders
- Dependency Group Isolation
test: Enforces standard environment testing rules utilizingpylint>=4.0.6andpylint-per-file-ignores.release: Created to separate deployment scripts with targeted tools likemd-tocandrequests.dev: Acts as an umbrella group that mergestestandreleasewhile pinning local workspace management.
Precise Version Changes
| Dependency / Package Name | Previous Version | New Version | Source Change (PR / Commit) |
|---|---|---|---|
| astral-sh/setup-uv | 5 |
7 |
PR #8 |
| oprypin/find-latest-tag | 1.1.2 |
1.1.3 |
PR #7 |
| actions/checkout | 3 / 6 |
7 |
PR #10, PR #23 |
| typing-extensions | ~=4.15 |
~=4.16 |
PR #13 |
| actions/setup-python | 4 / 6 |
7 |
PR #16, PR #22 |
| reviewdog/action-actionlint | 1.72.0 |
1.73.0 |
PR #19, PR #20 |
| certifi | v2026.6.17 |
v2026.7.22 |
Commit e95aedc |
| filelock | v3.29.4 |
v3.32.0 |
Commit e95aedc |
| gitpython | v3.1.53 |
v3.1.57 |
Commit e95aedc |
| griffe / griffecli / griffelib | v2.0.2 |
v2.1.0 |
Commit e95aedc |
| platformdirs | v4.10.0 |
v4.11.0 |
Commit e95aedc |
| pre-commit | v4.6.0 |
v4.6.1 |
Commit e95aedc |
| pyproject | v1!0.1.2 |
v1!0.2.1 |
Commit e95aedc |
| python-discovery | v1.4.2 |
v1.5.0 |
Commit e95aedc |
| tomlkit | v0.15.0 |
v0.15.1 |
Commit e95aedc |
| virtualenv | v21.5.1 |
v21.7.0 |
Commit e95aedc |
Notes
This release was pushed a day late.
Plans for next update
Wow.
Finally.
After three months of hard, hard workβ¦.
β¦kms-semver1.3.0 is finally out.
I cannot even being to believe that just three months ago, I decided to publish an extremely messy, albeit useful, module onto PyPI, and here I am now, with an actual library, containing four main modules and three utility modules.
Time flies, huh?
Alright, enough yapping. About kms-semver1.4.0, that is currently set to release around September 30th, 2026. HOWEVER, because school is very unpredictable, I may rewrite the whole roadmap to try and release a minor update to the 1.x.x series to release every 5~6 months instead of 3~4. Currently planned features are listed in the roadmap.
About kms-semver1.3.1, the next major patch, that will come out very soon to address bug issues #14 and #26. If possible, I will also add the feature suggested in feat issue #27. There is no set release date yet; however, the planned range of possible dates goes from August 5th, 2026 to August 11th, 2026.
Full Changelogs
kms-semver1.3.xdiff: https://github.com/Boss-1s/key_multivalue_storage/compare/v1.3.0.20260727rc1β¦v1.3.0.20260730kms-v1.2.3/2026.05.23adiff: https://github.com/Boss-1s/key_multivalue_storage/compare/v1.2.3.20260523.1β¦v1.3.0.20260730
π¦ v1.3.0.20260727rc1 β kms-v1.3.0rc1/2026.07.27
β Target Node Commit: 345ed056
π Release Type: Pre-release - Minor Patch
Whatβs Changed
Important
kms-v1.3.0/2026.07.29, the first stable version of kms-semver1.3.x, will release soon! Please note the changes stated in the roadmap and changelog, and prepare accordingly. Thanks!
Repo Updates
- Fixed auto-regenerate changelog trigger
- Fixed docs build and deployment trigger
- Small README changes
- devcontainer.json update
- Fixed all references to old branch name
- Updated Issue Templates to point to kms-semver1.3.x
- Removed docs folder contents to complete documentation migration to docs branch
- Synced and patched up
.github/directory with semver1.2.x - Attestations for nightly builds
Tests & Automations
- New test folder:
test/automations/.vscode_rebuild - New scripts:
reinstall_extensions.pyandreconfigure_ssh_key.sh - Both are pretty self-explanatory, given the names.
- Useful scripts when rebuilding your codespaceβs/VSCodeβs devcontainer and you donβt want to waste time reconfiguring everything.
Module Updates
- Removed βLast Updatedβ line from module docstrings
- Trimmed trailing whitespace in
src/*
Dependency Updates
See commit e95aedc for details.
- Bumped
certifiv2026.6.17->v2026.7.22 - Bumped
filelockv3.29.4->v3.32.0 - Bumped
gitpythonv3.1.53 ->v3.1.57` - Bumped
griffev2.0.2->v2.1.0 - Bumped
griffecliv2.0.2->v2.1.0 - Bumped
griffelibv2.0.2->v2.1.0 - Bumped
platformdirsv4.10.0->v4.11.0 - Bumped
pre-commitv4.6.0->v4.6.1 - Bumped
pyprojectv1!0.1.2->v1!0.2.1 - Bumped
python-discoveryv1.4.2->v1.5.0 - Bumped
tomlkitv0.15.0->v0.15.1 - Bumped
virtualenvv21.5.1->v21.7.0
Notes
Four medium-risk security leaks were patched by updating gitpython to a version greater than v3.1.54, via commit e95aedc. These leaks may not have affected kms directly; however, it is important to be conscientious when dealing with security and stability.
Plans for next update
Important
This is the final release candidate!
The final release date will be on July 29th, two days after the original planned date, to give myself some time to rest and cleanup any messes left behind.
Full Changelog: https://github.com/Boss-1s/key_multivalue_storage/compare/v1.3.0.20260724rc0β¦v1.3.0.20260727rc1
π¦ v1.3.0.20260724rc0 β kms-v1.3.0rc0/2026.07.24
β Target Node Commit: 66ccf8d5
π Release Type: Pre-release - Minor Patch
Whatβs Changed
Repo Updates
Important
This branch is no longer called βbetaβ. As of this release, it will be called βsemver1.3.xβ.
- Attestations on release
- Merged SECURITY.md changes from 4d90d42 to this branch via ce5cbbd
- Auto changelog generation!
- New dependency group:
release - This dependency group was created for the release pipeline, drawing a finer line between
devandrelease. - Dependencies reorganized
- Small README update
Module Updates
- ALL DOCSTRINGS REFACTORED! π
- All main modules (storage, load, edit, delete), top level module (key_multivalue_storage), and any classes in those modules have thier own
help()function. - The
help()method inkey_multivalue_storage.help()is special because not only does it display the original docstring, it also generates a tree of the entire library! All credits to Rich for making it possible! - All tests use Rich tracebacks
Dependency updates
- chore(deps): bump reviewdog/action-actionlint from 1.72.1 to 1.73.0 by @dependabot[bot] in https://github.com/Boss-1s/key_multivalue_storage/pull/20
- chore(deps): bump actions/setup-python from 4 to 7 by @dependabot[bot] in https://github.com/Boss-1s/key_multivalue_storage/pull/22
- chore(deps): bump actions/checkout from 3 to 7 by @dependabot[bot] in https://github.com/Boss-1s/key_multivalue_storage/pull/23
Notes
This was originally released as v1.3.0.20260723b1. However, I decided to re-release it as a release candidate instead.
Plans for next update
Bro.
We are almost there.
The first release candidate is out, and a second one containing cleanups is coming out. This is it: after rc1, we will finally be stable.
What a journey this has been.
Please note: the final release date will be on July 29th, two days after the original planned date, to give myself some time to rest and cleanup any messes left behind.
Full Changelog: https://github.com/Boss-1s/key_multivalue_storage/compare/v1.3.0.20260721b0β¦v1.3.0.20260724rc0
π¦ v1.3.0.20260721b0 β kms-v1.3.0b0/2026.07.21
β Target Node Commit: a0871f01
π Release Type: Pre-release - Minor Patch
Whatβs Changed
Repo Updates
- New dev dependency: GitPython (gitpython-developers/gitpython)
Note
This dependency makes the precommit process more robust.
- Precommit script updated via 820ca69
Module Updates
- updated __init__.py to include all
load.Loadmethods and classes in the library tree - Refactored all docstrings in load.py
- Added
help()function inload.Load - diff.py: third-party import should be after first-party import fixed
- test-meta.py: bumped to
t-meta-kms-v2026.7.1Dependency updates
- chore(deps): bump actions/setup-python from 6 to 7 by @dependabot[bot] in https://github.com/Boss-1s/key_multivalue_storage/pull/16
- chore(deps): bump reviewdog/action-actionlint from 1.72.0 to 1.72.1 by @dependabot[bot] in https://github.com/Boss-1s/key_multivalue_storage/pull/19
Notes
None.
Plans for next update
Looks like Iβm going to be on a tight schedule hereβ¦
Iβm going to be releasing one more beta on the 23rd, which should include docstring updates related to the storage module and delete module. After that, a little sparkle and cleanup is left before moving on to the release candidate stage, which is set to release as v1.3.0.20260724rc0 on July 24th. As a reminder, the final release is scheduled for July 27th, with a backup date of July 30th in case things donβt go as planned, giving me three emergency days.
Full Changelog: https://github.com/Boss-1s/key_multivalue_storage/compare/v1.3.0.20260703a4β¦v1.3.0.20260721b0
π¦ v1.3.0.20260703a4 β kms-v1.3.0a4/2026.07.03
β Target Node Commit: e658778d
π Release Type: Pre-release - Minor Patch
Whatβs Changed
Repo Updates
Cherry-picked commits
0fff779, fa0924a, 546d497, 1c0d4d3, db4ac9c, 3be3602, 49645dc, 625cc38, 892c427, d9614ad, 4de3e08, cb36289, 0e1324f, df782e8, 67da837, d21b83d, 9eaabfb, 95af72e, 3456bf8, and possibly moreβ¦.
See more info about these commits and thier purpose at v1.2.4.20260703
Other Changes
- fixed: use same time format as main (df782e8)
- fixed: pass NIGHTLY env var (df782e8)
All other repo related updates were released as part of v1.2.4.20260703.
Module Updates
- New official dependencies:
rich(>=15.0.0) andtyping-extension(~=4.15) - New dev dependency:
precommit(>=4.6.0) - Small Pylint settings tweaks
release.pynow resides in./test/automation- Partial implementation of Rich throughout the library; expect Rich to completely replace native
print()and otherstdout-related methods bykms-semver1.4 - Added
tmp/to.gitignoreIn init.py:
- Module docstring refactored
__all__- Commented out v1.x discontinuation for later
- Partially implemented help() function at the library scope
In storage.py (formerly key_multivalue_storage.py):
- Classes
Load,Edit,Deletehave been moved out into their respective modules (load.Load,edit.Edit,delete.Delete). They are still accessible throughStoragein the contextStorage.<subclass>; however, from v2.0 onward, they must be accessed through<module>.<class>. See docs for more info. help()implementedExceptions (utils/exceptions.py)
- New exception
NoInstantiationError(TypeError), used when attempting to instantiate an non-instantiable class (likeStorage.Load) - Docstring refactored
Metaclasses (utils/metadata.py)
- New metaclasses
_KmsMeta,_StorageMeta,_LoadMeta,_EditMeta,_DeleteMeta - Other than
_KmsMeta, each metaclass contains semver, calver, last_update properties and a repr method. _StorageMetastill contains the legacy VERSION, DATE_VERSION, and LAST_UPDATE to prevent breaking changes.Warnings (utils/warnings.py)
- Docstring refactored
Tests (./test/)
- New test:
test-meta.pyβ Used to test repr implementation of classes via metaclass and the help() methods - New folder:
test/automationβ storing automation-related modules in there - New automation:
release.pyβ moved from ./.github/workflows/src to ./test/automation - Also completely refactored and cleaned up the whole release file (49645dc)
- New automation:
precommit.pyβ precommit job (changing last update dates for nowβ¦) - To install this new precommit hook:
Clone the repo:
git clone -b beta https://github.com/Boss-1s/key_multivalue_storage kmscdinto the created folder, create a .venv (if you havenβt already) and install the hook:cd kms uv sync pre-commit installSee docs for more info.
- You can now run all tests from kms easily via one command whilst in development.
To run the tests:
Clone the repo:
git clone -b beta https://github.com/Boss-1s/key_multivalue_storage kmscdinto the created folder, then run the test command:cd kms python test/This may change in the near future, perhaps with a new test library in the first beta. See docs for more info.
Warning
When tests are running on Windows, specifically the legacy cmd.exe shell, tests WILL fail due to a Unicode encoding error. See #14 for more details.
Dependency updates
- chore(deps): bump actions/checkout from 6 to 7 by @dependabot[bot] in https://github.com/Boss-1s/key_multivalue_storage/pull/10
- chore(deps): update typing-extensions requirement from ~=4.15 to ~=4.16 by @dependabot[bot] in https://github.com/Boss-1s/key_multivalue_storage/pull/13 and e658778
Plans for next update
Finally.
The final alpha release is here.
The plan right now is two betas and a release candidate, with the official release coming on July 27th. Expect the first beta sometime next week; itβs most likely going to be a smaller release compared to the feature-and-fix-packed alphas weβve had. Side note: Feature Freeze does not begin until kms-semver1.3.0rc0.
Full Changelog: https://github.com/Boss-1s/key_multivalue_storage/compare/v1.3.0.20260610a3β¦v1.3.0.20260703a4
π¦ v1.3.0.20260610a3 β kms-v1.3.0-alpha3/2026.06.10
β Target Node Commit: 8b48b591
π Release Type: Pre-release - Minor Patch
Whatβs Changed
Repo Updates
Cherry-picked commits
- A lot of commits from
mainwere cherry-picked this time. Most of the commits were really related to fixing the release version commit bug (seev1.2.3.20260605.4)Commits cherry-picked without conflict resolution
33855ad, e4e8664, 12757f8, 2675284, a6a9ed3, bf6607a, b41c207, b871b5f, 4650290, eee9e56, 317da7d, 2630c0a, bb4f049, 26f4b71, e3de61a, 3ac9e17, 0f39c93, f375b1c, 78432d2, b58e724, d3ed467, 74d0422, 49808dc, d0ffda8, 29505b7, 2012ac1, dc57b97, a32ac32, 128e343, 9d26dfa, fed084c, fe75f15, 5a23676, cff3bad, 60d3048, aa1013f, b7098d8, 29029e5, e763214, 779e3c4, 4c9c4b0, b633311, e5b68bd, e458e95, 9415ca9, ed890a5, 7da66b1, 41444b8, 5faa9cc, 623ec76, 9286038, e988c85, fdef67b, a353b75, 84954ac, 9fdbab8, bd6b4cb, 99ec8ff, 23dd58c
Commits cherry-picked with conflict resolution
This basically means that the cherry-picked commits have a small difference from the original commit.
34dd62c, 0abbb2a, 0ea7bac, d650ae6, e0d0145, 0c0f325, 40312c7, 799e1bc, b8bc5ff, 5d08a72, cace704, 19c9477, bd9a4c0, 2d969c2, 5b45ae6, 58fd625, 002c7c2, d1a1be5, bb799a4, 7aca59a, 40fe7a5, a7444cb, 249896d, 6125ed0, e62ea4a
Other Changes
I put version numbers next to changes from upstream versions; however, this doesnβt mean that
kms-semver1.3is sourced from these changes.
- Added extension
fanaticpythoner.better-todo-treeindevcontainer.json - Refined bug report template (
v1.2.3.20260605) - Feature Request template! (
v1.2.3.20260605) - Dependabot watches and updates dependencies on
betanow, too - Dummy release to test release logic (
v1.2.3.20260605) - Nightly builds now release every push, no matter where the push occurs.
- Release version change commit fixed! (
v1.2.3.20260605.4) otest.jsonAND.github/.tmpadded to.gitignore- README updates
- Contribution Guideline updates (
v1.2.3.20260605) uv.lockdiff.pyupdateModule Updates
So many updates related to the package itselfβ¦letβs get started!
__init__.py- Triple-quote docstring (which tbh is not much of a docstring lol)
- Move
import warningsto before module relative imports (see PEP 328delete.py,edit.py, andload.py - Created files to prepare for the next alpha release
utils/exceptions.py - Created file
- This module stores all custom Exceptions used by other modules.
- Added new custom exception
KeyNotFoundError(KeyError)utils/metadata.py - Created file
- This module stores the metaclasses for source modules.
- Added new metaclass
_StorageMeta - This module will receive more refactoring in the next alpha release.
utils/warnings.py - Created file
- This module stores all custom warnings used by other modules.
- Added new warning classes:
DeleteWarning(UserWarning) AdditionFailureWarning(RuntimeWarning) SubtractionFailureWarning(RuntimeWarning) CastWarning(SyntaxWarning) - This modules will receive more refactoring in the next alpha update.
key_multivalue_storage.py - Moved metaclass(es) (
_StorageSettingsMetaor_StorageMeta), warning(s) (DeleteWarning,AdditionFailureWarning,SubtractionWarning,CastWarning), and exception(s) (KeyError) into thier respective modules inutils/ - Lots of prettifying
- Comment fixes
- Fixed all linting ERRORS
- Pylint: 9.55 to 9.68 out of 10 (couldnβt get 9.67 sadly lol)
- Removed __is_warning_category_ignored
- Implemented checking for warning category ignorance directly in the method
Storage.Delete.all() - Some docstring fixesβ¦like two of them lol
- Fixed
warnargument inconsistency inStorage.Delete.all()
Is it just me, or is everything revolved around bugs from the Delete classβ¦
Dependency updates
- build(deps): bump astral-sh/setup-uv from 5 to 7 by @dependabot[bot] in https://github.com/Boss-1s/key_multivalue_storage/pull/8
- build(deps): bump oprypin/find-latest-tag from 1.1.2 to 1.1.3 by @dependabot[bot] in https://github.com/Boss-1s/key_multivalue_storage/pull/7
Notes
This was supposed to be release v1.3.0.20260608a3, however I found out (a bit too late) that the release built on main for some reason, so Iβm rereleasing it with the CORRECT branch on targetβ¦
Plans for next update
Itβs been two weeks since the last alpha, but this one is finally here. So much effort to fix something upstream just so I could finally release thisβ¦
I believe that after this, we will see one more big alpha release. That release will mainly contain the separation of the Load, Edit, and Delete classes from Storage, along with separate metadata for each of these classes. After that comes the beta releases, which will have small fixes, tweaks, native Pylint support, and definitely NO breaking changes. Hopefully, weβll only need one release candidate before the actual kms-semver1.3.0 update.
Thatβs it, folks!
Full Changelog: v1.3.0.20260524a2 vs v1.3.0.20260610a3
YANKED: v1.3.0.20260608a3
π¦ v1.3.0.20260524a2 β kms-v1.3.0a2/2026.05.24
β Target Node Commit: f5cb3356
π Release Type: Pre-release - Minor Patch
Whatβs Changed
Repo Updates
- feat: use github-actions bot for signatures
Module Updates
- None this time :)
Dependency updates
- None this time ;)
Plans for next update
The next alpha with major changes will be released in a week, with the last major alpha in two or three weeks. The next big change will be separating the classes into different modules. I will try my best to keep breaking changes to a minimum, but no promises can be made lol. Other things that need to be done is fixing type hint warnings and conflicts, and obviously, fixing the docstrings, which is the main point of the update, after all.
Full Changelog: https://github.com/Boss-1s/key_multivalue_storage/compare/v1.3.0.20260524a1β¦v1.3.0.20260524a2
π¦ v1.3.0.20260524a1 β kms-v1.3.0-alpha1/2026.05.24
β Target Node Commit: 51583499
π Release Type: Pre-release - Minor Patch
Whatβs Changed
Repo Updates
- Main reason for this release is hoping that the auto version commit gets fixed
- feat: auto-version commit (f040b8a, 5158349)
- feat: uv for testing (58fd625)
Module Updates
- None this time :)
Dependency updates
- None this time ;)
Notes
If this doesnβt work youβll most likely see another alpha release todayβ¦
Plans for next update
The next alpha with major changes will be released in a week, with the last major alpha in two or three weeks. The next big change will be separating the classes into different modules. I will try my best to keep breaking changes to a minimum, but no promises can be made lol. Other things that need to be done is fixing type hint warnings and conflicts, and obviously, fixing the docstrings, which is the main point of the update, after all.
Full Changelog: https://github.com/Boss-1s/key_multivalue_storage/compare/v1.3.0.20260523a0β¦v1.3.0.20260524a1
π¦ v1.3.0.20260523a0 β kms-v1.3.0-alpha0/2026.05.23
β Target Node Commit: 002c7c21
π Release Type: Pre-release - Minor Update
omg its finally here!!! :>
Whatβs Changed
Repo Updates
- See v1.2.3.20260523 for some updates, as that updateβs contents were merged into this oneβs.
- Added badge links in Readme
- Fixed false info in Readme and wiki
- Fixed minor grammar and spelling errors in documentation (wiki, readme, security guide)
- Bug Report template
- CODEOWNERS
- Release template
- Nightlys for both
mainandbetabranches! - Griffe and Pylint are both optional dependencies in v1.3
- New test file:
diff.py- shows all breaking changesModule Updates
In key_multivalue_storage:
- Breaking changes between kms-semver1.3.0 and kms-semver1.20260506.2 include the following:
- The
keyvalue of aStorageinstance is now set to typeAny. However, it is still recommended that the value be a string to avoid string-casting errors. - The
top_level_keyparameter ofStorage.Delete.by_propkeyis now calledtop_lv_key - Renamed all metadata
- Raised PyLint score from 0.00 to 9.95!
- Removed __all__ (only rely on __all__ in __init__.py from now on)
- Removed all trailing whitespace
- Ensured all lines were under 100 chars
- Removed all unnecessary indentation
- Changed all indentation to be spaces instead of tabs (pylint was giving nightmares about that)
- Added TODO comments
- Completely commented out unfinished logger
- Fixed like 30% of docstrings
- Prettified like 70% of the module
- Other stuff that I could not find lol
In __init.py__:
- Added
PendingDeprecationWarningabout module name deprecation - Added
PendingDeprecationWarningaboutkms-semver1.xdeprecationDependency updates
- None this time
Plans for next update
Damn, did this take long. I got it finished in the end, didnβt I?
Looks like the next alpha will be released in a week, with the last alpha in two or three weeks. The next big change will be separating the classes into different modules. I will try my best to keep breaking changes to a minimum, but no promises can be made lol. Other things that need to be done is fixing type hinting warnings and conflictions, and obviously, fixing the docstrings, which is the main point of the update, after all.
Note that kms-semver1.3 will now be officially designated as built from v1.2.3.20260523.1.
Full Changelog: v1.2.2.20260517.3 vs v1.3.0.20260522a0
π¦ v1.2.5.20260912 β kms-v1.2.5/2026.09.12
β Target Node Commit: 62e63d93
π Release Type: Minor Patch
Caution
The version you are looking at is currently in LTS for stability. If you are able, please update to the newest version.
The kms-semver1.2.x series will officially reach its End-Of-Life on January 3rd, 2027.
- Fixed some stale references to main in workflows
- README update
Full Changelog: https://github.com/Boss-1s/key_multivalue_storage/compare/v1.2.5.20260724β¦v1.2.5.20260912
π¦ v1.2.5.20260724 β kms-v1.2.5/2026.07.24
β Target Node Commit: 0edcd250
π Release Type: Major Patch
Whatβs Changed
Important
As of this version, the main branch will be renamed to semver1.2.x. Please update your environments accordingly.
Important
kms-v1.3.0/2026.07.29, the first stable version of kms-semver1.3.x, will release soon! Please note the changes stated in the roadmap and changelog, and prepare accordingly. Thanks!
Important
As of this version, the main branch handling all things relating to the docs/ folder and the Github Pages site is docs
Warning
This will be the last feature release for kms-semver1.2.x. Beginning this release, kms-semver1.2.x will enter its Maintenance stage, meaning only high-priority security updates and important bug fixes will be committed to ensure long-term stability before EOS (End of Support).
Repository Updates
- Fixed some problems with the READMEβs links
- Wiki is almost finished
- Main documentation site! Deployed at https://boss-1s.github.io/key_multivalue_storage
- Auto changelog [re]generation - see
v1.3.0.20260724rc0
Module Updates
- docstring revamped for
Storage - fixed a bunch of type hints
- using Mapping instead of dict
- Type-hinted
Storage - stringify
key/top_lv_key - pylint: 8.14 -> 8.59
Dependency Updates
- chore(deps-dev): bump pyproject from 1!0.1.2 to 1!0.1.3 by @dependabot[bot] in https://github.com/Boss-1s/key_multivalue_storage/pull/15
- chore(deps): bump actions/setup-python from 6 to 7 by @dependabot[bot] in https://github.com/Boss-1s/key_multivalue_storage/pull/17
- chore(deps): bump reviewdog/action-actionlint from 1.72.0 to 1.72.1 by @dependabot[bot] in https://github.com/Boss-1s/key_multivalue_storage/pull/18
- chore(deps): bump reviewdog/action-actionlint from 1.72.1 to 1.73.0 by @dependabot[bot] in https://github.com/Boss-1s/key_multivalue_storage/pull/21
- chore(deps): bump actions/checkout from 3 to 7 by @dependabot[bot] in https://github.com/Boss-1s/key_multivalue_storage/pull/25
- chore(deps): bump actions/setup-python from 4 to 7 by @dependabot[bot] in https://github.com/Boss-1s/key_multivalue_storage/pull/24
Notes
This is a delayed release. The original planned date for this release was 2026/07/23 on v1.2.5.20260723 instead.
Plans for next update
No plans for the next kms-semver1.2.x update.
Full Changelog: https://github.com/Boss-1s/key_multivalue_storage/compare/v1.2.4.20260702β¦v1.2.5.20260724
π¦ v1.2.4.20260702 β kms-v1.2.4/2026.07.03
β Target Node Commit: 5710f8a7
π Release Type: Minor Patch
Whatβs Changed
Repo Updates
- Release workflow is now stable, thanks to this update!
- Changed automated release update commit message and description
- Some
release.pyandrelease.ymlrefactoring - Better nightly versioning for both
mainandbeta - More transitions to
uv - feat: use
dependency-groupsinstead ofoptional-dependencies(708d560@beta, ab42dcc@main) - feat: pin python version (e20a0d6)
- Documentation website!!! (https://boss-1s.github.io/key_multivalue_storage)
- All issue templates have
needs triageas one of the default tags nowModule Updates
- Pylint Implementation!!~~
- Removed ALL trailing whitespace
- fix: import
types.TracebackType(2b3479f) - New official dependency:
typing-extensionsat~=4.16 typing-extenstions.deprecatedwas used overwarnings.deprecatedto keep CPython >=3.12 instead of just chopping off older version just because of an@deprecatedflag- Removed random empty
warnings.warn()Dependency updates
- chore(deps): bump actions/checkout from 6 to 7 by @dependabot[bot] in https://github.com/Boss-1s/key_multivalue_storage/pull/11
- chore(deps): update typing-extensions requirement from ~=4.15 to ~=4.16 by @dependabot[bot] in https://github.com/Boss-1s/key_multivalue_storage/pull/12
Plans for next update
Our next few 1.2.4.x updates should see more updates to the documentation website, and changes that will pave the way to 1.3.0 This patch version (1.2.4) may be the last one before the release of kms-semver1.3.0.
Full Changelog: https://github.com/Boss-1s/key_multivalue_storage/compare/v1.2.3.20260605.4β¦v1.2.4.20260702
π¦ v1.2.4.20260610b0 β kms-v1.2.4-beta0/2026.06.10
β Target Node Commit: de48c51d
π Release Type: Pre-release - Major Patch
Testing release logicβ¦.
Full Changelog: https://github.com/Boss-1s/key_multivalue_storage/compare/v1.2.3.20260605.4β¦v1.2.4.20260610b0
π¦ v1.2.3.20260605.4 β kms-v1.2.3/2026.06.05d
β Target Node Commit: b875965f
π Release Type: Stable Promotion - Minor Patch
Whatβs Changed
Repo Updates
- Everything from
v1.2.3.20260605.1to here is fixing that damned thing of a commit pushβ¦and with this release itβs finally fixed. Whew! - Updated README to have a link to roadmap
Module Updates
- Prettified up to line 343 in
key_multivalue_storage.pyDependency updates
- None this time ;)
Huge credits to Googleβs AI Mode for explaining SSH to me so that I could get this done lol ππ
Plans for next update
Our next few 1.2.3.x updates should see more Repo updates, specifically working on the wiki page and other documentation. I am also hoping for some prettifying in the module itself on kms-semver1.2, whilst working on kms-semver1.3.
Full Changelog: https://github.com/Boss-1s/key_multivalue_storage/compare/v1.2.3.20260605.1β¦v1.2.3.20260605.4
Yanked: v1.2.3.20260605.2, v1.2.3.20260605.3
π¦ v1.2.3.20260605.4b3 β kms-v1.2.3b3/2026.06.05d
β Target Node Commit: b7ad7dbc
π Release Type: Pre-release - Minor Patch
so many betasβ¦.im praying thisβll workβ¦..pleaseβ¦.
Full Changelog: https://github.com/Boss-1s/key_multivalue_storage/compare/v1.2.3.20260605.4b2β¦v1.2.3.20260605.4b3
π¦ v1.2.3.20260605.4b2 β kms-v1.2.3b2/2026.06.05d
β Target Node Commit: fae9ca15
π Release Type: Pre-release - Minor Patch
Hopefully this worksβ¦
Full Changelog: https://github.com/Boss-1s/key_multivalue_storage/compare/v1.2.3.20260605.4b1β¦v1.2.3.20260605.4b2
π¦ v1.2.3.20260605.4b1 β kms-v1.2.3b1/2026.06.05d
β Target Node Commit: fae9ca15
π Release Type: Pre-release - Minor Patch
Full Changelog: https://github.com/Boss-1s/key_multivalue_storage/compare/v1.2.3.20260605.4b0β¦v1.2.3.20260605.4b1
π¦ v1.2.3.20260605.4b0 β kms-v1.2.3b0/2026.06.05d
β Target Node Commit: a0549a98
π Release Type: Pre-release - Minor Patch
Full Changelog: https://github.com/Boss-1s/key_multivalue_storage/compare/v1.2.3.20260605.3β¦v1.2.3.20260605.4b0
π¦ v1.2.3.20260605.3 β [YANKED] kms-v1.2.3/2026.06.05c
β Target Node Commit: 27cebddb
π Release Type: Minor Patch
Whatβs Changed
Repo Updates
- fatal: test mode set to βtrueβ in real release file :[
Module Updates
None this time :}
Dependency updates
None this time :]
Plans for next update
Our next few 1.2.3.x updates should see more Repo updates, specifically working on the wiki page and other documentation. I am also hoping for some prettifying in the module itself on kms-semver1.2, whilst working on kms-semver1.3. If release fails again i swearβ¦.
Full Changelog: https://github.com/Boss-1s/key_multivalue_storage/compare/v1.2.3.20260605.2β¦v1.2.3.20260605.3
π¦ v1.2.3.20260605.2 β [YANKED] kms-v1.2.3/2026.06.05b
β Target Node Commit: de7e3bb3
π Release Type: Minor Patch
Whatβs Changed
Repo Updates
- fatal typo:
target_commitishspelled with two βtβsModule Updates
- None this time
Dependency updates
- None this time
Plans for next update
Our next few 1.2.3.x updates should see more Repo updates, specifically working on the wiki page and other documentation. I am also hoping for some prettifying in the module itself on kms-semver1.2, whilst working on kms-semver1.3. If release fails again i swearβ¦.
Full Changelog: https://github.com/Boss-1s/key_multivalue_storage/compare/v1.2.3.20260605.1β¦v1.2.3.20260605.2
π¦ v1.2.3.20260605.1 β kms-v1.2.3/2026.06.05a
β Target Node Commit: 77609c6c
π Release Type: Minor Patch
Whatβs Changed
Repo Updates
Cherry-picked from beta branch
- docs/CODEOWNERS
-
docs/release-template.md
- Small update to Contributing Guidelines (02f6b15)
- Readded release environment to deploy to
- Hopefully fixed the whole βcommit version change after releaseβ thingβ¦.I will crash out if that doesnβt work.
Module Updates
- None this time :)
Dependency Updates
- chore(deps): bump webfactory/ssh-agent from 0.9.0 to 0.10.0 by @dependabot[bot] in https://github.com/Boss-1s/key_multivalue_storage/pull/9
Notes
Apparently I never uncommented the step for releasing to PyPI so here I amβ¦with a bunch of other fixes. Hopefully, after this is fixed, i wonβt have to touch the release workflow again until I decide about a possible CHANGELOG.mdβ¦
Plans for next update
Our next few 1.2.3.x updates should see more Repo updates, specifically working on the wiki page and other documentation. I am also hoping for some prettifying in the module itself on kms-semver1.2, whilst working on kms-semver1.3. If the release fails again i swearβ¦.
Full Changelog: v1.2.3.20260605 vs v1.2.3.20260605.1
π¦ v1.2.3.20260605 β kms-v1.2.3/2026.06.05
β Target Node Commit: 791c8605
π Release Type: Minor Patch
Whatβs Changed
Repo Updates
- The
test.ymlworkflow will now deploy to its respective head branchβs test environment when Dependabot makes a PR - Hopefully SSH signing is fixed meaning I can commit the version change
- Dummy Release to test if releasing works
- Nightly now releases every push
- New Contribution Rules!
- Bug Report and Feature Request Templates
Module Updates
In
key_multivalue_storage.py: - Added
DeprecationWarningto the argumenttop_level_keyinStorage.Delete.by_propkey() - Added
DeprecationWarnings to all metadata variables - Replaced all tab characters with spaces
- Logging section removed completely
Dependency updates
- Bump astral-sh/setup-uv from 5 to 7 by @dependabot[bot] in https://github.com/Boss-1s/key_multivalue_storage/pull/5
- Bump oprypin/find-latest-tag from 1.1.2 to 1.1.3 by @dependabot[bot] in https://github.com/Boss-1s/key_multivalue_storage/pull/6
Plans for next update
Our next few 1.2.3.x updates should see more Repo updates, specifically working on the wiki page and other documentation. I am also hoping for some prettifying in the module itself on kms-semver1.2, whilst working on kms-semver1.3. If release fails again i swearβ¦.
Full Changelog: v1.2.3.20260523.1 vs v1.2.3.20260605
(Yanked: v1.2.3.20260604)
π¦ v1.2.3.20260523.1 β kms-v1.2.3/2026.05.23a
β Target Node Commit: 190cb35e
π Release Type: Minor Patch
Whatβs Changed
Repo Updates
- Fixes to
push.sh - Main reason for this push is
release.ymlfixModule Updates
- None this time :)
Dependency updates
- None this time :)
Plans for next update
Our next few 1.2.3.x updates should see more Repo updates, specifically working on the wiki page and other documentation. I am also hoping for some prettifying in the module itself on kms-semver1.2, whilst working on kms-semver1.3.
Full Changelog: https://github.com/Boss-1s/key_multivalue_storage/compare/v1.2.3.20260523β¦v1.2.3.20260523.1
π¦ v1.2.3.20260523 β kms-v1.2.3/2026.05.23
β Target Node Commit: 9e3ab939
π Release Type: Major Patch
Whatβs Changed
Repo Updates
- Added badge links in Readme
- Fixed false info in Readme and wiki
- Fixed minor grammar and spelling errors in documentation (wiki, readme, security guide)
- Bug Report template
- Nightlys for both
mainandbetabranches! - Code of Conduct
- Contribution Guidelines
- Wiki Updates
- Added Linting for TOML, YAML, Bash (
*.toml,*.yaml/*.yml,*.sh)Module Updates
In __init__.py:
- Added
PendingDeprecationWarningabout module name deprecationDependency updates
- None this time ;)
Plans for next update
Our next few 1.2.3.x updates should see more Repo updates, specifically working on the wiki page and other documentation. I am also hoping for some prettifying in the module itself on kms-semver1.2, whilst working on kms-semver1.3.
Full Changelog: v1.2.2.20260517.3 vs v1.2.3.20260522
π¦ v1.2.2.20260517.3 β kms-v1.2.2/2026.05.17c
β Target Node Commit: b313bc41
π Release Type: Stable Promotion - Minor Patch
Whatβs Changed
Repo Updates
- Added an auto-version script
- Added a step in build job to auto-version based on release details before publication
- Minor updates to Contributing Guidelines
- Removed unneeded filesβ¦ π
Module Updates
- None this time :)
Dependency updates
- None this time :)
Plans for next update
Our next few 1.2.2.x update should see more Repo updates as I slowly get situated in PyPi and here, specifically working on the wiki page and other documentation. I am also hoping for some prettifying in the module itself on kms-semver1.2, while preparing for kms-semver1.3 alpha release 1.
Full Changelog: https://github.com/Boss-1s/key_multivalue_storage/compare/v1.2.2.20260517.2β¦v1.2.2.20260517.3
π¦ v1.2.2.20260517.3-b β kms-v1.2.2/2026.05.17c-beta
β Target Node Commit: bb7d6746
π Release Type: Pre-release - Minor Patch
Whatβs Changed
Repo Updates
- Added an auto-version script
- Added a step in build job to auto-version based on release details before publication
Module Updates
- None this time :)
Dependency updates
- None this time :)
Notes
This is marked as a beta release because I have no idea if the current code works. If you see another beta, then, well, we all know what that meansβ¦
Plans for next update
Our next few 1.2.2.x update should see more Repo updates as I slowly get situated in PyPi and here, specifically working on the wiki page and other documentation.
The 1.3 beta will come out soon!
π¦ v1.2.2.20260517.2 β kms-v1.2.2/2026.05.17b
β Target Node Commit: 6cc925b0
π Release Type: Minor Patch
Whatβs Changed
Repo Updates
- fixed a fatal error in which versions were incorrect, preventing release of previous version
Module Updates
- None this time ;)
Dependency updates
- None this time ;)
Plans for next update
Our next few 1.2.2.x update should see more Repo updates as I slowly get situated in PyPi and here, specifically working on the wiki page and other documentation.
The 1.3 beta will come out soon!
Full Changelog: kms-calver2026.05.17 vs kms-calver2026.05.17b
π¦ v1.2.2.20260517.1 β kms-v1.2.2/2026.05.17a
β Target Node Commit: 2308c0c7
π Release Type: Minor Patch
Whatβs Changed
Repo Updates
- fixed a fatal error in which classifiers were incorrect, preventing release of previous version
Module Updates
- None this time ;)
Dependency updates
- None this time ;)
Plans for next update
Our next few 1.2.2.x update should see more Repo updates as I slowly get situated in PyPi and here, specifically working on the wiki page and other documentation.
The 1.3 beta will come out soon!
Full Changelog: kms-calver2026.05.17 vs kms-calver2026.05.17a
π¦ v1.2.2.20260517 β kms-v1.2.2/2026.05.17
β Target Node Commit: b6170c53
π Release Type: Minor Patch
Whatβs Changed
Repo Updates
- Changed some classifiers in
pyproject.toml - Completed Security Policy
- Created Contributing Guidelines
- Created blank
requirements.txt - Other fixes
Module Updates
- None this time ;)
Dependency updates
- Bump
setuptoolsfrom61.0to77.0.3(7b64369)
Plans for next update
Our next few 1.2.2.x update should see more Repo updates as I slowly get situated in PyPi and here, specifically working on the wiki page and other documentation.
The 1.3 beta will come out soon!
Full Changelog: kms-calver2026.05.15a vs kms-calver2026.05.17
π¦ v1.2.2.20260515.1 β kms-v1.2.2/2026.05.15a
β Target Node Commit: cc051257
π Release Type: Minor Patch
Whatβs Changed
Repo Updates
- Fixed a fatal bug where release would not deploy properly due to insufficient permissions
Module Updates
- None this time ;)
Dependency updates
- None this time ;)
Plans for next update
Our next few 1.2.2.x update should see more Repo updates as I slowly get situated in PyPi and here, specifically working on the wiki page (which is currently empty). The 1.3 beta may also come out around that time.
π¦ v1.2.2.20260515 β kms-v1.2.2/2026.05.15
β Target Node Commit: 1968a9b4
π Release Type: Minor Patch
Whatβs Changed
Repo Updates
- Readme is practically finished!
- Added Security Advisory, which contains an explanation of the versioning systems and supported versions.
- Added Dependabot
- Added CodeQL for code scanning
- Release assets should now be automatically uploaded to this release page right here
- Fixed multiple test deployment issue
Module Updates
None this time ;)
Dependency updates
- Bump actions/checkout from 4 to 6
- Bump softprops/action-gh-release from 2 to 3
Full Changelog: v1.2.2.20260506.2 vs. v1.2.2.20260515
Plans for next update
Our next 1.2.2.x update should see more Repo updates as I slowly get situated in PyPi and here, specifically working on the wiki page (which is currently empty). The 1.3 beta may also come out around that time.
π¦ v1.2.2.20260506.2 β kms-v1.2.2/2026.05.06b
β Target Node Commit: 44758a3c
π Release Type: Major Patch
First Package Release! (hopefully)
This module was originally a single file that I made just for fun, now iβve decided to make it into a package! README will be finished in v1.3, alongside the βGreat Docstring Updateβ ;)
Full Changelog: https://github.com/Boss-1s/key_multivalue_storage/commits/v1.2.2.20260506.2
π¦ v1.2.1.20260417.2 β kms-v1.2.1/2026.04.17b
β Target Node Commit: 70424d7e
π Release Type: Major Patch
Caution
This is an older release of this library brought back to life through archives in this commit history. Things may be broken and not work.
Note
This release involves three seperate releases: the main release, v1.2.1.20260417, and the two patches after that, v1.2.1.20260417a and v1.2.1.20260417b (This release).
Whatβs Changed
kms-v1.2.1/2026.04.17
- Fixed License Statement Format
- Changed Versioning format (now
sematic/datevs. old onedateandsematicseparate) - Created metaclass
_StorageSettingsMeta - Seven new global variables:
VERSION,DATE_VERSION,LAST_UPDATE,indent,encode,skip_delete_warn,auto_delete_self - Instance ID now prioritizes
uuid.uuid7(), and falls back touuid.uuid4()if CPython version is < 3.14 - Small changes to functions
storeandDelete.allto support globalskms-v1.2.1/2026.04.17a - Changes involving the global variable
skip_delete_warnhave been reverted and the variable deletedkms-v1.2.1/2026.04.17b(This release) - Fix tests failing due to an attempt to grab the indent in the
__storefunctions, which is an@staticmethod - Changed it so all functions in Edit that use
__storeprovide the indent default (Storage.indent) beforehand - Prettified
_encodeand_decode
Changelog:
kms-v1.2.1/2026.04.17: https://github.com/Boss-1s/scratchattach/commit/515e0c715c723aa4821b90f9753d062cd7bc7675
kms-v1.2.1/2026.04.17a: https://github.com/Boss-1s/scratchattach/commit/db471126f57ee6b0fe371631b04d6bfcc7e00b78
kms-v1.2.1/2026.04.17b (This release): https://github.com/Boss-1s/scratchattach/commit/208a0874e3ebeaf124fb926bff271fffb2452b39
π¦ v1.2.0.20260128.1 β kms-v1.2/2026.01.28a
β Target Node Commit: f0c2322b
π Release Type: Minor Patch
Caution
This is an older release of this library brought back to life through archives in this commit history. Things may be broken and not work.
Whatβs Changed
- Removed unused
datetime
Changelog: https://github.com/Boss-1s/scratchattach/commit/b64dd8bd9891e664d84980521e21877f11799a29
π¦ v1.2.0.20260104 β kms-v1.2/2026.01.04
β Target Node Commit: 5aced039
π Release Type: Minor Patch
Caution
This is an older release of this library brought back to life through archives in this commit history. Things may be broken and not work.
Whatβs Changed
- Partially added
logging.Loggersupport Storage._KeyNotFoundErrornow inherits fromKeyErrorinstead of the genericException- Complete type-hint refactor
- Remove
Storage._dprint(_dprintwas a legacy private function that implemented an extremely redundantstdoutprinting though printing with bothprint()andos.system("echo...")) - Refactored debug messages to include the method in which the print statement is nested in
- Finished all dunder methods (added
__getitem__,__setitem__,__delitem__,__len__,__contains__,__iter__,__getattr__,__setattr__,__call__,__enter__,__exit__,__format__)
Changelog: https://github.com/Boss-1s/scratchattach/commit/84a75fc3847bcc2de0e7f45b3b41230ef659fec3
π¦ v1.2.0.20260101.1a1 β kms-v1.2.0a1/2026.01.01a
β Target Node Commit: 3956a80b
π Release Type: Pre-release - Minor Patch
Caution
This is an older release of this library brought back to life through archives in this commit history. Things may be broken and not work.
Warning
These release notes are AI-generated.
Release Notes
Major Features Added
1. Bitwise AND Operator (&) - Intersection
combined = storage1 & storage2 # Returns Storage with shared keys
- Computes intersection of keys between
Storageinstances orStorageand dict - Returns new
Storagecontaining only shared keys - Returns
0if no intersection found - Requires matching top-level keys for two
Storageinstances - Method:
__and__(self, other) -> Self | int
2. Bitwise OR Operator (|) - Union
merged = storage1 | storage2 # Returns Storage with all keys
- Computes union of all keys from both sources
- Returns new
Storagewith combined keys - Returns
0if no keys result - Requires matching top-level keys for two
Storageinstances - Method:
__or__(self, other) -> Self | int
3. Bitwise XOR Operator (^) - Symmetric Difference
unique = storage1 ^ storage2 # Returns Storage with unique keys only
- Computes symmetric difference (keys in only one source)
- Returns new
Storagewith non-overlapping keys - Returns
0if no difference exists - Requires matching top-level keys for two
Storageinstances - Method:
__xor__(self, other) -> Self | int
4. Left Shift Operator (<<) - Prefix Slicing
rest = storage << 2 # Skip first 2 key-value pairs
- Removes first N key-value pairs
- Returns new
Storagewith remaining pairs - Returns
0if offset exceeds total keys - Method:
__lshift__(self, other: int) -> Self | int
5. Right Shift Operator (>>) - Suffix Slicing
partial = storage >> 3 # Remove last 3 key-value pairs
- Removes last N key-value pairs
- Returns new
Storagewith remaining pairs - Returns
0if offset exceeds total keys - Method:
__rshift__(self, other: int) -> Self | int
6. Arithmetic Operators
__add__(self, other)- Addition operation__truediv__(self, other)- Division operation__sub__(self, other)- Subtraction operation__radd__(self, other)- Reverse addition operation__rtruediv__(self, other)- Reverse division operation__rsub__(self, other)- Reverse subtraction operation
7. Comparisons
__eq__- Equality comparison__lt__and__le__- less than & less than or equal to, respectively.@total_orderingfills in__gt__and__ge__.
See this section of the docs for more information.
Enhanced Type System
Import Updates
- Added
Selffromtypingmodule for improved self-referential type hints - Added
@total_orderingdecorator for comprehensive comparison support
Type Annotation Improvements
- Updated legacy
Dict,List,Optionalannotations to modern syntax - Changed
Dict[str, Dict[str, Any]]todict[str, dict[str, Any]] - Changed
List[str]tolist[str] - Enhanced bitwise operator return types:
Self | int
New Custom Warning Classes
1. AdditionFailureWarning
- Raised when attempting to add
Storagewithdictorlist - Runtime warning to prevent unintended data corruption
- Usage:
Storage.__add__()andStorage.__radd__()
2. SubtractionFailureWarning
- Raised when attempting to subtract dict from
Storageor vice versa - Runtime warning for potentially problematic operations
- Usage:
Storage.__sub__()andStorage.__rsub__()
Enhanced store() Method
def store(self, file_path: str, instant_delete: bool=False, indent: int=4) -> None:
New Parameters
instant_delete(default:False)- When
True, automatically deletes the instance after successful storage - Useful for one-time write operations
- Preserves data in file while clearing memory
- When
Updated Documentation
- Improved docstring with all parameter documentation
Logging Improvements
Configuration Changes
- Changed logging level from
WARNINGtoINFO - Enables capture of more operational details
- Better visibility into file I/O operations
Module Exports
Updated __all__ Declarations
Top-level module exports:
__all__ = ["Storage", "Storage.Delete", "Storage.Load", "Storage.Edit", "Delete", "Load", "Edit"]
Storage class exports:
__all__ = ["store", "DeleteWarning", "Load", "Edit", "Delete", "__str__"]
Backward Compatibility
- Module-level convenience exports at end:
Delete = Storage.Delete Load = Storage.Load Edit = Storage.Edit
Code Quality & Edge Cases
Operator Behavior Details
- All bitwise operators support both
Storage-to-StorageandStorage-to-dict operations - Operators maintain immutability (always return new instances)
- Comprehensive bounds checking for shift operations
- Division limits validation (max divisor: 9)
- Proper error messages for key mismatches
Data Integrity
- All operations preserve original data unless explicitly deleted
- New instances created for all set operations
- Consistent type checking throughout
Breaking Changes
β None - This release maintains full backward compatibility with existing code.
Migration Guide
For users upgrading from the previous baseline:
-
Before: No operations available
-
After (New capabilities):
# Arithmetic operations result = storage1 + storage2 combined = storage1 - storage2 chunks = storage1 / 3 # Bitwise set operations intersection = storage1 & storage2 # Common keys union = storage1 | storage2 # All keys difference = storage1 ^ storage2 # Unique keys only # Slicing operations skip_first_2 = storage << 2 skip_last_3 = storage >> 3 # Store and auto-delete storage.store(file_path, instant_delete=True)
Full Changelog: https://github.com/Boss-1s/key_multivalue_storage/compare/v1.2.0.20251231a0β¦v1.2.0.20260101.1a1
π¦ v1.2.0.20251231a0 β kms-v1.2.0a0/2025.12.31
β Target Node Commit: 4a91cfbf
π Release Type: Pre-release - Minor Update
Caution
This is an older release of this library brought back to life through archives in this commit history. Things may be broken and not work.
feat: prevent non-json files by adding .json prefix if the file does not contain one
Full Changelog: https://github.com/Boss-1s/key_multivalue_storage/compare/v1.1.1.20251205β¦v1.2.0.20251231a0
π¦ v1.1.1.20251205 β kms-v1.1.1/2025.12.05
β Target Node Commit: 8e5265cb
π Release Type: Major Patch
Caution
This is an older release of this library brought back to life through archives in this commit history. Things may be broken and not work.
fix incorrect calling of _dprint in child classes
Full Changelog: https://github.com/Boss-1s/key_multivalue_storage/compare/v1.1.0.20251007.4β¦v1.1.1.20251205
π¦ v1.1.0.20251007.4 β kms-v1.1.0/2025.10.07d
β Target Node Commit: 67cd7725
π Release Type: Minor Update
Caution
This is an older release of this library brought back to life through archives in this commit history. Things may be broken and not work.
Warning
These release notes are AI generated.
Release Notes: key_multivalue_storage.py
π Whatβs New
A big overhaul focusing on better output handling and adding some quality-of-life features. Mostly behind-the-scenes stuff, but it makes the code way more manageable.
β¨ New Stuff
1. _dprint() Method - The New Output King
- Added a custom print function that outputs to both console AND shell
- Basically replaces all those scattered
print()calls with one unified thing - Makes it super easy to control where your output goes without editing a million places
2. DeleteWarning Class
- A custom warning specifically for when youβre about to nuke all your data
- Lets you silence these warnings separately if you want
- Way less annoying than getting hit with generic warnings
3. __is_warning_category_ignored() Method
- Checks if a warning type is already being ignored
- Helps the code (specifically
Delete.all()) be smarter about whether to warn you or not - Basically the codeβs way of asking βhey, did you already mute this?β
4. Better Exports
- Added
Storage.Editto the public API (whoops, forgot that before) - Also threw in
DeleteWarningso people can actually use it
π§ What Got Changed
Output Refactor (The Big One)
Pretty much everywhere that had print() now uses _dprint() instead. Weβre talking:
- File storage operations
- Loading data
- Editing stuff
- Deleting things
All ~15+ locations now pipe through the new function. Cleaner, simpler, easier to debug.
Delete.all() Got Smarter
- Used to just throw a
UserWarningif you enabled warnings - Now uses the fancy new
DeleteWarningclass - Checks if youβve already muted these warnings and doesnβt nag if you have
- Less spam, same protection
- Note that if you ignore
DeleteWarning, this will cause allDelete.all()calls to act as ifwarnwas set toTrue.
Code Style Cleanup
- Fixed some wonky indentation in a couple places
- Nothing major, just unifying the type of indent
π‘ Why This Matters
- One place to control output - Donβt like console spam? Just mess with
_dprint() - Better warning control - Silence delete warnings without muting everything else
- Easier debugging - Can redirect all diagnostic output without touching a bunch of code
- Feels more professional - The dual output to shell + console is kinda neat
- Expanded API - More stuff is actually exported now
π€ Will This Break My Code?
Nope. Zero breaking changes. Everything works exactly like before, just with better guts under the hood. Your code doesnβt care how the sausage gets made.
π¦ Quick Stats
- New Methods: 2 (
_dprint(),__is_warning_category_ignored()) - New Classes: 1 (
DeleteWarning) - Modified Methods: ~12 (just swapped
print()for_dprint()) - Breaking Changes: 0
- Lines of Code: ~560 (basically same as before)
Full Changelog: https://github.com/Boss-1s/key_multivalue_storage/compare/v1.0.1.20251005β¦v1.1.0.20251007.4
π¦ v1.0.1.20251005 β kms-v1.0.0/2025.10.05
β Target Node Commit: 85f5df66
π Release Type: Major Patch
Caution
This is an older release of this library brought back to life through archives in this commit history. Things may be broken and not work.
Fixed potential problems:
- prettified imports
- prettified some docstrings and print statements
- removed duplicated code in
__str__
Full Changelog: https://github.com/Boss-1s/key_multivalue_storage/compare/v1.0.0.20250910β¦v1.0.1.20251005
π¦ v1.0.0.20250910 β kms-v1.0.0/2025.09.10
β Target Node Commit: 729a6ce4
π Release Type: Minor Patch
Caution
This is an older release of this library brought back to life through archives in this commit history. Things may be broken and not work.
Small docstring change
Full Changelog: https://github.com/Boss-1s/key_multivalue_storage/compare/v1.0.0.20250817β¦v1.0.0.20250910
π¦ v1.0.0.20250817 β kms-v1.0.0/2025.08.17
β Target Node Commit: f1571882
π Release Type: Initial Release
Caution
This is an older release of this library brought back to life through archives in this commit history. Things may be broken and not work.
Initial Release!
Overview
- Create a
Storageobject with the argumentskeyand**kwargs - Store the objectβs data inside a JSON file with
.store(file_path) - Load the object back with
Storage.Load.by_key(file_path, key) - Edit JSON data remotely with
Storage.Edit.<method>() - Delete all data in the JSON file with
Storage.Delete.all(file_path, warn=False)
from key_multivalue_storage import Storage
import uuid
db = Storage("my_top_level_key", mykey="myvalue")
db_uuid = Storage(uuid.uuid4(), mykey="myvalue") # Can also be uuid.UUID instance
db.store("example.json")
loaded_db = Storage.Load.by_key("example.json", "my_top_level_key")
assert str(loaded_db) == str(db) # True
Storage.Edit.key("example.json", "my_top_level_key", "this_is_a_new_key")
### So now, Storage("my_top_level_key", mykey="myvalue") is actually
### Storage("this_is_a_new_key", mykey="myvalue") IN THE FILE. The original instance is not affected.
Storage.Delete.all("example.json", warn=False) # By default, warn is True to prevent accidental deletion.
### This will raise an error since everything has been deleted
loaded_db = Storage.Load.by_key("example.json", "my_top_level_key")