Skip to content

Commit 49f6f6e

Browse files
committed
TYP: Annotate fileholders
1 parent 8c43ffe commit 49f6f6e

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,6 +7,9 @@
77
#
88
### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ##
99
"""Fileholder class"""
10+
from __future__ import annotations
11+
12+
import io
1013
from copy import copy
1114

1215
from .openers import ImageOpener
@@ -19,7 +22,12 @@ class FileHolderError(Exception):
1922
class FileHolder:
2023
"""class to contain filename, fileobj and file position"""
2124

22-
def __init__(self, filename=None, fileobj=None, pos=0):
25+
def __init__(
26+
self,
27+
filename: str | None = None,
28+
fileobj: io.IOBase | None = None,
29+
pos: int = 0,
30+
):
2331
"""Initialize FileHolder instance
2432
2533
Parameters
@@ -37,7 +45,7 @@ def __init__(self, filename=None, fileobj=None, pos=0):
3745
self.fileobj = fileobj
3846
self.pos = pos
3947

40-
def get_prepare_fileobj(self, *args, **kwargs):
48+
def get_prepare_fileobj(self, *args, **kwargs) -> ImageOpener:
4149
"""Return fileobj if present, or return fileobj from filename
4250
4351
Set position to that given in self.pos
@@ -69,7 +77,7 @@ def get_prepare_fileobj(self, *args, **kwargs):
6977
raise FileHolderError('No filename or fileobj present')
7078
return obj
7179

72-
def same_file_as(self, other):
80+
def same_file_as(self, other: FileHolder) -> bool:
7381
"""Test if `self` refers to same files / fileobj as `other`
7482
7583
Parameters
@@ -86,12 +94,15 @@ def same_file_as(self, other):
8694
return (self.filename == other.filename) and (self.fileobj == other.fileobj)
8795

8896
@property
89-
def file_like(self):
97+
def file_like(self) -> str | io.IOBase | None:
9098
"""Return ``self.fileobj`` if not None, otherwise ``self.filename``"""
9199
return self.fileobj if self.fileobj is not None else self.filename
92100

93101

94-
def copy_file_map(file_map):
102+
FileMap = dict[str, FileHolder]
103+
104+
105+
def copy_file_map(file_map: FileMap) -> FileMap:
95106
r"""Copy mapping of fileholders given by `file_map`
96107
97108
Parameters
@@ -105,7 +116,4 @@ def copy_file_map(file_map):
105116
Copy of `file_map`, using shallow copy of ``FileHolder``\s
106117
107118
"""
108-
fm_copy = {}
109-
for key, fh in file_map.items():
110-
fm_copy[key] = copy(fh)
111-
return fm_copy
119+
return {key: copy(fh) for key, fh in file_map.items()}

0 commit comments

Comments
 (0)