diff options
author | Marcel Plch <gmarcel.plch@gmail.com> | 2018-08-02 13:04:52 (GMT) |
---|---|---|
committer | Victor Stinner <vstinner@redhat.com> | 2018-08-02 13:04:52 (GMT) |
commit | a2fe1e52eb94c41d9ebce1ab284180d7b1faa2a4 (patch) | |
tree | 252fe3c3a784a8c4e68873be4743ba703b551653 /Lib/zipfile.py | |
parent | fc512e3e0663f7f325862fcd42aef765fd34a453 (diff) | |
download | cpython-a2fe1e52eb94c41d9ebce1ab284180d7b1faa2a4.zip cpython-a2fe1e52eb94c41d9ebce1ab284180d7b1faa2a4.tar.gz cpython-a2fe1e52eb94c41d9ebce1ab284180d7b1faa2a4.tar.bz2 |
bpo-34097: Add support for zipping files older than 1980-01-01 (GH-8270)
ZipFile can zip files older than 1980-01-01 and newer than 2107-12-31 using
a new strict_timestamps parameter at the cost of setting the timestamp
to the limit.
Diffstat (limited to 'Lib/zipfile.py')
-rw-r--r-- | Lib/zipfile.py | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/Lib/zipfile.py b/Lib/zipfile.py index 2757ce9..6da1778 100644 --- a/Lib/zipfile.py +++ b/Lib/zipfile.py @@ -469,7 +469,7 @@ class ZipInfo (object): extra = extra[ln+4:] @classmethod - def from_file(cls, filename, arcname=None): + def from_file(cls, filename, arcname=None, *, strict_timestamps=True): """Construct an appropriate ZipInfo for a file on the filesystem. filename should be the path to a file or directory on the filesystem. @@ -484,6 +484,10 @@ class ZipInfo (object): isdir = stat.S_ISDIR(st.st_mode) mtime = time.localtime(st.st_mtime) date_time = mtime[0:6] + if not strict_timestamps and date_time[0] < 1980: + date_time = (1980, 1, 1, 0, 0, 0) + elif not strict_timestamps and date_time[0] > 2107: + date_time = (2107, 12, 31, 23, 59, 59) # Create ZipInfo instance to store file information if arcname is None: arcname = filename @@ -1673,7 +1677,8 @@ class ZipFile: " would require ZIP64 extensions") def write(self, filename, arcname=None, - compress_type=None, compresslevel=None): + compress_type=None, compresslevel=None, *, + strict_timestamps=True): """Put the bytes from filename into the archive under the name arcname.""" if not self.fp: @@ -1684,7 +1689,8 @@ class ZipFile: "Can't write to ZIP archive while an open writing handle exists" ) - zinfo = ZipInfo.from_file(filename, arcname) + zinfo = ZipInfo.from_file(filename, arcname, + strict_timestamps=strict_timestamps) if zinfo.is_dir(): zinfo.compress_size = 0 |