Example #1
0
    def stat(self, filename, parent=None, lstat=False, fstat=False):
        """stat, lstat and fstat requests.

        Return a dictionary of stats.
        Filename is an handle in the fstat variant.
        """
        if not lstat and fstat:
            # filename is an handle
            _stat = filename.stat()
        elif lstat:
            _stat = self.client.lstat(filename)
        else:
            try:
                _stat = self.client.stat(filename if not parent else os.path.join(parent, filename))
            except:
                # we could have a broken symlink
                # but lstat could be false:
                # this happens in case of readdir responses
                _stat = self.client.lstat(filename if not parent else os.path.join(parent, filename))

        if fstat:
            longname = None  # not needed in case of fstat
        else:
            longname = stat_to_longname(_stat, filename)  # see stat_helpers.py

        return {
            b"size": _stat.st_size,
            b"uid": _stat.st_uid,
            b"gid": _stat.st_gid,
            b"perm": _stat.st_mode,
            b"atime": _stat.st_atime,
            b"mtime": _stat.st_mtime,
            b"longname": longname,
        }
Example #2
0
    def stat(self, filename, lstat=False, fstat=False, parent=None):
        """stat, lstat and fstat requests.

        Return a dictionary of stats.
        Filename is an handle in the fstat variant.
        If parent is not None, then filename is inside parent,
        and a join is needed.
        This happens in case of readdir responses:
        a filename (not a path) has to be returned,
        but the stat call need (obviously) a full path.
        """
        if not lstat and fstat:
            # filename is an handle
            _stat = os.fstat(filename)
        elif lstat:
            _stat = os.lstat(filename)
        else:
            try:
                _stat = os.stat(
                    filename if not parent
                    else os.path.join(parent, filename)
                )
            except:
                # we could have a broken symlink
                # but lstat could be false:
                # this happens in case of readdir responses
                _stat = os.lstat(
                    filename if not parent
                    else os.path.join(parent, filename)
                )

        if fstat:
            longname = None  # not needed in case of fstat
        else:
            longname = stat_to_longname(  # see stat_helpers.py
                _stat, filename
            )

        return {
            b'size': _stat.st_size,
            b'uid': _stat.st_uid,
            b'gid': _stat.st_gid,
            b'perm': _stat.st_mode,
            b'atime': _stat.st_atime,
            b'mtime': _stat.st_mtime,
            b'longname': longname
        }