Skip to content

Commit 2ef6468

Browse files
committed
refactor(fileno)!: raise ValueError if connection not open
This is the same behavior as other Python I/O stream's `fileno()` method. BREAKING CHANGE: ValueError instead of -1 if the SPI device connection is not open.
1 parent 76fb063 commit 2ef6468

File tree

2 files changed

+54
-38
lines changed

2 files changed

+54
-38
lines changed

spidev/_cspi.pyi

Lines changed: 40 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -5,44 +5,46 @@
55
from typing import Any, Sequence, List, Tuple, Union
66

77
class SpiDev:
8-
def __init__(self, bus: int | None = ..., client: int | None = ...) -> None: ...
9-
def open(self, bus: int, device: int) -> None: ...
10-
def open_path(self, path: str) -> None: ...
11-
def close(self) -> None: ...
12-
def fileno(self) -> int: ...
13-
def readbytes(self, length: int) -> List[int]: ...
14-
def writebytes(self, values: Sequence[int]) -> None: ...
15-
def writebytes2(self, values: Union[Sequence[int], bytes, bytearray, memoryview]) -> None: ...
16-
def xfer(
17-
self,
18-
values: Sequence[int],
19-
speed_hz: int | None = ...,
20-
delay_usecs: int | None = ...,
21-
bits_per_word: int | None = ...
22-
) -> List[int]: ...
23-
def xfer2(
24-
self,
25-
values: Sequence[int],
26-
speed_hz: int | None = ...,
27-
delay_usecs: int | None = ...,
28-
bits_per_word: int | None = ...
29-
) -> List[int]: ...
30-
def xfer3(
31-
self,
32-
values: Sequence[int],
33-
speed_hz: int | None = ...,
34-
delay_usecs: int | None = ...,
35-
bits_per_word: int | None = ...
36-
) -> Tuple[int, ...]: ...
8+
def __init__(self, bus: int | None = ..., client: int | None = ...) -> None: ...
9+
def open(self, bus: int, device: int) -> None: ...
10+
def open_path(self, path: str) -> None: ...
11+
def close(self) -> None: ...
12+
def fileno(self) -> int: ...
13+
def readbytes(self, length: int) -> List[int]: ...
14+
def writebytes(self, values: Sequence[int]) -> None: ...
15+
def writebytes2(
16+
self, values: Union[Sequence[int], bytes, bytearray, memoryview]
17+
) -> None: ...
18+
def xfer(
19+
self,
20+
values: Sequence[int],
21+
speed_hz: int | None = ...,
22+
delay_usecs: int | None = ...,
23+
bits_per_word: int | None = ...,
24+
) -> List[int]: ...
25+
def xfer2(
26+
self,
27+
values: Sequence[int],
28+
speed_hz: int | None = ...,
29+
delay_usecs: int | None = ...,
30+
bits_per_word: int | None = ...,
31+
) -> List[int]: ...
32+
def xfer3(
33+
self,
34+
values: Sequence[int],
35+
speed_hz: int | None = ...,
36+
delay_usecs: int | None = ...,
37+
bits_per_word: int | None = ...,
38+
) -> Tuple[int, ...]: ...
3739

38-
mode: int
39-
cshigh: bool
40-
threewire: bool
41-
lsbfirst: bool
42-
loop: bool
43-
no_cs: bool
44-
bits_per_word: int
45-
max_speed_hz: int
46-
read0: bool
40+
mode: int
41+
cshigh: bool
42+
threewire: bool
43+
lsbfirst: bool
44+
loop: bool
45+
no_cs: bool
46+
bits_per_word: int
47+
max_speed_hz: int
48+
read0: bool
4749

4850
__version__: str

spidev/_spi.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,20 @@ def __init__(self, bus: int | None, client: int | None, device: int | None = Non
1111
self.device = device
1212
super().__init__(bus, client)
1313

14+
def fileno(self) -> int:
15+
"""Return the file descriptor if it exists.
16+
17+
Returns:
18+
int: File descriptor number.
19+
20+
Raises:
21+
ValueError: if the connection is not open.
22+
"""
23+
fd = super().fileno()
24+
if fd < 0:
25+
raise ValueError("I/O operation on closed file")
26+
return fd
27+
1428
def __enter__(self) -> Self:
1529
"""
1630
Warning: The `bus` and `device` attributes have to be set to open the

0 commit comments

Comments
 (0)