52
52
specifying the ``keep_file_open`` flag will result in a ``ValueError`` being
53
53
raised.
54
54
"""
55
- KEEP_FILE_OPEN_DEFAULT = False
55
+ KEEP_FILE_OPEN_DEFAULT = 'auto'
56
56
57
57
58
58
class ArrayProxy (object ):
@@ -186,10 +186,10 @@ def _should_keep_file_open(self, file_like, keep_file_open):
186
186
The return value is derived from these rules:
187
187
188
188
- If ``file_like`` is a file(-like) object, ``False`` is returned.
189
- Otherwise, ``file_like`` is assumed to be a file name.
190
- - if ``file_like `` ends with ``'gz' ``, and the ``indexed_gzip``
191
- library is available, ``True `` is returned.
192
- - Otherwise, ``False `` is returned.
189
+ Otherwise, ``file_like`` is assumed to be a file name
190
+ - If ``keep_file_open `` is ``auto ``, and ``indexed_gzip`` is
191
+ not available, ``False `` is returned.
192
+ - Otherwise, the value of ``keep_file_open `` is returned unchanged .
193
193
194
194
Parameters
195
195
----------
@@ -203,23 +203,20 @@ def _should_keep_file_open(self, file_like, keep_file_open):
203
203
-------
204
204
205
205
The value of ``keep_file_open`` that will be used by this
206
- ``ArrayProxy``.
206
+ ``ArrayProxy``, and passed through to ``ImageOpener`` instances .
207
207
"""
208
208
if keep_file_open is None :
209
209
keep_file_open = KEEP_FILE_OPEN_DEFAULT
210
- # if keep_file_open is True/False, we do what the user wants us to do
211
- if isinstance (keep_file_open , bool ):
212
- return keep_file_open
213
- if keep_file_open != 'auto' :
210
+ if keep_file_open not in ('auto' , True , False ):
214
211
raise ValueError ('keep_file_open should be one of {None, '
215
212
'\' auto\' , True, False}' )
216
-
217
213
# file_like is a handle - keep_file_open is irrelevant
218
214
if hasattr (file_like , 'read' ) and hasattr (file_like , 'seek' ):
219
215
return False
220
- # Otherwise, if file_like is gzipped, and we have_indexed_gzip, we set
221
- # keep_file_open to True, else we set it to False
222
- return HAVE_INDEXED_GZIP and file_like .endswith ('gz' )
216
+ # don't have indexed_gzip - auto -> False
217
+ if keep_file_open == 'auto' and not HAVE_INDEXED_GZIP :
218
+ return False
219
+ return keep_file_open
223
220
224
221
@property
225
222
@deprecate_with_version ('ArrayProxy.header deprecated' , '2.2' , '3.0' )
@@ -263,12 +260,13 @@ def _get_fileobj(self):
263
260
A newly created ``ImageOpener`` instance, or an existing one,
264
261
which provides access to the file.
265
262
"""
266
- if self ._keep_file_open :
263
+ if bool ( self ._keep_file_open ) :
267
264
if not hasattr (self , '_opener' ):
268
- self ._opener = ImageOpener (self .file_like , keep_open = True )
265
+ self ._opener = ImageOpener (
266
+ self .file_like , keep_open = self ._keep_file_open )
269
267
yield self ._opener
270
268
else :
271
- with ImageOpener (self .file_like , keep_open = False ) as opener :
269
+ with ImageOpener (self .file_like ) as opener :
272
270
yield opener
273
271
274
272
def get_unscaled (self ):
0 commit comments