Patch #1647484: Renamed GzipFile's filename attribute to name. The

filename attribute is still accessible as a property that emits a
DeprecationWarning.
This commit is contained in:
Lars Gustäbel 2007-02-13 16:09:24 +00:00
parent b1cc1d407b
commit 5b1a785702
3 changed files with 22 additions and 8 deletions

View File

@ -106,7 +106,7 @@ class GzipFile:
self._new_member = True self._new_member = True
self.extrabuf = "" self.extrabuf = ""
self.extrasize = 0 self.extrasize = 0
self.filename = filename self.name = filename
# Starts small, scales exponentially # Starts small, scales exponentially
self.min_readsize = 100 self.min_readsize = 100
@ -127,14 +127,20 @@ class GzipFile:
if self.mode == WRITE: if self.mode == WRITE:
self._write_gzip_header() self._write_gzip_header()
@property
def filename(self):
import warnings
warnings.warn("use the name attribute", DeprecationWarning)
if self.mode == WRITE and self.name[-3:] != ".gz":
return self.name + ".gz"
return self.name
def __repr__(self): def __repr__(self):
s = repr(self.fileobj) s = repr(self.fileobj)
return '<gzip ' + s[1:-1] + ' ' + hex(id(self)) + '>' return '<gzip ' + s[1:-1] + ' ' + hex(id(self)) + '>'
def _init_write(self, filename): def _init_write(self, filename):
if filename[-3:] != '.gz': self.name = filename
filename = filename + '.gz'
self.filename = filename
self.crc = zlib.crc32("") self.crc = zlib.crc32("")
self.size = 0 self.size = 0
self.writebuf = [] self.writebuf = []
@ -143,16 +149,15 @@ class GzipFile:
def _write_gzip_header(self): def _write_gzip_header(self):
self.fileobj.write('\037\213') # magic header self.fileobj.write('\037\213') # magic header
self.fileobj.write('\010') # compression method self.fileobj.write('\010') # compression method
fname = self.filename[:-3]
flags = 0 flags = 0
if fname: if self.name:
flags = FNAME flags = FNAME
self.fileobj.write(chr(flags)) self.fileobj.write(chr(flags))
write32u(self.fileobj, long(time.time())) write32u(self.fileobj, long(time.time()))
self.fileobj.write('\002') self.fileobj.write('\002')
self.fileobj.write('\377') self.fileobj.write('\377')
if fname: if self.name:
self.fileobj.write(fname + '\000') self.fileobj.write(self.name + '\000')
def _init_read(self): def _init_read(self):
self.crc = zlib.crc32("") self.crc = zlib.crc32("")

View File

@ -153,6 +153,13 @@ class TestGzip(unittest.TestCase):
self.assertEqual(f.myfileobj.mode, 'rb') self.assertEqual(f.myfileobj.mode, 'rb')
f.close() f.close()
def test_1647484(self):
for mode in ('wb', 'rb'):
f = gzip.GzipFile(self.filename, mode)
self.assert_(hasattr(f, "name"))
self.assertEqual(f.name, self.filename)
f.close()
def test_main(verbose=None): def test_main(verbose=None):
test_support.run_unittest(TestGzip) test_support.run_unittest(TestGzip)

View File

@ -128,6 +128,8 @@ Core and builtins
Library Library
------- -------
- Patch #1647484: Renamed GzipFile's filename attribute to name.
- Patch #1517891: Mode 'a' for ZipFile now creates the file if it - Patch #1517891: Mode 'a' for ZipFile now creates the file if it
doesn't exist. doesn't exist.