Skip to content

Commit 7410896

Browse files
author
Ben Cipollini
committed
Move decorator to ImageOpener, use ImageOpener.
1 parent 2f851a2 commit 7410896

File tree

12 files changed

+35
-31
lines changed

12 files changed

+35
-31
lines changed

bin/nib-nifti-dx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ def main():
2525
(opts, files) = parser.parse_args()
2626

2727
for fname in files:
28-
with nib.openers.Opener(fname) as fobj:
28+
with nib.openers.ImageOpener(fname) as fobj:
2929
hdr = fobj.read(nib.nifti1.header_dtype.itemsize)
3030
result = nib.Nifti1Header.diagnose_binaryblock(hdr)
3131
if len(result):

nibabel/arrayproxy.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
from .volumeutils import array_from_file, apply_read_scaling
3131
from .fileslice import fileslice
3232
from .keywordonly import kw_only_meth
33-
from .openers import Opener
33+
from .openers import ImageOpener
3434

3535

3636
class ArrayProxy(object):
@@ -131,7 +131,7 @@ def get_unscaled(self):
131131
132132
This is an optional part of the proxy API
133133
'''
134-
with Opener(self.file_like) as fileobj:
134+
with ImageOpener(self.file_like) as fileobj:
135135
raw_data = array_from_file(self._shape,
136136
self._dtype,
137137
fileobj,
@@ -146,7 +146,7 @@ def __array__(self):
146146
return apply_read_scaling(raw_data, self._slope, self._inter)
147147

148148
def __getitem__(self, slicer):
149-
with Opener(self.file_like) as fileobj:
149+
with ImageOpener(self.file_like) as fileobj:
150150
raw_data = fileslice(fileobj,
151151
slicer,
152152
self._shape,

nibabel/benchmarks/bench_fileslice.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
import numpy as np
2020

2121
from io import BytesIO
22-
from ..openers import Opener
22+
from ..openers import ImageOpener
2323
from ..fileslice import fileslice
2424
from ..rstutils import rst_table
2525
from ..tmpdirs import InTemporaryDirectory
@@ -47,10 +47,10 @@ def run_slices(file_like, repeat=3, offset=0, order='F'):
4747
n_dim = len(SHAPE)
4848
n_slicers = len(_slices_for_len(1))
4949
times_arr = np.zeros((n_dim, n_slicers))
50-
with Opener(file_like, 'wb') as fobj:
50+
with ImageOpener(file_like, 'wb') as fobj:
5151
fobj.write(b'\0' * offset)
5252
fobj.write(arr.tostring(order=order))
53-
with Opener(file_like, 'rb') as fobj:
53+
with ImageOpener(file_like, 'rb') as fobj:
5454
for i, L in enumerate(SHAPE):
5555
for j, slicer in enumerate(_slices_for_len(L)):
5656
sliceobj = [slice(None)] * n_dim

nibabel/fileholders.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010

1111
from copy import copy
1212

13-
from .openers import Opener
13+
from .openers import ImageOpener
1414

1515

1616
class FileHolderError(Exception):
@@ -63,10 +63,10 @@ def get_prepare_fileobj(self, *args, **kwargs):
6363
``self.pos``
6464
'''
6565
if self.fileobj is not None:
66-
obj = Opener(self.fileobj) # for context manager
66+
obj = ImageOpener(self.fileobj) # for context manager
6767
obj.seek(self.pos)
6868
elif self.filename is not None:
69-
obj = Opener(self.filename, *args, **kwargs)
69+
obj = ImageOpener(self.filename, *args, **kwargs)
7070
if self.pos != 0:
7171
obj.seek(self.pos)
7272
else:

nibabel/loadsave.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
import numpy as np
1313

1414
from .filename_parser import types_filenames, splitext_addext
15-
from .openers import Opener
15+
from .openers import ImageOpener
1616
from .analyze import AnalyzeImage
1717
from .spm2analyze import Spm2AnalyzeImage
1818
from .nifti1 import Nifti1Image, Nifti1Pair, header_dtype as ni1_hdr_dtype
@@ -68,18 +68,18 @@ def guessed_image_type(filename):
6868
elif lext == '.mnc':
6969
# Look for HDF5 signature for MINC2
7070
# https://www.hdfgroup.org/HDF5/doc/H5.format.html
71-
with Opener(filename) as fobj:
71+
with ImageOpener(filename) as fobj:
7272
signature = fobj.read(4)
7373
klass = Minc2Image if signature == b'\211HDF' else Minc1Image
7474
elif lext == '.nii':
75-
with Opener(filename) as fobj:
75+
with ImageOpener(filename) as fobj:
7676
binaryblock = fobj.read(348)
7777
ft = which_analyze_type(binaryblock)
7878
klass = Nifti2Image if ft == 'nifti2' else Nifti1Image
7979
else: # might be nifti 1 or 2 pair or analyze of some sort
8080
files_types = (('image', '.img'), ('header', '.hdr'))
8181
filenames = types_filenames(filename, files_types)
82-
with Opener(filenames['header']) as fobj:
82+
with ImageOpener(filenames['header']) as fobj:
8383
binaryblock = fobj.read(348)
8484
ft = which_analyze_type(binaryblock)
8585
if ft == 'nifti2':
@@ -208,7 +208,7 @@ def read_img_data(img, prefer='scaled'):
208208
hdr.set_data_offset(dao.offset)
209209
if default_scaling and (dao.slope, dao.inter) != (1, 0):
210210
hdr.set_slope_inter(dao.slope, dao.inter)
211-
with Opener(img_file_like) as fileobj:
211+
with ImageOpener(img_file_like) as fileobj:
212212
if prefer == 'scaled':
213213
return hdr.data_from_fileobj(fileobj)
214214
return hdr.raw_data_from_fileobj(fileobj)

nibabel/nicom/dicomwrappers.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818

1919
from . import csareader as csar
2020
from .dwiparams import B2q, nearest_pos_semi_def, q2bg
21-
from ..openers import Opener
21+
from ..openers import ImageOpener
2222
from ..onetime import setattr_on_read as one_time
2323

2424

@@ -51,7 +51,7 @@ def wrapper_from_file(file_like, *args, **kwargs):
5151
"""
5252
import dicom
5353

54-
with Opener(file_like) as fobj:
54+
with ImageOpener(file_like) as fobj:
5555
dcm_data = dicom.read_file(fobj, *args, **kwargs)
5656
return wrapper_from_data(dcm_data)
5757

nibabel/openers.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,10 @@ def __enter__(self):
147147
def __exit__(self, exc_type, exc_val, exc_tb):
148148
self.close_if_mine()
149149

150+
151+
class ImageOpener(Opener):
152+
""" Opener-type class passed to image classes to collect compressed extensions
153+
"""
150154
@classmethod
151155
def register_extension(opener_klass, ext, func):
152156
"""Decorator"""

nibabel/parrec.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@
103103
from .affines import from_matvec, dot_reduce, apply_affine
104104
from .nifti1 import unit_codes
105105
from .fileslice import fileslice, strided_scalar
106-
from .openers import Opener
106+
from .openers import ImageOpener
107107

108108
# PSL to RAS affine
109109
PSL_TO_RAS = np.array([[0, 0, -1, 0], # L -> R
@@ -582,13 +582,13 @@ def is_proxy(self):
582582
return True
583583

584584
def get_unscaled(self):
585-
with Opener(self.file_like) as fileobj:
585+
with ImageOpener(self.file_like) as fileobj:
586586
return _data_from_rec(fileobj, self._rec_shape, self._dtype,
587587
self._slice_indices, self._shape,
588588
mmap=self._mmap)
589589

590590
def __array__(self):
591-
with Opener(self.file_like) as fileobj:
591+
with ImageOpener(self.file_like) as fileobj:
592592
return _data_from_rec(fileobj,
593593
self._rec_shape,
594594
self._dtype,
@@ -604,7 +604,7 @@ def __getitem__(self, slicer):
604604
return np.asanyarray(self)[slicer]
605605
# Slices all sequential from zero, can use fileslice
606606
# This gives more efficient volume by volume loading, for example
607-
with Opener(self.file_like) as fileobj:
607+
with ImageOpener(self.file_like) as fileobj:
608608
raw_data = fileslice(fileobj, slicer, self._shape, self._dtype, 0,
609609
'F')
610610
# Broadcast scaling to shape of original data

nibabel/tests/test_helpers.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
import numpy as np
66

7-
from ..openers import Opener
7+
from ..openers import ImageOpener
88
from ..tmpdirs import InTemporaryDirectory
99
from ..optpkg import optional_package
1010
_, have_scipy, _ = optional_package('scipy.io')
@@ -49,7 +49,7 @@ def bz2_mio_error():
4949
import scipy.io
5050

5151
with InTemporaryDirectory():
52-
with Opener('test.mat.bz2', 'wb') as fobj:
52+
with ImageOpener('test.mat.bz2', 'wb') as fobj:
5353
try:
5454
scipy.io.savemat(fobj, {'a': 1}, format='4')
5555
except ValueError:

nibabel/tests/test_openers.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717

1818
from ..tmpdirs import InTemporaryDirectory
1919

20-
from ..openers import Opener
20+
from ..openers import Opener, ImageOpener
2121

2222
from nose.tools import (assert_true, assert_false, assert_equal,
2323
assert_not_equal, assert_raises)
@@ -84,7 +84,7 @@ def test_Opener_various():
8484
# Just check there is a fileno
8585
assert_not_equal(fobj.fileno(), 0)
8686

87-
def test_OpenerAgain():
87+
def test_ImageOpener():
8888
# Test that ImageOpener does add '.mgz' as gzipped file type
8989
with InTemporaryDirectory():
9090
with ImageOpener('test.gz', 'w') as fobj:

0 commit comments

Comments
 (0)