Issue #22217: Implemented reprs of classes in the zipfile module.
This commit is contained in:
parent
659dd625b4
commit
51a43703af
|
@ -326,6 +326,37 @@ class AbstractTestsWithSourceFile:
|
|||
while zipopen.read1(100):
|
||||
pass
|
||||
|
||||
def test_repr(self):
|
||||
fname = 'file.name'
|
||||
for f in get_files(self):
|
||||
with zipfile.ZipFile(f, 'w', self.compression) as zipfp:
|
||||
zipfp.write(TESTFN, fname)
|
||||
r = repr(zipfp)
|
||||
self.assertIn("mode='w'", r)
|
||||
|
||||
with zipfile.ZipFile(f, 'r') as zipfp:
|
||||
r = repr(zipfp)
|
||||
if isinstance(f, str):
|
||||
self.assertIn('filename=%r' % f, r)
|
||||
else:
|
||||
self.assertIn('file=%r' % f, r)
|
||||
self.assertIn("mode='r'", r)
|
||||
r = repr(zipfp.getinfo(fname))
|
||||
self.assertIn('filename=%r' % fname, r)
|
||||
self.assertIn('filemode=', r)
|
||||
self.assertIn('file_size=', r)
|
||||
if self.compression != zipfile.ZIP_STORED:
|
||||
self.assertIn('compress_type=', r)
|
||||
self.assertIn('compress_size=', r)
|
||||
with zipfp.open(fname) as zipopen:
|
||||
r = repr(zipopen)
|
||||
self.assertIn('name=%r' % fname, r)
|
||||
self.assertIn("mode='r'", r)
|
||||
if self.compression != zipfile.ZIP_STORED:
|
||||
self.assertIn('compress_type=', r)
|
||||
self.assertIn('[closed]', repr(zipopen))
|
||||
self.assertIn('[closed]', repr(zipfp))
|
||||
|
||||
def tearDown(self):
|
||||
unlink(TESTFN)
|
||||
unlink(TESTFN2)
|
||||
|
|
|
@ -355,6 +355,28 @@ class ZipInfo (object):
|
|||
# compress_size Size of the compressed file
|
||||
# file_size Size of the uncompressed file
|
||||
|
||||
def __repr__(self):
|
||||
result = ['<%s filename=%r' % (self.__class__.__name__, self.filename)]
|
||||
if self.compress_type != ZIP_STORED:
|
||||
result.append(' compress_type=%s' %
|
||||
compressor_names.get(self.compress_type,
|
||||
self.compress_type))
|
||||
hi = self.external_attr >> 16
|
||||
lo = self.external_attr & 0xFFFF
|
||||
if hi:
|
||||
result.append(' filemode=%r' % stat.filemode(hi))
|
||||
if lo:
|
||||
result.append(' external_attr=%#x' % lo)
|
||||
isdir = self.filename[-1:] == '/'
|
||||
if not isdir or self.file_size:
|
||||
result.append(' file_size=%r' % self.file_size)
|
||||
if ((not isdir or self.compress_size) and
|
||||
(self.compress_type != ZIP_STORED or
|
||||
self.file_size != self.compress_size)):
|
||||
result.append(' compress_size=%r' % self.compress_size)
|
||||
result.append('>')
|
||||
return ''.join(result)
|
||||
|
||||
def FileHeader(self, zip64=None):
|
||||
"""Return the per-file header as a string."""
|
||||
dt = self.date_time
|
||||
|
@ -671,6 +693,20 @@ class ZipExtFile(io.BufferedIOBase):
|
|||
else:
|
||||
self._expected_crc = None
|
||||
|
||||
def __repr__(self):
|
||||
result = ['<%s.%s' % (self.__class__.__module__,
|
||||
self.__class__.__qualname__)]
|
||||
if not self.closed:
|
||||
result.append(' name=%r mode=%r' % (self.name, self.mode))
|
||||
if self._compress_type != ZIP_STORED:
|
||||
result.append(' compress_type=%s' %
|
||||
compressor_names.get(self._compress_type,
|
||||
self._compress_type))
|
||||
else:
|
||||
result.append(' [closed]')
|
||||
result.append('>')
|
||||
return ''.join(result)
|
||||
|
||||
def readline(self, limit=-1):
|
||||
"""Read and return a line from the stream.
|
||||
|
||||
|
@ -967,6 +1003,20 @@ class ZipFile:
|
|||
def __exit__(self, type, value, traceback):
|
||||
self.close()
|
||||
|
||||
def __repr__(self):
|
||||
result = ['<%s.%s' % (self.__class__.__module__,
|
||||
self.__class__.__qualname__)]
|
||||
if self.fp is not None:
|
||||
if self._filePassed:
|
||||
result.append(' file=%r' % self.fp)
|
||||
elif self.filename is not None:
|
||||
result.append(' filename=%r' % self.filename)
|
||||
result.append(' mode=%r' % self.mode)
|
||||
else:
|
||||
result.append(' [closed]')
|
||||
result.append('>')
|
||||
return ''.join(result)
|
||||
|
||||
def _RealGetContents(self):
|
||||
"""Read in the table of contents for the ZIP file."""
|
||||
fp = self.fp
|
||||
|
|
Loading…
Reference in New Issue