summaryrefslogtreecommitdiff
path: root/fs/expose
diff options
context:
space:
mode:
authorbtimby <btimby@67cdc799-7952-0410-af00-57a81ceafa0f>2012-06-14 02:22:13 +0000
committerbtimby <btimby@67cdc799-7952-0410-af00-57a81ceafa0f>2012-06-14 02:22:13 +0000
commit57ba0a2af4eea6f0986e9085bba31735dfb2ec0d (patch)
treea6e02c8f09869ea941ff1804c6b9a66364aafcfd /fs/expose
parent42e2c0781356c7c6102cad528482b0ca1afb3bb5 (diff)
downloadpyfilesystem-git-57ba0a2af4eea6f0986e9085bba31735dfb2ec0d.tar.gz
A bit of cleanup, and default to using the underlying file mode.
Diffstat (limited to 'fs/expose')
-rw-r--r--fs/expose/ftp.py38
1 files changed, 22 insertions, 16 deletions
diff --git a/fs/expose/ftp.py b/fs/expose/ftp.py
index 4de28a3..98d08ab 100644
--- a/fs/expose/ftp.py
+++ b/fs/expose/ftp.py
@@ -143,32 +143,38 @@ class FTPFS(ftpserver.AbstractedFS):
kwargs['st_uid'] = info.get('st_uid', UID)
kwargs['st_gid'] = info.get('st_gid', GID)
if 'st_atime' in info:
- kwargs['st_atime'] = info.get('st_atime')
+ kwargs['st_atime'] = info['st_atime']
elif 'accessed_time' in info:
- kwargs['st_atime'] = time.mktime(info.get("accessed_time").timetuple())
+ kwargs['st_atime'] = time.mktime(info["accessed_time"].timetuple())
if 'st_mtime' in info:
kwargs['st_mtime'] = info.get('st_mtime')
elif 'modified_time' in info:
- kwargs['st_mtime'] = time.mktime(info.get("modified_time").timetuple())
+ kwargs['st_mtime'] = time.mktime(info["modified_time"].timetuple())
# Pyftpdlib uses st_ctime on Windows platform, try to provide it.
if 'st_ctime' in info:
- kwargs['st_ctime'] = info.get('st_ctime')
+ kwargs['st_ctime'] = info['st_ctime']
elif 'created_time' in info:
- kwargs['st_ctime'] = time.mktime(info.get("created_time").timetuple())
+ kwargs['st_ctime'] = time.mktime(info["created_time"].timetuple())
elif 'st_mtime' in kwargs:
# As a last resort, just copy the modified time.
kwargs['st_ctime'] = kwargs['st_mtime']
- # Not executable by default, Chrome uses the exec flag to denote directories.
- mode = 0660
- # Merge in the type (dir or file). File is tested first, some file systems
- # such as ArchiveMountFS treat archive files as directories too. By checking
- # file first, any such files will be only files (not directories).
- if self.fs.isfile(path):
- mode |= stat.S_IFREG
- elif self.fs.isdir(path):
- mode |= stat.S_IFDIR
- mode |= 0110 # Merge in exec bit
- kwargs['st_mode'] = mode
+ # Try to use existing mode.
+ if 'st_mode' in info:
+ kwargs['st_mode'] = info['st_mode']
+ elif 'mode' in info:
+ kwargs['st_mode'] = info['mode']
+ else:
+ # Otherwise, build one. Not executable by default.
+ mode = 0660
+ # Merge in the type (dir or file). File is tested first, some file systems
+ # such as ArchiveMountFS treat archive files as directories too. By checking
+ # file first, any such files will be only files (not directories).
+ if self.fs.isfile(path):
+ mode |= stat.S_IFREG
+ elif self.fs.isdir(path):
+ mode |= stat.S_IFDIR
+ mode |= 0110 # Merge in exec bit to signal dir is listable
+ kwargs['st_mode'] = mode
return FakeStat(**kwargs)
# No link support...