mirror of
https://github.com/Textualize/rich.git
synced 2025-07-08 05:05:03 +00:00
methof ans tests
This commit is contained in:
parent
0e48776fb2
commit
090523e734
2 changed files with 49 additions and 0 deletions
24
rich/_fileno.py
Normal file
24
rich/_fileno.py
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
|
from typing import IO, Callable
|
||||||
|
|
||||||
|
|
||||||
|
def get_fileno(file_like: IO[str]) -> int | None:
|
||||||
|
"""Get fileno() from a file, accounting for poorly implemented file-like objects.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
file_like (IO): A file-like object.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
int | None: The result of fileno if available, or None if operation failed.
|
||||||
|
"""
|
||||||
|
fileno: Callable[[], int] | None = getattr(file_like, "fileno", None)
|
||||||
|
if fileno is not None:
|
||||||
|
try:
|
||||||
|
return fileno()
|
||||||
|
except Exception:
|
||||||
|
# `fileno` is documented as potentially raising a OSError
|
||||||
|
# Alas, from the issues, there are so many poorly implemented file-like objects,
|
||||||
|
# that `fileno()` can raise just about anything.
|
||||||
|
return None
|
||||||
|
return None
|
25
tests/test_getfileno.py
Normal file
25
tests/test_getfileno.py
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
from rich._fileno import get_fileno
|
||||||
|
|
||||||
|
|
||||||
|
def test_get_fileno():
|
||||||
|
class FileLike:
|
||||||
|
def fileno(self) -> int:
|
||||||
|
return 123
|
||||||
|
|
||||||
|
assert get_fileno(FileLike()) == 123
|
||||||
|
|
||||||
|
|
||||||
|
def test_get_fileno_missing():
|
||||||
|
class FileLike:
|
||||||
|
pass
|
||||||
|
|
||||||
|
assert get_fileno(FileLike()) is None
|
||||||
|
|
||||||
|
|
||||||
|
def test_get_fileno_broken():
|
||||||
|
class FileLike:
|
||||||
|
def fileno(self) -> int:
|
||||||
|
1 / 0
|
||||||
|
return 123
|
||||||
|
|
||||||
|
assert get_fileno(FileLike()) is None
|
Loading…
Add table
Add a link
Reference in a new issue