@@ -845,6 +845,11 @@ def fileno(self) -> int:
845
845
846
846
def close (self ) -> None :
847
847
"""Close the file."""
848
+ self .close_fd (self .filedes )
849
+
850
+ def close_fd (self , fd : Optional [int ]) -> None :
851
+ """Close the file for the given file descriptor."""
852
+
848
853
# ignore closing a closed file
849
854
if not self ._is_open ():
850
855
return
@@ -864,11 +869,11 @@ def close(self) -> None:
864
869
if self ._filesystem .is_windows_fs and self ._changed :
865
870
self .file_object .st_mtime = helpers .now ()
866
871
867
- assert self . filedes is not None
872
+ assert fd is not None
868
873
if self ._closefd :
869
- self ._filesystem .close_open_file (self . filedes )
874
+ self ._filesystem .close_open_file (fd )
870
875
else :
871
- open_files = self ._filesystem .open_files [self . filedes ]
876
+ open_files = self ._filesystem .open_files [fd ]
872
877
assert open_files is not None
873
878
open_files .remove (self )
874
879
if self .delete_on_close :
@@ -1256,6 +1261,9 @@ def read(self, n: int = -1) -> bytes:
1256
1261
def close (self ) -> None :
1257
1262
"""We do not support closing standard streams."""
1258
1263
1264
+ def close_fd (self , fd : Optional [int ]) -> None :
1265
+ """We do not support closing standard streams."""
1266
+
1259
1267
def is_stream (self ) -> bool :
1260
1268
return True
1261
1269
@@ -1287,8 +1295,12 @@ def fileno(self) -> int:
1287
1295
1288
1296
def close (self ) -> None :
1289
1297
"""Close the directory."""
1290
- assert self .filedes is not None
1291
- self ._filesystem .close_open_file (self .filedes )
1298
+ self .close_fd (self .filedes )
1299
+
1300
+ def close_fd (self , fd : Optional [int ]) -> None :
1301
+ """Close the directory."""
1302
+ assert fd is not None
1303
+ self ._filesystem .close_open_file (fd )
1292
1304
1293
1305
1294
1306
class FakePipeWrapper :
@@ -1351,8 +1363,12 @@ def write(self, contents: bytes) -> int:
1351
1363
1352
1364
def close (self ) -> None :
1353
1365
"""Close the pipe descriptor."""
1354
- assert self .filedes is not None
1355
- open_files = self ._filesystem .open_files [self .filedes ]
1366
+ self .close_fd (self .filedes )
1367
+
1368
+ def close_fd (self , fd : Optional [int ]) -> None :
1369
+ """Close the pipe descriptor with the given file descriptor."""
1370
+ assert fd is not None
1371
+ open_files = self ._filesystem .open_files [fd ]
1356
1372
assert open_files is not None
1357
1373
open_files .remove (self )
1358
1374
if self .real_file :
0 commit comments