Skip to content

Releases: nightmarewalker/D-MemFS

v0.4.1

22 Mar 20:07

Choose a tag to compare

This release focuses on documentation quality — no functional changes.

Documentation

  • Added docstrings to all public API classes and methods (MemoryFileSystem, MemoryFileHandle, AsyncMemoryFileSystem, AsyncMemoryFileHandle, MFSStats, MFSStatResult, MFSQuotaExceededError, MFSNodeLimitExceededError, MFSTextHandle, ArchiveAdapter and related)
  • Regenerated API reference (docs/api_md/index.md) — previously missing methods and classes are now fully documented
  • Added pydoc-markdown.yml for reproducible API reference generation with public-API-only filtering
  • Added design documents: spec_v15.md, DetailedDesignSpec_v3.md, DetailedDesignSpec_test_v3.md
  • README: added spec_v15 link, updated DetailedDesignSpec / DetailedDesignSpec_test links to v3

v0.4.0

21 Mar 10:41

Choose a tag to compare

v0.4.0 - 2026-03-21

This release adds pluggable archive extraction to D-MemFS. ZIP and TAR archives can now be extracted directly into the virtual filesystem using expand_archive() (atomic, all-or-nothing) or expand_archive_streaming() (low-memory, incremental). Custom archive formats are supported via the ArchiveAdapter base class.

Highlights

  • Added expand_archive() for atomic extraction via import_tree() with automatic rollback on failure
  • Added expand_archive_streaming() for low-memory streaming extraction with on_conflict="skip" for incremental updates
  • Added ArchiveAdapter base class with built-in ZipAdapter and TarAdapter (standard library only)
  • Added _sanitize_archive_path() for Zip Slip prevention — absolute paths, ../ traversal, and backslash paths are silently stripped
  • Added on_conflict parameter ("raise" / "overwrite" / "skip") for archive-internal duplicates and MFS existing file collisions
  • Re-exported ArchiveAdapter, expand_archive, expand_archive_streaming from dmemfs
  • Updated README, README_ja, TESTING, TESTING_ja, CHANGELOG, and examples documentation

Verification

  • Standard test run: 436 passed
  • Free-threaded test run: 436 passed
  • Free-threaded stress tests: 6 passed

Notes

  • expand_archive() buffers the entire archive in memory (~2× peak) but guarantees all-or-nothing atomicity
  • expand_archive_streaming() uses O(single-file) memory but does not roll back on failure
  • on_conflict="skip" is available only in expand_archive_streaming() for incremental extraction
  • Existing directory collisions always raise IsADirectoryError regardless of on_conflict setting

v0.3.0

08 Mar 20:25

Choose a tag to compare

v0.3.0

This release adds MemoryGuard, an optional physical-memory protection layer for D-MemFS. In addition to the existing logical quota, D-MemFS can now warn or fail early when configured quota or incoming writes exceed available system memory. The default remains memory_guard="none", so existing behavior stays backward compatible.

Highlights

  • Added memory_guard, memory_guard_action, and memory_guard_interval to MemoryFileSystem and AsyncMemoryFileSystem
  • Added internal physical-memory detection and MemoryGuard strategy modules
  • Integrated MemoryGuard into write, truncate, preallocate, import_tree, and copy_tree paths
  • Improved MemoryError messages with clearer context and recovery hints
  • Made chunk-overhead accounting deterministic across standard and free-threaded Python builds
  • Added free-threaded CI coverage and updated test/documentation assets

Verification

  • Standard test run: 369 passed
  • Free-threaded test run: 369 passed
  • Free-threaded stress tests: 6 passed

Notes

  • memory_guard="none" keeps legacy behavior
  • memory_guard="init" checks at filesystem initialization
  • memory_guard="per_write" checks before write-path allocations

v0.2.1

01 Mar 00:23

Choose a tag to compare

Fix relative links in READMEs for PyPI compatibility

v0.2.0

28 Feb 23:58

Choose a tag to compare

Initial release of D-MemFS — in-process virtual filesystem with hard quota for Python.