]> granicus.if.org Git - python/commitdiff
Issue #13815: Resurrect the ExFileObject class.
authorLars Gustäbel <lars@gustaebel.de>
Mon, 14 May 2012 11:18:16 +0000 (13:18 +0200)
committerLars Gustäbel <lars@gustaebel.de>
Mon, 14 May 2012 11:18:16 +0000 (13:18 +0200)
After a discussion in the tracker, the decision was made to keep the
ExFileObject class after all as a subclass of io.BufferedReader instead of
removing it completely.

Lib/tarfile.py
Misc/NEWS

index e273787695e2cf8f037147b2ee3a56e15e16c2e9..8dd4c0f82dbc6a7dc603efbabf096970b823e00d 100644 (file)
@@ -758,6 +758,13 @@ class _FileInFile(object):
         self.closed = True
 #class _FileInFile
 
+class ExFileObject(io.BufferedReader):
+
+    def __init__(self, tarfile, tarinfo):
+        fileobj = _FileInFile(tarfile.fileobj, tarinfo.offset_data,
+                tarinfo.size, tarinfo.sparse)
+        super().__init__(fileobj)
+#class ExFileObject
 
 #------------------
 # Exported Classes
@@ -1443,8 +1450,7 @@ class TarFile(object):
 
     tarinfo = TarInfo           # The default TarInfo class to use.
 
-    fileobject = None           # The file-object for extractfile() or
-                                # io.BufferedReader if None.
+    fileobject = ExFileObject   # The file-object for extractfile().
 
     def __init__(self, name=None, mode="r", fileobj=None, format=None,
             tarinfo=None, dereference=None, ignore_zeros=None, encoding=None,
@@ -2081,12 +2087,7 @@ class TarFile(object):
 
         if tarinfo.isreg() or tarinfo.type not in SUPPORTED_TYPES:
             # Members with unknown types are treated as regular files.
-            if self.fileobject is None:
-                fileobj = _FileInFile(self.fileobj, tarinfo.offset_data, tarinfo.size, tarinfo.sparse)
-                return io.BufferedReader(fileobj)
-            else:
-                # Keep the traditional pre-3.3 API intact.
-                return self.fileobject(self, tarinfo)
+            return self.fileobject(self, tarinfo)
 
         elif tarinfo.islnk() or tarinfo.issym():
             if isinstance(self.fileobj, _Stream):
index f27dab53def84a93ca3946c90f845a11810e1b81..3b8e3cacc19adefad99a72433933b7d72de1d177 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -26,6 +26,8 @@ Core and Builtins
 Library
 -------
 
+- Issue #13815: TarFile.extractfile() now returns io.BufferedReader objects.
+
 - Issue #14532: Add a secure_compare() helper to the hmac module, to mitigate
   timing attacks. Patch by Jon Oberheide. 
 
@@ -181,8 +183,6 @@ Core and Builtins
 Library
 -------
 
-- Issue #13815: TarFile.extractfile() now returns io.BufferedReader objects.
-
 - Issue #14768: os.path.expanduser('~/a') doesn't works correctly when HOME is '/'.
 
 - Issue #14371: Support bzip2 in zipfile module.  Patch by Serhiy Storchaka.