|
1 | 1 | from __future__ import annotations |
2 | 2 |
|
| 3 | +from codecs import _ReadableStream |
3 | 4 | import io |
4 | 5 | import warnings |
5 | 6 |
|
|
9 | 10 | from ctypes import c_uint16 |
10 | 11 | from ctypes import sizeof |
11 | 12 |
|
| 13 | +from typing import cast |
| 14 | + |
12 | 15 | from ._compat import override |
| 16 | +from ._compat import ReadableStream |
13 | 17 |
|
14 | 18 | from .struct import crc32c |
15 | 19 | from .struct import Ext4Struct |
@@ -208,11 +212,11 @@ def block_size(self): |
208 | 212 | return self.volume.block_size |
209 | 213 |
|
210 | 214 | @property |
211 | | - def i_size(self): |
| 215 | + def i_size(self) -> int: |
212 | 216 | return self.i_size_high << 32 | self.i_size_lo |
213 | 217 |
|
214 | 218 | @property |
215 | | - def i_file_acl(self): |
| 219 | + def i_file_acl(self) -> int: |
216 | 220 | return self.osd2.linux2.l_i_file_acl_high << 32 | self.i_file_acl_lo |
217 | 221 |
|
218 | 222 | @property |
@@ -303,24 +307,35 @@ def headers(self): |
303 | 307 | def indices(self): |
304 | 308 | return self.tree.indices |
305 | 309 |
|
306 | | - def _open(self, mode: str = "rb", encoding: None = None, newline: None = None): |
| 310 | + def _open( |
| 311 | + self, mode: str = "rb", encoding: None = None, newline: None = None |
| 312 | + ) -> ReadableStream: |
307 | 313 | if mode != "rb" or encoding is not None or newline is not None: |
308 | 314 | raise NotImplementedError() |
309 | 315 |
|
310 | 316 | if self.is_inline: |
311 | 317 | self.volume.seek(self.offset + Inode.i_block.offset) |
312 | | - data = self.volume.read(self.i_size) |
| 318 | + data = cast(bytes, self.volume.read(self.i_size)) |
313 | 319 | return io.BytesIO(data) |
314 | 320 |
|
315 | 321 | return BlockIO(self) |
316 | 322 |
|
317 | | - def open(self, mode="rb", encoding=None, newline=None): |
| 323 | + def open( |
| 324 | + self, |
| 325 | + mode: str = "rb", # pyright: ignore[reportUnusedParameter] |
| 326 | + encoding: None = None, # pyright: ignore[reportUnusedParameter] |
| 327 | + newline: None = None, # pyright: ignore[reportUnusedParameter] |
| 328 | + ) -> io.RawIOBase: |
318 | 329 | raise NotImplementedError() |
319 | 330 |
|
320 | 331 | @property |
321 | 332 | def xattrs(self): |
322 | | - inline_offset = self.offset + self.EXT2_GOOD_OLD_INODE_SIZE + self.i_extra_isize |
323 | | - inline_size = self.offset + self.superblock.s_inode_size - inline_offset |
| 333 | + inline_offset = cast( |
| 334 | + int, self.offset + self.EXT2_GOOD_OLD_INODE_SIZE + self.i_extra_isize |
| 335 | + ) |
| 336 | + inline_size = cast( |
| 337 | + int, self.offset + self.superblock.s_inode_size - inline_offset |
| 338 | + ) |
324 | 339 | if inline_size > sizeof(ExtendedAttributeIBodyHeader): |
325 | 340 | try: |
326 | 341 | header = ExtendedAttributeIBodyHeader(self, inline_offset, inline_size) |
@@ -364,7 +379,7 @@ class File(Inode): |
364 | 379 | @override |
365 | 380 | def open( |
366 | 381 | self, mode: str = "rb", encoding: None = None, newline: None = None |
367 | | - ) -> io.BytesIO | BlockIO: |
| 382 | + ) -> io.RawIOBase: |
368 | 383 | return self._open(mode, encoding, newline) |
369 | 384 |
|
370 | 385 |
|
|
0 commit comments