5252specifying the ``keep_file_open`` flag will result in a ``ValueError`` being
5353raised.
5454"""
55- KEEP_FILE_OPEN_DEFAULT = False
55+ KEEP_FILE_OPEN_DEFAULT = 'auto'
5656
5757
5858class ArrayProxy (object ):
@@ -186,10 +186,10 @@ def _should_keep_file_open(self, file_like, keep_file_open):
186186 The return value is derived from these rules:
187187
188188 - 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 .
193193
194194 Parameters
195195 ----------
@@ -203,23 +203,20 @@ def _should_keep_file_open(self, file_like, keep_file_open):
203203 -------
204204
205205 The value of ``keep_file_open`` that will be used by this
206- ``ArrayProxy``.
206+ ``ArrayProxy``, and passed through to ``ImageOpener`` instances .
207207 """
208208 if keep_file_open is None :
209209 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 ):
214211 raise ValueError ('keep_file_open should be one of {None, '
215212 '\' auto\' , True, False}' )
216-
217213 # file_like is a handle - keep_file_open is irrelevant
218214 if hasattr (file_like , 'read' ) and hasattr (file_like , 'seek' ):
219215 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
223220
224221 @property
225222 @deprecate_with_version ('ArrayProxy.header deprecated' , '2.2' , '3.0' )
@@ -263,12 +260,13 @@ def _get_fileobj(self):
263260 A newly created ``ImageOpener`` instance, or an existing one,
264261 which provides access to the file.
265262 """
266- if self ._keep_file_open :
263+ if bool ( self ._keep_file_open ) :
267264 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 )
269267 yield self ._opener
270268 else :
271- with ImageOpener (self .file_like , keep_open = False ) as opener :
269+ with ImageOpener (self .file_like ) as opener :
272270 yield opener
273271
274272 def get_unscaled (self ):
0 commit comments