Atomic append fails to create a missing file
Valutazione
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Idoneità per principianti
- 70/100
Direzione di ricerca
Inizia da _write_file_atomic, dove la destinazione viene letta incondizionatamente quando append=True prima che venga creato il file temporaneo. Esegui la riproduzione indicata nell'issue con atomic=True e una directory padre e un file mancanti, quindi confrontala con il percorso atomic=False. Il lavoro è completato quando l'append atomico crea il file mancante, un secondo append conserva il contenuto precedente e i test esistenti continuano a passare.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Describe the bug
write_file(path, content, append=True, atomic=True) raises OSError: Invalid file path when the destination does not exist. The same call with atomic=False creates the file, consistent with append mode.
Reproduce
from pathlib import Path
from tempfile import TemporaryDirectory
import fsutil
with TemporaryDirectory() as directory:
path = str(Path(directory) / "new" / "file.txt")
fsutil.write_file(path, content="first", append=True, atomic=True)
Reproduced with Python 3.12.14 on Windows and python-fsutil 0.18.0 source at d3a77c552346dc72a081284a6fd017ecc1ba234f. No mocked filesystem or injected failure is required. This was found during a code review, rather than reported from a production application.
Expected behavior
Create the missing file, as non-atomic append does. A subsequent append should preserve its previous content.
Cause and scope
_write_file_atomic reads the destination unconditionally when append=True, before creating a temporary file. Reading a missing destination raises immediately.
This differs from #194: it does not concern errors after replacement or the Windows-specific FileNotFoundError cleanup handler. Those paths can remain unchanged.
AI assistance was used to investigate the source and prepare reproduction and tests. A focused fix is ready.
- Lingua principale
- Python
- Stelle
- 268
- Fork
- 19
- Merge medio
- 8g 13h
- PR unite (30g)
- 4
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Ha un modello di pull request
- Nessuna guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di fabiocaccamo/python-fsutil
-
Add `toml` files operation support.Forse di nuovo libera @fabiocaccamo l’ha presa 1321 giorni fa e non c’è nessuna pull request aperta. Apertaenhancement
fabiocaccamo/python-fsutil#42 · 1 assegnatario ·
Tutte le issue di fabiocaccamo/python-fsutil
Issue simili
-
customer-reported question
Difficoltà 2/5 1-3 ore Idoneità per principianti 62/100
Azure/azure-sdk-for-python#49548 · 1 commento · 1 reazione ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 88/100
btclib-org/btclib-wallet#409 ·
I maintainer di solito rispondono entro 1 giorno
-
Phase 2 PSA Capability & Career Profile
Difficoltà 2/5 1-3 ore Idoneità per principianti 62/100
bcgov/digital-journeys#2310 ·
-
bug good first issue
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
fastmachinelearning/hls4ml#1582 ·
I maintainer di solito rispondono entro 3 giorni
-
Sort modelsApertaenhancement good first issue
Difficoltà 2/5 1-3 ore Idoneità per principianti 62/100
I maintainer di solito rispondono entro 1 giorno