mirror of
https://github.com/django/django.git
synced 2025-10-28 08:06:09 +00:00
Ensured that the archive module consistantly explicitly closed all files.
This commit is contained in:
@@ -46,7 +46,8 @@ def extract(path, to_path=''):
|
||||
Unpack the tar or zip file at the specified path to the directory
|
||||
specified by to_path.
|
||||
"""
|
||||
Archive(path).extract(to_path)
|
||||
with Archive(path) as archive:
|
||||
archive.extract(to_path)
|
||||
|
||||
|
||||
class Archive(object):
|
||||
@@ -77,12 +78,21 @@ class Archive(object):
|
||||
"Path not a recognized archive format: %s" % filename)
|
||||
return cls
|
||||
|
||||
def __enter__(self):
|
||||
return self
|
||||
|
||||
def __exit__(self, exc_type, exc_value, traceback):
|
||||
self.close()
|
||||
|
||||
def extract(self, to_path=''):
|
||||
self._archive.extract(to_path)
|
||||
|
||||
def list(self):
|
||||
self._archive.list()
|
||||
|
||||
def close(self):
|
||||
self._archive.close()
|
||||
|
||||
|
||||
class BaseArchive(object):
|
||||
"""
|
||||
@@ -161,6 +171,9 @@ class TarArchive(BaseArchive):
|
||||
if extracted:
|
||||
extracted.close()
|
||||
|
||||
def close(self):
|
||||
self._archive.close()
|
||||
|
||||
|
||||
class ZipArchive(BaseArchive):
|
||||
|
||||
@@ -189,6 +202,9 @@ class ZipArchive(BaseArchive):
|
||||
with open(filename, 'wb') as outfile:
|
||||
outfile.write(data)
|
||||
|
||||
def close(self):
|
||||
self._archive.close()
|
||||
|
||||
extension_map = {
|
||||
'.tar': TarArchive,
|
||||
'.tar.bz2': TarArchive,
|
||||
|
||||
Reference in New Issue
Block a user