Esempio n. 1
0
 def __init__(self, zippath, root='', prefix='/'):
     if not zipfile.is_zipfile(zippath):
         raise zipfile.BadZipfile, "not a zip file: %s" % zippath
     self.zpath = os.path.abspath(zippath)
     self._zfile = zipfile.ZipFile(zippath, mode='r')
     self._archive = Archive(root, prefix)
     self.prefix = prefix
     self.root = root
     self._archive.savePaths(self._zfile.namelist())
Esempio n. 2
0
 def __init__(self, zippath, root='', prefix='/'):
     if not zipfile.is_zipfile(zippath):
         raise zipfile.BadZipfile, "not a zip file: %s" % zippath
     self.zpath=os.path.abspath(zippath)
     self._zfile=zipfile.ZipFile(zippath, mode='r')
     self._archive=Archive(root, prefix)
     self.prefix=prefix
     self.root=root
     self._archive.savePaths(self._zfile.namelist())
Esempio n. 3
0
class ZipFS(FS):
    writeable=False
    
    def __init__(self, zippath, root='', prefix='/'):
        if not zipfile.is_zipfile(zippath):
            raise zipfile.BadZipfile, "not a zip file: %s" % zippath
        self.zpath=os.path.abspath(zippath)
        self._zfile=zipfile.ZipFile(zippath, mode='r')
        self._archive=Archive(root, prefix)
        self.prefix=prefix
        self.root=root
        self._archive.savePaths(self._zfile.namelist())

    def vstat(self, path):
        adjusted=adjust_user_path(path)
        if not self._archive.paths.has_key(adjusted): 
            raise FileNotFoundException, path
        realname=self._archive.paths[adjusted]
        if realname==None:
            arcstat=os.stat(self.zpath)[7:]
            return (0,) + arcstat
        info=self._zfile.getinfo(realname)
        modtime=int(time.mktime(info.date_time + (0, 0, 0)))
        return info.file_size, -1, modtime, modtime

    def open(self, path, mode='r'):
        adjusted=adjust_user_path(path)
        if mode!='r':
            raise NotWriteableException, "unsupported file open mode: %s" % mode
        if not self._archive.paths.has_key(adjusted):
            raise FileNotFoundException, path
        realname=self._archive.paths[adjusted]
        if realname!=None:
            return ReadOnlyStream(adjusted,
                                  self._zfile.read(realname))
        else:
            raise VFSException, "cannot open directory as file: %s" % path

    def listdir(self, path):
        if not self.isdir(path):
            raise VFSException, "not a directory: %s" % path
        return self._archive.listdir(path)
        
    def exists(self, path):
        return self._archive.exists(path)

    def isdir(self, path):
        adjusted=adjust_user_path(path)
        if not self._archive.paths.has_key(adjusted):
            return 0
        realname=self._archive.paths[adjusted]
        if realname==None:
            return 1
        else:
            # on UNIX, I'd hope to get this from file attributes;
            # Per Boethner's implementation of java.util.zip.ZipEntry
            # for GNU Classpath only tests the final slash
            return realname.endswith('/') and \
                   self._zfile.getinfo(realname).file_size==0

    def isfile(self, path):
        adjusted=adjust_user_path(path)
        if not self._archive.paths.has_key(adjusted):
            return 0
        realname=self._archive.paths[adjusted]
        if realname==None:
            return 0
        else:
            return not adjusted.endswith('/')
Esempio n. 4
0
class ZipFS(FS):
    writeable = 0

    def __init__(self, zippath, root='', prefix='/'):
        if not zipfile.is_zipfile(zippath):
            raise zipfile.BadZipfile, "not a zip file: %s" % zippath
        self.zpath = os.path.abspath(zippath)
        self._zfile = zipfile.ZipFile(zippath, mode='r')
        self._archive = Archive(root, prefix)
        self.prefix = prefix
        self.root = root
        self._archive.savePaths(self._zfile.namelist())

    def vstat(self, path):
        adjusted = adjust_user_path(path)
        if not self._archive.paths.has_key(adjusted):
            raise FileNotFoundException, path
        realname = self._archive.paths[adjusted]
        if realname == None:
            arcstat = os.stat(self.zpath)[7:]
            return (0, ) + arcstat
        info = self._zfile.getinfo(realname)
        modtime = int(time.mktime(info.date_time + (0, 0, 0)))
        return info.file_size, -1, modtime, modtime

    def open(self, path, mode='r'):
        adjusted = adjust_user_path(path)
        if mode != 'r':
            raise NotWriteableException, "unsupported file open mode: %s" % mode
        if not self._archive.paths.has_key(adjusted):
            raise FileNotFoundException, path
        realname = self._archive.paths[adjusted]
        if realname != None:
            return ReadOnlyStream(adjusted, self._zfile.read(realname))
        else:
            raise VFSException, "cannot open directory as file: %s" % path

    def listdir(self, path):
        if not self.isdir(path):
            raise VFSException, "not a directory: %s" % path
        return self._archive.listdir(path)

    def exists(self, path):
        return self._archive.exists(path)

    def isdir(self, path):
        adjusted = adjust_user_path(path)
        if not self._archive.paths.has_key(adjusted):
            return 0
        realname = self._archive.paths[adjusted]
        if realname == None:
            return 1
        else:
            # on UNIX, I'd hope to get this from file attributes;
            # Per Boethner's implementation of java.util.zip.ZipEntry
            # for GNU Classpath only tests the final slash
            return realname.endswith('/') and \
                   self._zfile.getinfo(realname).file_size==0

    def isfile(self, path):
        adjusted = adjust_user_path(path)
        if not self._archive.paths.has_key(adjusted):
            return 0
        realname = self._archive.paths[adjusted]
        if realname == None:
            return 0
        else:
            return not adjusted.endswith('/')