Skip to content

Commit 5b1a785

Browse files
committed
Patch #1647484: Renamed GzipFile's filename attribute to name. The
filename attribute is still accessible as a property that emits a DeprecationWarning.
1 parent b1cc1d4 commit 5b1a785

File tree

3 files changed

+22
-8
lines changed

3 files changed

+22
-8
lines changed

Lib/gzip.py

+13-8
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ def __init__(self, filename=None, mode=None,
106106
self._new_member = True
107107
self.extrabuf = ""
108108
self.extrasize = 0
109-
self.filename = filename
109+
self.name = filename
110110
# Starts small, scales exponentially
111111
self.min_readsize = 100
112112

@@ -127,14 +127,20 @@ def __init__(self, filename=None, mode=None,
127127
if self.mode == WRITE:
128128
self._write_gzip_header()
129129

130+
@property
131+
def filename(self):
132+
import warnings
133+
warnings.warn("use the name attribute", DeprecationWarning)
134+
if self.mode == WRITE and self.name[-3:] != ".gz":
135+
return self.name + ".gz"
136+
return self.name
137+
130138
def __repr__(self):
131139
s = repr(self.fileobj)
132140
return '<gzip ' + s[1:-1] + ' ' + hex(id(self)) + '>'
133141

134142
def _init_write(self, filename):
135-
if filename[-3:] != '.gz':
136-
filename = filename + '.gz'
137-
self.filename = filename
143+
self.name = filename
138144
self.crc = zlib.crc32("")
139145
self.size = 0
140146
self.writebuf = []
@@ -143,16 +149,15 @@ def _init_write(self, filename):
143149
def _write_gzip_header(self):
144150
self.fileobj.write('\037\213') # magic header
145151
self.fileobj.write('\010') # compression method
146-
fname = self.filename[:-3]
147152
flags = 0
148-
if fname:
153+
if self.name:
149154
flags = FNAME
150155
self.fileobj.write(chr(flags))
151156
write32u(self.fileobj, long(time.time()))
152157
self.fileobj.write('\002')
153158
self.fileobj.write('\377')
154-
if fname:
155-
self.fileobj.write(fname + '\000')
159+
if self.name:
160+
self.fileobj.write(self.name + '\000')
156161

157162
def _init_read(self):
158163
self.crc = zlib.crc32("")

Lib/test/test_gzip.py

+7
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,13 @@ def test_mode(self):
153153
self.assertEqual(f.myfileobj.mode, 'rb')
154154
f.close()
155155

156+
def test_1647484(self):
157+
for mode in ('wb', 'rb'):
158+
f = gzip.GzipFile(self.filename, mode)
159+
self.assert_(hasattr(f, "name"))
160+
self.assertEqual(f.name, self.filename)
161+
f.close()
162+
156163
def test_main(verbose=None):
157164
test_support.run_unittest(TestGzip)
158165

Misc/NEWS

+2
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,8 @@ Core and builtins
128128
Library
129129
-------
130130

131+
- Patch #1647484: Renamed GzipFile's filename attribute to name.
132+
131133
- Patch #1517891: Mode 'a' for ZipFile now creates the file if it
132134
doesn't exist.
133135

0 commit comments

Comments
 (0)