From 942ddae1c555de1debfdac162b60045fcd103cf8 Mon Sep 17 00:00:00 2001 From: Kwak Byoung Min <67214970+doma17@users.noreply.github.com> Date: Wed, 29 Jul 2026 20:28:32 +0900 Subject: [PATCH] Add seekable() to mmap.mmap (#8405) * Allow mmap-backed readers to identify seek support mmap already supports seek() and tell(); expose seekable() to match CPython. Confidence: high Scope-risk: narrow Tested: test_mmap, stdlib_mmap snippet, clippy, prek, extra_tests Not-tested: full workspace test blocked by local rustpython-capi SIGSEGV Assisted-by: Codex:gpt-5.6-sol * Keep mmap regression test lint-clean CI ruff check removes the redundant blank line and treats the auto-fix as a failure. Constraint: CI runs prek with ruff check Confidence: high Scope-risk: narrow Tested: prek run --all-files; cargo run -- extra_tests/snippets/stdlib_mmap.py Assisted-by: Codex:gpt-5.6-sol * Keep mmap seekability method conventional The method is invoked at runtime through the Python wrapper, so const qualification provides no benefit. Constraint: Python methods execute at runtime Confidence: high Scope-risk: narrow Tested: prek run --all-files; cargo run -- extra_tests/snippets/stdlib_mmap.py Assisted-by: Codex:gpt-5.6-sol --- crates/stdlib/src/mmap.rs | 5 +++++ extra_tests/snippets/stdlib_mmap.py | 6 ++++++ 2 files changed, 11 insertions(+) create mode 100644 extra_tests/snippets/stdlib_mmap.py diff --git a/crates/stdlib/src/mmap.rs b/crates/stdlib/src/mmap.rs index 2a07cf7d8..312d35a4e 100644 --- a/crates/stdlib/src/mmap.rs +++ b/crates/stdlib/src/mmap.rs @@ -1141,6 +1141,11 @@ mod mmap { self.pos() } + #[pymethod] + fn seekable(&self) -> bool { + true + } + #[pymethod] fn write(&self, bytes: ArgBytesLike, vm: &VirtualMachine) -> PyResult { let pos = self.pos(); diff --git a/extra_tests/snippets/stdlib_mmap.py b/extra_tests/snippets/stdlib_mmap.py new file mode 100644 index 000000000..3a2b139a3 --- /dev/null +++ b/extra_tests/snippets/stdlib_mmap.py @@ -0,0 +1,6 @@ +import mmap + +mapped = mmap.mmap(-1, 1) +assert mapped.seekable() +mapped.close() +assert mapped.seekable()