ob-dump-reader 0.0.0.dev0__tar.gz → 0.1.0a2__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.
- ob_dump_reader-0.1.0a2/.gitignore +7 -0
- ob_dump_reader-0.1.0a2/CHANGELOG.md +97 -0
- {ob_dump_reader-0.0.0.dev0/src/ob_dump_reader.egg-info → ob_dump_reader-0.1.0a2}/PKG-INFO +1 -1
- {ob_dump_reader-0.0.0.dev0 → ob_dump_reader-0.1.0a2}/pyproject.toml +1 -0
- {ob_dump_reader-0.0.0.dev0 → ob_dump_reader-0.1.0a2/src/ob_dump_reader.egg-info}/PKG-INFO +1 -1
- {ob_dump_reader-0.0.0.dev0 → ob_dump_reader-0.1.0a2}/src/ob_dump_reader.egg-info/SOURCES.txt +3 -0
- ob_dump_reader-0.1.0a2/src/ob_dump_reader.egg-info/scm_file_list.json +21 -0
- ob_dump_reader-0.1.0a2/src/ob_dump_reader.egg-info/scm_version.json +8 -0
- ob_dump_reader-0.0.0.dev0/.gitignore +0 -11
- {ob_dump_reader-0.0.0.dev0 → ob_dump_reader-0.1.0a2}/LICENSE +0 -0
- {ob_dump_reader-0.0.0.dev0 → ob_dump_reader-0.1.0a2}/README.md +0 -0
- {ob_dump_reader-0.0.0.dev0 → ob_dump_reader-0.1.0a2}/setup.cfg +0 -0
- {ob_dump_reader-0.0.0.dev0 → ob_dump_reader-0.1.0a2}/src/ob_dump_reader/__init__.py +0 -0
- {ob_dump_reader-0.0.0.dev0 → ob_dump_reader-0.1.0a2}/src/ob_dump_reader/__main__.py +0 -0
- {ob_dump_reader-0.0.0.dev0 → ob_dump_reader-0.1.0a2}/src/ob_dump_reader/__pycache__/__init__.cpython-314.pyc +0 -0
- {ob_dump_reader-0.0.0.dev0 → ob_dump_reader-0.1.0a2}/src/ob_dump_reader/__pycache__/__main__.cpython-314.pyc +0 -0
- {ob_dump_reader-0.0.0.dev0 → ob_dump_reader-0.1.0a2}/src/ob_dump_reader/_constants.py +0 -0
- {ob_dump_reader-0.0.0.dev0 → ob_dump_reader-0.1.0a2}/src/ob_dump_reader/aio.py +0 -0
- {ob_dump_reader-0.0.0.dev0 → ob_dump_reader-0.1.0a2}/src/ob_dump_reader/decode_helpers.py +0 -0
- {ob_dump_reader-0.0.0.dev0 → ob_dump_reader-0.1.0a2}/src/ob_dump_reader.egg-info/dependency_links.txt +0 -0
- {ob_dump_reader-0.0.0.dev0 → ob_dump_reader-0.1.0a2}/src/ob_dump_reader.egg-info/entry_points.txt +0 -0
- {ob_dump_reader-0.0.0.dev0 → ob_dump_reader-0.1.0a2}/src/ob_dump_reader.egg-info/requires.txt +0 -0
- {ob_dump_reader-0.0.0.dev0 → ob_dump_reader-0.1.0a2}/src/ob_dump_reader.egg-info/top_level.txt +0 -0
- {ob_dump_reader-0.0.0.dev0 → ob_dump_reader-0.1.0a2}/tests/_fixture.py +0 -0
- {ob_dump_reader-0.0.0.dev0 → ob_dump_reader-0.1.0a2}/tests/test_aio.py +0 -0
- {ob_dump_reader-0.0.0.dev0 → ob_dump_reader-0.1.0a2}/tests/test_decode_helpers.py +0 -0
- {ob_dump_reader-0.0.0.dev0 → ob_dump_reader-0.1.0a2}/tests/test_ob_dump_reader.py +0 -0
- {ob_dump_reader-0.0.0.dev0 → ob_dump_reader-0.1.0a2}/uv.lock +0 -0
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project will be documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
+
Generated from the repo root's `CHANGELOG.md` at publish time — see that
|
|
8
|
+
file if you're reading this in the published package and want the full
|
|
9
|
+
picture across the other packages in this repo too.
|
|
10
|
+
|
|
11
|
+
Version numbers are derived from git tags via `setuptools_scm`, not hand-bumped in this file.
|
|
12
|
+
|
|
13
|
+
## [0.1.0-alpha.2] - 2026-07-06
|
|
14
|
+
|
|
15
|
+
### Fixed
|
|
16
|
+
|
|
17
|
+
- **`decode_flex()` crashed on every real call** — assumed
|
|
18
|
+
`flatbuffers.flexbuffers.Ref` had a `.json` property; it doesn't (only a
|
|
19
|
+
debug `__repr__`), so `json.loads()` was fed something like
|
|
20
|
+
`"Ref(buf[21:], parent_width=1, byte_width=1, type_=9)"` and raised
|
|
21
|
+
immediately. Replaced with a proper recursive `Ref` → native-Python-object
|
|
22
|
+
converter (`Is*`/`As*` are properties, not methods — also wrong in the
|
|
23
|
+
original), matching the same map/vector/scalar/blob handling as `ob-dump`'s
|
|
24
|
+
own C++ `flexToJson` and the Dart package's `decodeFlex`. Covered by
|
|
25
|
+
`tests/test_decode_helpers.py` (a map root and a bare vector root, both
|
|
26
|
+
round-tripped through real `flatbuffers.flexbuffers.Dumps()` output).
|
|
27
|
+
- **`ob_dump_reader.aio` couldn't be imported at all** —
|
|
28
|
+
`from ob_dump_reader.decode_helpers import K_KEY_TYPE_DATA, ...` referenced
|
|
29
|
+
a name that has never existed in that module (`ImportError`), caught by
|
|
30
|
+
actually importing the module, not assumed.
|
|
31
|
+
- **`ob_dump_reader.aio` misused `lmdb.aio`'s actual API** even once the
|
|
32
|
+
import was fixed: `AsyncEnvironment(path, map_size=..., ...)` isn't how
|
|
33
|
+
it's constructed — `lmdb.aio.wrap()` wraps an already-open
|
|
34
|
+
`lmdb.Environment` instead (confirmed by reading `lmdb.aio`'s own
|
|
35
|
+
docstring and source, not guessed). Separately, `AsyncCursor` has no
|
|
36
|
+
`__aiter__`, so `async for key, value in cursor` was never going to work;
|
|
37
|
+
its `iternext()` also fully materializes every remaining entry into a list
|
|
38
|
+
in one executor call rather than streaming, which would have meant loading
|
|
39
|
+
the *entire rest of the database* into memory before the first callback
|
|
40
|
+
fires — replaced with an explicit `first()`/`next()`/`item()` step loop
|
|
41
|
+
instead, keeping this a genuine per-record callback. Verified against a
|
|
42
|
+
real fixture (`tests/test_aio.py`), not just read.
|
|
43
|
+
- **`read_objectbox_to_many_targets()` was a no-op stub** (sync and async) —
|
|
44
|
+
opened an environment and did nothing else, silently returning `None`
|
|
45
|
+
despite being part of the public API. Implemented for real: the same
|
|
46
|
+
12-byte relation-key format ([type=0x08][2 reserved bytes][(relation_id
|
|
47
|
+
<< 2) | direction][source_id u32 BE][target_id u32 BE]) `ob-dump`'s C++
|
|
48
|
+
core and the Dart package already use, via `Cursor.set_range()` positioned
|
|
49
|
+
at the relation/source-id prefix, walking forward while the prefix still
|
|
50
|
+
matches. Forward direction only (0) — direction 2 is an auto-maintained
|
|
51
|
+
reverse index for ObjectBox's own query engine, not needed for a
|
|
52
|
+
one-directional dump. Covered by `tests/test_ob_dump_reader.py` and
|
|
53
|
+
`tests/test_aio.py` (forward links returned, backward/other-relation
|
|
54
|
+
links ignored, empty list when the source object has no links).
|
|
55
|
+
|
|
56
|
+
### Changed
|
|
57
|
+
|
|
58
|
+
- `KEY_TYPE_DATA`/`KEY_TYPE_RELATION`/relation-direction constants moved to
|
|
59
|
+
a shared `_constants.py`, imported by both `__init__.py` and `aio.py` —
|
|
60
|
+
the two had already drifted out of sync once (see the `aio.py` import fix
|
|
61
|
+
above), so keeping one copy removes the way that happens again.
|
|
62
|
+
- Fixed a real typo: `RELATION_DIRECTION_FFORWARD` → `RELATION_DIRECTION_FORWARD`.
|
|
63
|
+
- Removed dead, commented-out "write transaction to initialize the root
|
|
64
|
+
handle" code — a leftover assumption from `dart_lmdb2`-style bindings
|
|
65
|
+
that turned out to be unnecessary once the actual read path was verified:
|
|
66
|
+
LMDB's MVCC design lets any number of readers run safely alongside one
|
|
67
|
+
concurrent writer once the environment itself is opened `readonly=True`
|
|
68
|
+
(same finding as `dart/`'s own entry above, reached independently for
|
|
69
|
+
the Dart package first).
|
|
70
|
+
- `__main__.py` no longer hardcodes a developer's personal local database
|
|
71
|
+
path — replaced with a real `argparse`-based CLI
|
|
72
|
+
(`python -m ob_dump_reader <objectbox_dir>` / the new `ob-dump-reader`
|
|
73
|
+
console script, see below).
|
|
74
|
+
- Dropped the `read_ob_records`/`read_ob_to_many_targets` short aliases —
|
|
75
|
+
undocumented duplicate names for `read_objectbox_records`/
|
|
76
|
+
`read_objectbox_to_many_targets` with no clear purpose; one canonical name
|
|
77
|
+
per function, matching the Dart/C++ packages.
|
|
78
|
+
|
|
79
|
+
### Added
|
|
80
|
+
|
|
81
|
+
- `tests/` — this package had no tests directory at all despite `pytest`
|
|
82
|
+
already being declared as a dev dependency and `testpaths = ["tests"]`
|
|
83
|
+
already configured. 15 tests across `test_ob_dump_reader.py`,
|
|
84
|
+
`test_aio.py`, and `test_decode_helpers.py`, using a shared
|
|
85
|
+
`tests/_fixture.py` LMDB-writing helper (mirrors `dart/test/test_fixture.dart`).
|
|
86
|
+
- `[project.scripts]` entry point: `ob-dump-reader = "ob_dump_reader.__main__:main"`.
|
|
87
|
+
|
|
88
|
+
### Removed
|
|
89
|
+
|
|
90
|
+
- Unused `protovalidate`/`pydantic` dev dependencies — not referenced
|
|
91
|
+
anywhere in `src/` or the new `tests/`; pulled in 16 transitive packages
|
|
92
|
+
for nothing.
|
|
93
|
+
- The blanket `__init__.py` exclusion from the `[tool.ruff]` config —
|
|
94
|
+
`__init__.py` here holds real logic (not just re-exports), so excluding
|
|
95
|
+
it from linting was hiding real issues (see the fixes above).
|
|
96
|
+
|
|
97
|
+
[0.1.0-alpha.2]: https://github.com/o-murphy/ob-dump/releases/tag/v0.1.0-alpha.2
|
{ob_dump_reader-0.0.0.dev0 → ob_dump_reader-0.1.0a2}/src/ob_dump_reader.egg-info/SOURCES.txt
RENAMED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
.gitignore
|
|
2
|
+
CHANGELOG.md
|
|
2
3
|
LICENSE
|
|
3
4
|
README.md
|
|
4
5
|
pyproject.toml
|
|
@@ -13,6 +14,8 @@ src/ob_dump_reader.egg-info/SOURCES.txt
|
|
|
13
14
|
src/ob_dump_reader.egg-info/dependency_links.txt
|
|
14
15
|
src/ob_dump_reader.egg-info/entry_points.txt
|
|
15
16
|
src/ob_dump_reader.egg-info/requires.txt
|
|
17
|
+
src/ob_dump_reader.egg-info/scm_file_list.json
|
|
18
|
+
src/ob_dump_reader.egg-info/scm_version.json
|
|
16
19
|
src/ob_dump_reader.egg-info/top_level.txt
|
|
17
20
|
src/ob_dump_reader/__pycache__/__init__.cpython-314.pyc
|
|
18
21
|
src/ob_dump_reader/__pycache__/__main__.cpython-314.pyc
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
{
|
|
2
|
+
"files": [
|
|
3
|
+
"README.md",
|
|
4
|
+
"uv.lock",
|
|
5
|
+
"LICENSE",
|
|
6
|
+
"pyproject.toml",
|
|
7
|
+
"CHANGELOG.md",
|
|
8
|
+
".gitignore",
|
|
9
|
+
"src/ob_dump_reader/__init__.py",
|
|
10
|
+
"src/ob_dump_reader/aio.py",
|
|
11
|
+
"src/ob_dump_reader/_constants.py",
|
|
12
|
+
"src/ob_dump_reader/decode_helpers.py",
|
|
13
|
+
"src/ob_dump_reader/__main__.py",
|
|
14
|
+
"src/ob_dump_reader/__pycache__/__main__.cpython-314.pyc",
|
|
15
|
+
"src/ob_dump_reader/__pycache__/__init__.cpython-314.pyc",
|
|
16
|
+
"tests/test_ob_dump_reader.py",
|
|
17
|
+
"tests/test_aio.py",
|
|
18
|
+
"tests/test_decode_helpers.py",
|
|
19
|
+
"tests/_fixture.py"
|
|
20
|
+
]
|
|
21
|
+
}
|
|
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
|
{ob_dump_reader-0.0.0.dev0 → ob_dump_reader-0.1.0a2}/src/ob_dump_reader.egg-info/entry_points.txt
RENAMED
|
File without changes
|
{ob_dump_reader-0.0.0.dev0 → ob_dump_reader-0.1.0a2}/src/ob_dump_reader.egg-info/requires.txt
RENAMED
|
File without changes
|
{ob_dump_reader-0.0.0.dev0 → ob_dump_reader-0.1.0a2}/src/ob_dump_reader.egg-info/top_level.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|