@@ -78,16 +78,18 @@ def open(filename, mode="rb", compresslevel=gzip_ng._COMPRESS_LEVEL_TRADEOFF,
78
78
def open_as_binary_stream (filename , open_mode ):
79
79
if isinstance (filename , (str , bytes )) or hasattr (filename , "__fspath__" ):
80
80
binary_file = builtins .open (filename , open_mode )
81
+ closefd = True
81
82
elif hasattr (filename , "read" ) or hasattr (filename , "write" ):
82
83
binary_file = filename
84
+ closefd = False
83
85
else :
84
86
raise TypeError ("filename must be a str or bytes object, or a file" )
85
- return binary_file
87
+ return binary_file , closefd
86
88
87
89
88
90
class _ThreadedGzipReader (io .RawIOBase ):
89
91
def __init__ (self , filename , queue_size = 2 , block_size = 1024 * 1024 ):
90
- self .raw = open_as_binary_stream (filename , "rb" )
92
+ self .raw , self . closefd = open_as_binary_stream (filename , "rb" )
91
93
self .fileobj = zlib_ng ._GzipReader (self .raw , buffersize = 8 * block_size )
92
94
self .pos = 0
93
95
self .read_file = False
@@ -155,7 +157,8 @@ def close(self) -> None:
155
157
self .running = False
156
158
self .worker .join ()
157
159
self .fileobj .close ()
158
- self .raw .close ()
160
+ if self .closefd :
161
+ self .raw .close ()
159
162
self ._closed = True
160
163
161
164
@property
@@ -246,7 +249,7 @@ def __init__(self,
246
249
self ._crc = 0
247
250
self .running = False
248
251
self ._size = 0
249
- self .raw = open_as_binary_stream (filename , mode )
252
+ self .raw , self . closefd = open_as_binary_stream (filename , mode )
250
253
self ._closed = False
251
254
self ._write_gzip_header ()
252
255
self .start ()
@@ -334,7 +337,8 @@ def close(self) -> None:
334
337
trailer = struct .pack ("<II" , self ._crc , self ._size & 0xFFFFFFFF )
335
338
self .raw .write (trailer )
336
339
self .raw .flush ()
337
- self .raw .close ()
340
+ if self .closefd :
341
+ self .raw .close ()
338
342
self ._closed = True
339
343
340
344
@property
0 commit comments