Release history
WilliamSmithEdward/pyOpenVBA releases
All releases
8 shown
v3.0.0
Breaking risk
Breaking changes
- Renamed module `pyopenvba.access` to `pyopenvba.access_read`
- Renamed class `AccessFile` to `AccessReader`
Notable features
- Added EXPERIMENTAL read‑only `AccessReader` supporting Access .accdb/.mdb parsing with VBA module extraction
Full changelog
Added
AccessReader(EXPERIMENTAL) -- pure-Python read-only support for
Microsoft Access.accdb/.mdb(ACE / Jet 4) databases:AccessReader(path)parses the 4 KiB page-layout file header and
validates the ACE / Jet signature.iter_vba_modules()yields every embedded VBA module (VBAModule
dataclass withname,start_offset,attributes_text,source).
Modules are discovered by scanning for MS-OVBA stream signatures and
walking the LVAL page chains they live on -- no Access COM, no
MSysObjects parser required.vba_module_names()deduplicates shadow / undo copies and returns
the live module name list.read_vba_module(name)returns the user-visible source string with
\r\nline endings preserved; matches Access COM
CodeModule.Lines()output byte-for-byte (verified on a 1000-line
Module + 1000-line Class + 500-line Module live fixture against an
Access COM oracle).- Re-exported from
pyopenvbaasAccessReader. - Write path (re-compress + re-allocate LVAL pages) is not implemented;
Access support is read-only by design.
Changed
- BREAKING: Renamed
pyopenvba.accessmodule topyopenvba.access_read
and renamed theAccessFileclass toAccessReaderto make the
read-only access posture explicit. - Adopted strict static analysis: pyright
typeCheckingMode = "strict"
and a curated ruff lint configuration (E, F, W, B, UP, SIM, I, RUF, PIE, C4, PERF, N, TC, RET, TRY) now run clean acrosssrc/and
tests/with 0 errors.
Removed
- Pruned ~1800 lines of dead Access write-path / probe code and the
associated tests that exercised never-public APIs.