Python zipfile.ZipInfo() Examples
The following are 30
code examples of zipfile.ZipInfo().
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example.
You may also want to check out all available functions/classes of the module
zipfile
, or try the search function
.
Example #1
Source File: input_readers.py From locality-sensitive-hashing with MIT License | 6 votes |
def next(self): """Returns the next input from this input reader as (ZipInfo, opener) tuple. Returns: The next input from this input reader, in the form of a 2-tuple. The first element of the tuple is a zipfile.ZipInfo object. The second element of the tuple is a zero-argument function that, when called, returns the complete body of the file. """ if not self._zip: self._zip = zipfile.ZipFile(self._reader(self._blob_key)) # Get a list of entries, reversed so we can pop entries off in order self._entries = self._zip.infolist()[self._start_index:self._end_index] self._entries.reverse() if not self._entries: raise StopIteration() entry = self._entries.pop() self._start_index += 1 return (entry, lambda: self._read(entry))
Example #2
Source File: wheel.py From poetry with MIT License | 6 votes |
def _write_to_zip(self, wheel, rel_path): sio = StringIO() yield sio # The default is a fixed timestamp rather than the current time, so # that building a wheel twice on the same computer can automatically # give you the exact same result. date_time = (2016, 1, 1, 0, 0, 0) zi = zipfile.ZipInfo(rel_path, date_time) zi.external_attr = (0o644 & 0xFFFF) << 16 # Unix attributes b = sio.getvalue().encode("utf-8") hashsum = hashlib.sha256(b) hash_digest = urlsafe_b64encode(hashsum.digest()).decode("ascii").rstrip("=") wheel.writestr(zi, b, compress_type=zipfile.ZIP_DEFLATED) self._records.append((rel_path, hash_digest, len(b)))
Example #3
Source File: wheelfile.py From pex with Apache License 2.0 | 6 votes |
def close(self): # Write RECORD if self.fp is not None and self.mode == 'w' and self._file_hashes: data = StringIO() writer = csv.writer(data, delimiter=',', quotechar='"', lineterminator='\n') writer.writerows(( ( fname, algorithm + "=" + hash_, self._file_sizes[fname] ) for fname, (algorithm, hash_) in self._file_hashes.items() )) writer.writerow((format(self.record_path), "", "")) zinfo = ZipInfo(native(self.record_path), date_time=get_zipinfo_datetime()) zinfo.compress_type = ZIP_DEFLATED zinfo.external_attr = 0o664 << 16 self.writestr(zinfo, as_bytes(data.getvalue())) ZipFile.close(self)
Example #4
Source File: test_zipstream.py From Safejumper-for-Desktop with GNU General Public License v2.0 | 6 votes |
def test_unsupportedCompression(self): """ A zipfile which describes an unsupported compression mechanism should raise BadZipfile. """ fn = self.mktemp() with zipfile.ZipFile(fn, "w") as zf: zi = zipfile.ZipInfo("0") zf.writestr(zi, "some data") # Mangle its compression type in the central directory; can't do # this before the writestr call or zipfile will (correctly) tell us # not to pass bad compression types :) zi.compress_type = 1234 with zipstream.ChunkingZipFile(fn) as czf: self.assertRaises(zipfile.BadZipfile, czf.readfile, "0")
Example #5
Source File: input_readers.py From browserscope with Apache License 2.0 | 6 votes |
def _read(self, entry): """Read entry content. Args: entry: zip file entry as zipfile.ZipInfo. Returns: Entry content as string. """ start_time = time.time() content = self._zip.read(entry.filename) ctx = context.get() if ctx: operation.counters.Increment(COUNTER_IO_READ_BYTES, len(content))(ctx) operation.counters.Increment( COUNTER_IO_READ_MSEC, int((time.time() - start_time) * 1000))(ctx) return content
Example #6
Source File: input_readers.py From locality-sensitive-hashing with MIT License | 6 votes |
def _read(self, entry): """Read entry content. Args: entry: zip file entry as zipfile.ZipInfo. Returns: Entry content as string. """ start_time = time.time() content = self._zip.read(entry.filename) ctx = context.get() if ctx: operation.counters.Increment(COUNTER_IO_READ_BYTES, len(content))(ctx) operation.counters.Increment( COUNTER_IO_READ_MSEC, int((time.time() - start_time) * 1000))(ctx) return content
Example #7
Source File: wheel.py From pdm with MIT License | 6 votes |
def _write_to_zip(self, wheel, rel_path): sio = StringIO() yield sio # The default is a fixed timestamp rather than the current time, so # that building a wheel twice on the same computer can automatically # give you the exact same result. date_time = (2016, 1, 1, 0, 0, 0) zi = zipfile.ZipInfo(rel_path, date_time) b = sio.getvalue().encode("utf-8") hashsum = hashlib.sha256(b) hash_digest = urlsafe_b64encode(hashsum.digest()).decode("ascii").rstrip("=") wheel.writestr(zi, b, compress_type=zipfile.ZIP_DEFLATED) stream.echo(f" - Adding: {rel_path}", verbosity=stream.DETAIL) self._records.append((rel_path, hash_digest, str(len(b))))
Example #8
Source File: input_readers.py From browserscope with Apache License 2.0 | 6 votes |
def next(self): """Returns the next input from this input reader as (ZipInfo, opener) tuple. Returns: The next input from this input reader, in the form of a 2-tuple. The first element of the tuple is a zipfile.ZipInfo object. The second element of the tuple is a zero-argument function that, when called, returns the complete body of the file. """ if not self._zip: self._zip = zipfile.ZipFile(self._reader(self._blob_key)) # Get a list of entries, reversed so we can pop entries off in order self._entries = self._zip.infolist()[self._start_index:self._end_index] self._entries.reverse() if not self._entries: raise StopIteration() entry = self._entries.pop() self._start_index += 1 return (entry, lambda: self._read(entry))
Example #9
Source File: test_zipfile.py From BinderFilter with MIT License | 5 votes |
def test_create_zipinfo_before_1980(self): self.assertRaises(ValueError, zipfile.ZipInfo, 'seventies', (1979, 1, 1, 0, 0, 0))
Example #10
Source File: test_zipfile.py From BinderFilter with MIT License | 5 votes |
def zip_test_writestr_permissions(self, f, compression): # Make sure that writestr creates files with mode 0600, # when it is passed a name rather than a ZipInfo instance. self.make_test_archive(f, compression) with zipfile.ZipFile(f, "r") as zipfp: zinfo = zipfp.getinfo('strfile') self.assertEqual(zinfo.external_attr, 0600 << 16)
Example #11
Source File: test_zipimport.py From oss-ftp with MIT License | 5 votes |
def doTest(self, expected_ext, files, *modules, **kw): z = ZipFile(TEMP_ZIP, "w") try: for name, (mtime, data) in files.items(): zinfo = ZipInfo(name, time.localtime(mtime)) zinfo.compress_type = self.compression z.writestr(zinfo, data) z.close() stuff = kw.get("stuff", None) if stuff is not None: # Prepend 'stuff' to the start of the zipfile f = open(TEMP_ZIP, "rb") data = f.read() f.close() f = open(TEMP_ZIP, "wb") f.write(stuff) f.write(data) f.close() sys.path.insert(0, TEMP_ZIP) mod = __import__(".".join(modules), globals(), locals(), ["__dummy__"]) call = kw.get('call') if call is not None: call(mod) if expected_ext: file = mod.get_file() self.assertEqual(file, os.path.join(TEMP_ZIP, *modules) + expected_ext) finally: z.close() os.remove(TEMP_ZIP)
Example #12
Source File: req.py From oss-ftp with MIT License | 5 votes |
def archive(self, build_dir): assert self.source_dir create_archive = True archive_name = '%s-%s.zip' % (self.name, self.installed_version) archive_path = os.path.join(build_dir, archive_name) if os.path.exists(archive_path): response = ask_path_exists( 'The file %s exists. (i)gnore, (w)ipe, (b)ackup ' % display_path(archive_path), ('i', 'w', 'b')) if response == 'i': create_archive = False elif response == 'w': logger.warn('Deleting %s' % display_path(archive_path)) os.remove(archive_path) elif response == 'b': dest_file = backup_dir(archive_path) logger.warn('Backing up %s to %s' % (display_path(archive_path), display_path(dest_file))) shutil.move(archive_path, dest_file) if create_archive: zip = zipfile.ZipFile(archive_path, 'w', zipfile.ZIP_DEFLATED) dir = os.path.normcase(os.path.abspath(self.source_dir)) for dirpath, dirnames, filenames in os.walk(dir): if 'pip-egg-info' in dirnames: dirnames.remove('pip-egg-info') for dirname in dirnames: dirname = os.path.join(dirpath, dirname) name = self._clean_zip_name(dirname, dir) zipdir = zipfile.ZipInfo(self.name + '/' + name + '/') zipdir.external_attr = 0x1ED << 16 # 0o755 zip.writestr(zipdir, '') for filename in filenames: if filename == PIP_DELETE_MARKER_FILENAME: continue filename = os.path.join(dirpath, filename) name = self._clean_zip_name(filename, dir) zip.write(filename, self.name + '/' + name) zip.close() logger.indent -= 2 logger.notify('Saved %s' % display_path(archive_path))
Example #13
Source File: wheel.py From pdm with MIT License | 5 votes |
def _add_file(self, wheel, full_path, rel_path=None): if not rel_path: rel_path = full_path if os.sep != "/": # We always want to have /-separated paths in the zip file and in RECORD rel_path = rel_path.replace(os.sep, "/") stream.echo(f" - Adding: {rel_path}", verbosity=stream.DETAIL) zinfo = zipfile.ZipInfo(rel_path) # Normalize permission bits to either 755 (executable) or 644 st_mode = os.stat(full_path).st_mode if stat.S_ISDIR(st_mode): zinfo.external_attr |= 0x10 # MS-DOS directory flag hashsum = hashlib.sha256() with open(full_path, "rb") as src: while True: buf = src.read(1024 * 8) if not buf: break hashsum.update(buf) src.seek(0) wheel.writestr(zinfo, src.read(), compress_type=zipfile.ZIP_DEFLATED) size = os.stat(full_path).st_size hash_digest = urlsafe_b64encode(hashsum.digest()).decode("ascii").rstrip("=") self._records.append((rel_path, hash_digest, str(size)))
Example #14
Source File: ThreeMFWorkspaceWriter.py From Cura with GNU Lesser General Public License v3.0 | 5 votes |
def _writePluginMetadataToArchive(archive: zipfile.ZipFile) -> None: file_name_template = "%s/plugin_metadata.json" for plugin_id, metadata in Application.getInstance().getWorkspaceMetadataStorage().getAllData().items(): file_name = file_name_template % plugin_id file_in_archive = zipfile.ZipInfo(file_name) # We have to set the compress type of each file as well (it doesn't keep the type of the entire archive) file_in_archive.compress_type = zipfile.ZIP_DEFLATED import json archive.writestr(file_in_archive, json.dumps(metadata, separators = (", ", ": "), indent = 4, skipkeys = True))
Example #15
Source File: ThreeMFWorkspaceWriter.py From Cura with GNU Lesser General Public License v3.0 | 5 votes |
def _writeContainerToArchive(container, archive): """Helper function that writes ContainerStacks, InstanceContainers and DefinitionContainers to the archive. :param container: That follows the :type{ContainerInterface} to archive. :param archive: The archive to write to. """ if isinstance(container, type(ContainerRegistry.getInstance().getEmptyInstanceContainer())): return # Empty file, do nothing. file_suffix = ContainerRegistry.getMimeTypeForContainer(type(container)).preferredSuffix # Some containers have a base file, which should then be the file to use. if "base_file" in container.getMetaData(): base_file = container.getMetaDataEntry("base_file") if base_file != container.getId(): container = ContainerRegistry.getInstance().findContainers(id = base_file)[0] file_name = "Cura/%s.%s" % (container.getId(), file_suffix) if file_name in archive.namelist(): return # File was already saved, no need to do it again. Uranium guarantees unique ID's, so this should hold. file_in_archive = zipfile.ZipInfo(file_name) # For some reason we have to set the compress type of each file as well (it doesn't keep the type of the entire archive) file_in_archive.compress_type = zipfile.ZIP_DEFLATED # Do not include the network authentication keys ignore_keys = {"network_authentication_id", "network_authentication_key", "octoprint_api_key"} serialized_data = container.serialize(ignored_metadata_keys = ignore_keys) archive.writestr(file_in_archive, serialized_data)
Example #16
Source File: CuraProfileWriter.py From Cura with GNU Lesser General Public License v3.0 | 5 votes |
def write(self, path, profiles): """Writes a profile to the specified file path. :param path: :type{string} The file to output to. :param profiles: :type{Profile} :type{List} The profile(s) to write to that file. :return: True if the writing was successful, or False if it wasn't. """ if type(profiles) != list: profiles = [profiles] stream = open(path, "wb") # Open file for writing in binary. archive = zipfile.ZipFile(stream, "w", compression=zipfile.ZIP_DEFLATED) try: # Open the specified file. for profile in profiles: serialized = profile.serialize() profile_file = zipfile.ZipInfo(profile.getId()) archive.writestr(profile_file, serialized) except Exception as e: Logger.log("e", "Failed to write profile to %s: %s", path, str(e)) return False finally: archive.close() return True
Example #17
Source File: wheelfile.py From Mastering-Elasticsearch-7.0 with MIT License | 5 votes |
def get_zipinfo_datetime(timestamp=None): # Some applications need reproducible .whl files, but they can't do this without forcing # the timestamp of the individual ZipInfo objects. See issue #143. timestamp = int(os.environ.get('SOURCE_DATE_EPOCH', timestamp or time.time())) return time.gmtime(timestamp)[0:6]
Example #18
Source File: wheelfile.py From Mastering-Elasticsearch-7.0 with MIT License | 5 votes |
def open(self, name_or_info, mode="r", pwd=None): def _update_crc(newdata, eof=None): if eof is None: eof = ef._eof update_crc_orig(newdata) else: # Python 2 update_crc_orig(newdata, eof) running_hash.update(newdata) if eof and running_hash.digest() != expected_hash: raise WheelError("Hash mismatch for file '{}'".format(native(ef_name))) ef = ZipFile.open(self, name_or_info, mode, pwd) ef_name = as_unicode(name_or_info.filename if isinstance(name_or_info, ZipInfo) else name_or_info) if mode == 'r' and not ef_name.endswith('/'): if ef_name not in self._file_hashes: raise WheelError("No hash found for file '{}'".format(native(ef_name))) algorithm, expected_hash = self._file_hashes[ef_name] if expected_hash is not None: # Monkey patch the _update_crc method to also check for the hash from RECORD running_hash = hashlib.new(algorithm) update_crc_orig, ef._update_crc = ef._update_crc, _update_crc return ef
Example #19
Source File: wheelfile.py From Mastering-Elasticsearch-7.0 with MIT License | 5 votes |
def write(self, filename, arcname=None, compress_type=None): with open(filename, 'rb') as f: st = os.fstat(f.fileno()) data = f.read() zinfo = ZipInfo(arcname or filename, date_time=get_zipinfo_datetime(st.st_mtime)) zinfo.external_attr = (stat.S_IMODE(st.st_mode) | stat.S_IFMT(st.st_mode)) << 16 zinfo.compress_type = ZIP_DEFLATED self.writestr(zinfo, data, compress_type)
Example #20
Source File: wheelfile.py From Mastering-Elasticsearch-7.0 with MIT License | 5 votes |
def writestr(self, zinfo_or_arcname, bytes, compress_type=None): ZipFile.writestr(self, zinfo_or_arcname, bytes, compress_type) fname = (zinfo_or_arcname.filename if isinstance(zinfo_or_arcname, ZipInfo) else zinfo_or_arcname) logger.info("adding '%s'", fname) if fname != self.record_path: hash_ = self._default_algorithm(bytes) self._file_hashes[fname] = hash_.name, native(urlsafe_b64encode(hash_.digest())) self._file_sizes[fname] = len(bytes)
Example #21
Source File: odfdoc.py From gprime with GNU General Public License v2.0 | 5 votes |
def _add_zip(self, zfile, name, data, date_time): """ Add a zip file to an archive """ zipinfo = zipfile.ZipInfo(name) zipinfo.date_time = date_time zipinfo.compress_type = zipfile.ZIP_DEFLATED zipinfo.external_attr = 0o644 << 16 zfile.writestr(zipinfo, data)
Example #22
Source File: test_zipimport.py From BinderFilter with MIT License | 5 votes |
def doTest(self, expected_ext, files, *modules, **kw): z = ZipFile(TEMP_ZIP, "w") try: for name, (mtime, data) in files.items(): zinfo = ZipInfo(name, time.localtime(mtime)) zinfo.compress_type = self.compression z.writestr(zinfo, data) z.close() stuff = kw.get("stuff", None) if stuff is not None: # Prepend 'stuff' to the start of the zipfile f = open(TEMP_ZIP, "rb") data = f.read() f.close() f = open(TEMP_ZIP, "wb") f.write(stuff) f.write(data) f.close() sys.path.insert(0, TEMP_ZIP) mod = __import__(".".join(modules), globals(), locals(), ["__dummy__"]) call = kw.get('call') if call is not None: call(mod) if expected_ext: file = mod.get_file() self.assertEqual(file, os.path.join(TEMP_ZIP, *modules) + expected_ext) finally: z.close() os.remove(TEMP_ZIP)
Example #23
Source File: strip_resources.py From trunk with Apache License 2.0 | 5 votes |
def main(): with zipfile.ZipFile(FLAGS.input_resource_apk) as input_zip: with input_zip.open("AndroidManifest.xml") as android_manifest_entry: android_manifest = android_manifest_entry.read() with zipfile.ZipFile(FLAGS.output_resource_apk, "w") as output_zip: # Timestamp is explicitly set so that the resulting zip file is hermetic zipinfo = zipfile.ZipInfo( filename="AndroidManifest.xml", date_time=HERMETIC_TIMESTAMP) output_zip.writestr(zipinfo, android_manifest)
Example #24
Source File: test_pkg_resources.py From pkg_resources with MIT License | 5 votes |
def setup_class(cls): "create a zip egg and add it to sys.path" egg = tempfile.NamedTemporaryFile(suffix='.egg', delete=False) zip_egg = zipfile.ZipFile(egg, 'w') zip_info = zipfile.ZipInfo() zip_info.filename = 'mod.py' zip_info.date_time = cls.ref_time.timetuple() zip_egg.writestr(zip_info, 'x = 3\n') zip_info = zipfile.ZipInfo() zip_info.filename = 'data.dat' zip_info.date_time = cls.ref_time.timetuple() zip_egg.writestr(zip_info, 'hello, world!') zip_info = zipfile.ZipInfo() zip_info.filename = 'subdir/mod2.py' zip_info.date_time = cls.ref_time.timetuple() zip_egg.writestr(zip_info, 'x = 6\n') zip_info = zipfile.ZipInfo() zip_info.filename = 'subdir/data2.dat' zip_info.date_time = cls.ref_time.timetuple() zip_egg.writestr(zip_info, 'goodbye, world!') zip_egg.close() egg.close() sys.path.append(egg.name) subdir = os.path.join(egg.name, 'subdir') sys.path.append(subdir) cls.finalizers.append(EggRemover(subdir)) cls.finalizers.append(EggRemover(egg.name))
Example #25
Source File: install.py From Safejumper-for-Desktop with GNU General Public License v2.0 | 5 votes |
def open(self, name_or_info, mode="r", pwd=None): """Return file-like object for 'name'.""" # A non-monkey-patched version would contain most of zipfile.py ef = zipfile.ZipFile.open(self, name_or_info, mode, pwd) if isinstance(name_or_info, zipfile.ZipInfo): name = name_or_info.filename else: name = name_or_info if (name in self._expected_hashes and self._expected_hashes[name] != None): expected_hash = self._expected_hashes[name] try: _update_crc_orig = ef._update_crc except AttributeError: warnings.warn('Need ZipExtFile._update_crc to implement ' 'file hash verification (in Python >= 2.7)') return ef running_hash = self._hash_algorithm() if hasattr(ef, '_eof'): # py33 def _update_crc(data): _update_crc_orig(data) running_hash.update(data) if ef._eof and running_hash.digest() != expected_hash: raise BadWheelFile("Bad hash for file %r" % ef.name) else: def _update_crc(data, eof=None): _update_crc_orig(data, eof=eof) running_hash.update(data) if eof and running_hash.digest() != expected_hash: raise BadWheelFile("Bad hash for file %r" % ef.name) ef._update_crc = _update_crc elif self.strict and name not in self._expected_hashes: raise BadWheelFile("No expected hash for file %r" % ef.name) return ef
Example #26
Source File: zipstream.py From Safejumper-for-Desktop with GNU General Public License v2.0 | 5 votes |
def countFileChunks(zipinfo, chunksize): """ Count the number of chunks that will result from the given C{ZipInfo}. @param zipinfo: a C{zipfile.ZipInfo} instance describing an entry in a zip archive to be counted. @return: the number of chunks present in the zip file. (Even an empty file counts as one chunk.) @rtype: L{int} """ count, extra = divmod(zipinfo.file_size, chunksize) if extra > 0: count += 1 return count or 1
Example #27
Source File: __init__.py From faces with GNU General Public License v2.0 | 5 votes |
def write_zip_str(self, zfile, name, bytes, compress_type=zipfile.ZIP_DEFLATED): localtime = time.localtime(time.time()) zinfo = zipfile.ZipInfo(name, localtime) # Add some standard UNIX file access permissions (-rw-r--r--). zinfo.external_attr = (0x81a4 & 0xFFFF) << 16 zinfo.compress_type = compress_type zfile.writestr(zinfo, bytes)
Example #28
Source File: install.py From kobo-predict with BSD 2-Clause "Simplified" License | 5 votes |
def open(self, name_or_info, mode="r", pwd=None): """Return file-like object for 'name'.""" # A non-monkey-patched version would contain most of zipfile.py ef = zipfile.ZipFile.open(self, name_or_info, mode, pwd) if isinstance(name_or_info, zipfile.ZipInfo): name = name_or_info.filename else: name = name_or_info if (name in self._expected_hashes and self._expected_hashes[name] != None): expected_hash = self._expected_hashes[name] try: _update_crc_orig = ef._update_crc except AttributeError: warnings.warn('Need ZipExtFile._update_crc to implement ' 'file hash verification (in Python >= 2.7)') return ef running_hash = self._hash_algorithm() if hasattr(ef, '_eof'): # py33 def _update_crc(data): _update_crc_orig(data) running_hash.update(data) if ef._eof and running_hash.digest() != expected_hash: raise BadWheelFile("Bad hash for file %r" % ef.name) else: def _update_crc(data, eof=None): _update_crc_orig(data, eof=eof) running_hash.update(data) if eof and running_hash.digest() != expected_hash: raise BadWheelFile("Bad hash for file %r" % ef.name) ef._update_crc = _update_crc elif self.strict and name not in self._expected_hashes: raise BadWheelFile("No expected hash for file %r" % ef.name) return ef
Example #29
Source File: common.py From pex with Apache License 2.0 | 5 votes |
def zip_info_from_file(cls, filename, arcname=None, date_time=None): """Construct a ZipInfo for a file on the filesystem. Usually this is provided directly as a method of ZipInfo, but it is not implemented in Python 2.7 so we re-implement it here. The main divergance we make from the original is adding a parameter for the datetime (a time.struct_time), which allows us to use a deterministic timestamp. See https://github.com/python/cpython/blob/master/Lib/zipfile.py#L495.""" st = os.stat(filename) isdir = stat.S_ISDIR(st.st_mode) if arcname is None: arcname = filename arcname = os.path.normpath(os.path.splitdrive(arcname)[1]) while arcname[0] in (os.sep, os.altsep): arcname = arcname[1:] if isdir: arcname += '/' if date_time is None: date_time = time.localtime(st.st_mtime) zinfo = zipfile.ZipInfo(filename=arcname, date_time=date_time[:6]) zinfo.external_attr = (st.st_mode & 0xFFFF) << 16 # Unix attributes if isdir: zinfo.file_size = 0 zinfo.external_attr |= 0x10 # MS-DOS directory flag else: zinfo.file_size = st.st_size return zinfo
Example #30
Source File: common.py From pex with Apache License 2.0 | 5 votes |
def _extract_member(self, member, targetpath, pwd): result = super(PermPreservingZipFile, self)._extract_member(member, targetpath, pwd) info = member if isinstance(member, zipfile.ZipInfo) else self.getinfo(member) self._chmod(info, result) return result