- Lower
requires-pythonto>=3.8; addtyping_extensionsruntime dependency - Add
from __future__ import annotationstoio.py,helpers.py, andentry.py - Switch
from typing import Selftofrom typing_extensions import Selfinio.py - Use
typing.Dictas base class inDirectory(replacesdict[int, Entry], which is not subscriptable at runtime on Python 3.8) - Expand CI matrix to Python 3.8, 3.10, 3.12, 3.13; split lint and test jobs
- Add
tox.iniandmake toxtarget for local multi-version testing
- Fix off-by-one in
Entry.seek()at exact sector boundaries (<→<=) - Remove
cached_propertyre-export fromcfb.helpers; usefunctools.cached_propertydirectly - Drop
from __future__ import annotationsfromhelpers.py,entry.py, andio.py - Modernise test suite: centralise fixtures in
conftest.py, split test files by topic, drop class-based grouping, add@pytest.mark.parametrizefor sibling-ID cases
- Fix
from_filetimecrashing on out-of-range FILETIME values (pre-1970 dates, garbage timestamps); usetimedeltaarithmetic instead ofdatetime.fromtimestamp from_filetimenow returnsNonefor zero ("not set") and unrepresentable values
- Drop Python 2 support; require Python ≥ 3.12
- Remove
sixdependency - Replace
setup.pywithpyproject.toml - Add
py.typedmarker (PEP 561) - Add
pathlib.Pathsupport inCfbIO - Add context-manager support (
with CfbIO(...) as doc:) - Migrate from
noseteststopytest - Add
black,ruff, andmypyconfiguration - Add GitHub Actions CI (replaces Travis CI)
- Add type annotations throughout
- Move class definitions out of
__init__.pyfiles - Use relative imports throughout the package
- Replace hand-rolled
cacheddescriptor withfunctools.cached_property - Add
pre-commitconfiguration - Add Makefile for common development tasks
- Wheel support
- Python 3 compatibility
- Code documented
- First public release