DriverTrac/venv/lib/python3.12/site-packages/polars/io/spreadsheet/_utils.py

53 lines
1.2 KiB
Python

from __future__ import annotations
from contextlib import contextmanager
from pathlib import Path
from typing import TYPE_CHECKING, Any, cast
if TYPE_CHECKING:
from collections.abc import Iterator
@contextmanager
def PortableTemporaryFile(
mode: str = "w+b",
*,
buffering: int = -1,
encoding: str | None = None,
newline: str | None = None,
suffix: str | None = None,
prefix: str | None = None,
dir: str | Path | None = None,
delete: bool = True,
errors: str | None = None,
) -> Iterator[Any]:
"""
Slightly more resilient version of the standard `NamedTemporaryFile`.
Plays better with Windows when using the 'delete' option.
"""
from tempfile import NamedTemporaryFile
params = cast(
Any,
{
"mode": mode,
"buffering": buffering,
"encoding": encoding,
"newline": newline,
"suffix": suffix,
"prefix": prefix,
"dir": dir,
"delete": False,
"errors": errors,
},
)
with NamedTemporaryFile(**params) as tmp:
try:
yield tmp
finally:
tmp.close()
if delete:
Path(tmp.name).unlink(missing_ok=True)