Skip to content

Commit d3a892f

Browse files
committed
TYP: Annotate fileholders
1 parent dfe09a8 commit d3a892f

File tree

2 files changed

+18
-11
lines changed

2 files changed

+18
-11
lines changed

nibabel/filebasedimages.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,11 @@
1616
from typing import Type
1717
from urllib import request
1818

19-
from .fileholders import FileHolder
19+
from .fileholders import FileHolder, FileMap
2020
from .filename_parser import TypesFilenamesError, splitext_addext, types_filenames
2121
from .openers import ImageOpener
2222

2323
FileSpec = ty.Union[str, os.PathLike]
24-
FileMap = ty.Mapping[str, FileHolder]
2524
FileSniff = ty.Tuple[bytes, str]
2625

2726
ImgT = ty.TypeVar('ImgT', bound='FileBasedImage')

nibabel/fileholders.py

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,10 @@
77
#
88
### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ##
99
"""Fileholder class"""
10+
from __future__ import annotations
1011

12+
import io
13+
import typing as ty
1114
from copy import copy
1215

1316
from .openers import ImageOpener
@@ -20,7 +23,12 @@ class FileHolderError(Exception):
2023
class FileHolder:
2124
"""class to contain filename, fileobj and file position"""
2225

23-
def __init__(self, filename=None, fileobj=None, pos=0):
26+
def __init__(
27+
self,
28+
filename: str | None = None,
29+
fileobj: io.IOBase | None = None,
30+
pos: int = 0,
31+
):
2432
"""Initialize FileHolder instance
2533
2634
Parameters
@@ -38,7 +46,7 @@ def __init__(self, filename=None, fileobj=None, pos=0):
3846
self.fileobj = fileobj
3947
self.pos = pos
4048

41-
def get_prepare_fileobj(self, *args, **kwargs):
49+
def get_prepare_fileobj(self, *args, **kwargs) -> ImageOpener:
4250
"""Return fileobj if present, or return fileobj from filename
4351
4452
Set position to that given in self.pos
@@ -70,7 +78,7 @@ def get_prepare_fileobj(self, *args, **kwargs):
7078
raise FileHolderError('No filename or fileobj present')
7179
return obj
7280

73-
def same_file_as(self, other):
81+
def same_file_as(self, other: FileHolder) -> bool:
7482
"""Test if `self` refers to same files / fileobj as `other`
7583
7684
Parameters
@@ -87,12 +95,15 @@ def same_file_as(self, other):
8795
return (self.filename == other.filename) and (self.fileobj == other.fileobj)
8896

8997
@property
90-
def file_like(self):
98+
def file_like(self) -> str | io.IOBase | None:
9199
"""Return ``self.fileobj`` if not None, otherwise ``self.filename``"""
92100
return self.fileobj if self.fileobj is not None else self.filename
93101

94102

95-
def copy_file_map(file_map):
103+
FileMap = ty.Mapping[str, FileHolder]
104+
105+
106+
def copy_file_map(file_map: FileMap) -> FileMap:
96107
r"""Copy mapping of fileholders given by `file_map`
97108
98109
Parameters
@@ -106,7 +117,4 @@ def copy_file_map(file_map):
106117
Copy of `file_map`, using shallow copy of ``FileHolder``\s
107118
108119
"""
109-
fm_copy = {}
110-
for key, fh in file_map.items():
111-
fm_copy[key] = copy(fh)
112-
return fm_copy
120+
return {key: copy(fh) for key, fh in file_map.items()}

0 commit comments

Comments
 (0)