Beispiel #1
0
 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"))
Beispiel #2
0
 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"))
Beispiel #3
0
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
Beispiel #4
0
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