def get_data(self, space, filename): filename = self._find_relative_path(filename) w = space.wrap try: zip_file = RZipFile(self.filename, 'r') try: data = zip_file.read(filename) finally: zip_file.close() return w(data) except (KeyError, OSError): raise OperationError(space.w_IOError, space.wrap("Error reading file"))
def descr_new_zipimporter(space, w_type, name): w = space.wrap w_ZipImportError = space.getattr(space.getbuiltinmodule('zipimport'), w('ZipImportError')) ok = False parts = name.split(os.path.sep) filename = "" # make annotator happy for i in range(1, len(parts) + 1): filename = os.path.sep.join(parts[:i]) if not filename: filename = os.path.sep try: s = os.stat(filename) except OSError: raise OperationError( w_ZipImportError, space.wrap("Cannot find name %s" % (filename, ))) if not stat.S_ISDIR(s.st_mode): ok = True break if not ok: raise OperationError( w_ZipImportError, space.wrap("Did not find %s to be a valid zippath" % (name, ))) try: w_result = zip_cache.get(filename) if w_result is None: raise OperationError( w_ZipImportError, space.wrap( "Cannot import %s from zipfile, recursion detected or" "already tried and failed" % (name, ))) return w_result except KeyError: zip_cache.cache[filename] = None try: zip_file = RZipFile(filename, 'r') except (BadZipfile, OSError): raise OperationError( w_ZipImportError, space.wrap("%s seems not to be a zipfile" % (filename, ))) zip_file.close() prefix = name[len(filename):] if prefix.startswith(os.sep): prefix = prefix[1:] w_result = space.wrap( W_ZipImporter(space, name, filename, zip_file.NameToInfo, prefix)) zip_cache.set(filename, w_result) return w_result
def descr_new_zipimporter(space, w_type, name): w = space.wrap w_ZipImportError = space.getattr(space.getbuiltinmodule('zipimport'), w('ZipImportError')) ok = False parts = name.split(os.path.sep) filename = "" # make annotator happy for i in range(1, len(parts) + 1): filename = os.path.sep.join(parts[:i]) if not filename: filename = os.path.sep try: s = os.stat(filename) except OSError: raise operationerrfmt(w_ZipImportError, "Cannot find name %s", filename) if not stat.S_ISDIR(s.st_mode): ok = True break if not ok: raise operationerrfmt(w_ZipImportError, "Did not find %s to be a valid zippath", name) try: w_result = zip_cache.get(filename) if w_result is None: raise operationerrfmt(w_ZipImportError, "Cannot import %s from zipfile, recursion detected or" "already tried and failed", name) return w_result except KeyError: zip_cache.cache[filename] = None try: zip_file = RZipFile(filename, 'r') except (BadZipfile, OSError): raise operationerrfmt(w_ZipImportError, "%s seems not to be a zipfile", filename) zip_file.close() prefix = name[len(filename):] if prefix.startswith(os.sep): prefix = prefix[1:] w_result = space.wrap(W_ZipImporter(space, name, filename, zip_file.NameToInfo, prefix)) zip_cache.set(filename, w_result) return w_result