@@ -355,6 +355,28 @@ def __init__(self, filename="NoName", date_time=(1980,1,1,0,0,0)):
355355 # compress_size Size of the compressed file
356356 # file_size Size of the uncompressed file
357357
358+ def __repr__ (self ):
359+ result = ['<%s filename=%r' % (self .__class__ .__name__ , self .filename )]
360+ if self .compress_type != ZIP_STORED :
361+ result .append (' compress_type=%s' %
362+ compressor_names .get (self .compress_type ,
363+ self .compress_type ))
364+ hi = self .external_attr >> 16
365+ lo = self .external_attr & 0xFFFF
366+ if hi :
367+ result .append (' filemode=%r' % stat .filemode (hi ))
368+ if lo :
369+ result .append (' external_attr=%#x' % lo )
370+ isdir = self .filename [- 1 :] == '/'
371+ if not isdir or self .file_size :
372+ result .append (' file_size=%r' % self .file_size )
373+ if ((not isdir or self .compress_size ) and
374+ (self .compress_type != ZIP_STORED or
375+ self .file_size != self .compress_size )):
376+ result .append (' compress_size=%r' % self .compress_size )
377+ result .append ('>' )
378+ return '' .join (result )
379+
358380 def FileHeader (self , zip64 = None ):
359381 """Return the per-file header as a string."""
360382 dt = self .date_time
@@ -671,6 +693,20 @@ def __init__(self, fileobj, mode, zipinfo, decrypter=None,
671693 else :
672694 self ._expected_crc = None
673695
696+ def __repr__ (self ):
697+ result = ['<%s.%s' % (self .__class__ .__module__ ,
698+ self .__class__ .__qualname__ )]
699+ if not self .closed :
700+ result .append (' name=%r mode=%r' % (self .name , self .mode ))
701+ if self ._compress_type != ZIP_STORED :
702+ result .append (' compress_type=%s' %
703+ compressor_names .get (self ._compress_type ,
704+ self ._compress_type ))
705+ else :
706+ result .append (' [closed]' )
707+ result .append ('>' )
708+ return '' .join (result )
709+
674710 def readline (self , limit = - 1 ):
675711 """Read and return a line from the stream.
676712
@@ -967,6 +1003,20 @@ def __enter__(self):
9671003 def __exit__ (self , type , value , traceback ):
9681004 self .close ()
9691005
1006+ def __repr__ (self ):
1007+ result = ['<%s.%s' % (self .__class__ .__module__ ,
1008+ self .__class__ .__qualname__ )]
1009+ if self .fp is not None :
1010+ if self ._filePassed :
1011+ result .append (' file=%r' % self .fp )
1012+ elif self .filename is not None :
1013+ result .append (' filename=%r' % self .filename )
1014+ result .append (' mode=%r' % self .mode )
1015+ else :
1016+ result .append (' [closed]' )
1017+ result .append ('>' )
1018+ return '' .join (result )
1019+
9701020 def _RealGetContents (self ):
9711021 """Read in the table of contents for the ZIP file."""
9721022 fp = self .fp
0 commit comments