if e.errno != errno.ENOENT:
# This is probably permission denied or worse
raise
- os.symlink(link, file_path)
+ os.symlink(
+ link, os.path.realpath(os.path.normpath(os.path.abspath(file_path)))
+ )
else:
folder = os.path.dirname(file_path)
if folder not in valid_paths:
self.__update_local_fs(from_path=from_path)
def _update_mongo_fs(self, from_path):
-
os_path = self.path + from_path
-
# Obtain list of files and dirs in filesystem
members = []
for root, dirs, files in os.walk(os_path):
# convert to relative path
rel_filename = os.path.relpath(member["filename"], self.path)
- last_modified_date = datetime.datetime.fromtimestamp(
+ # get timestamp in UTC because mongo stores upload date in UTC:
+ # https://www.mongodb.com/docs/v4.0/tutorial/model-time-data/#overview
+ last_modified_date = datetime.datetime.utcfromtimestamp(
os.path.getmtime(member["filename"])
)
remote_files.pop(rel_filename, None)
if last_modified_date >= upload_date:
-
stream = None
fh = None
try:
if stream:
stream.close()
- # delete files that are not any more in local fs
+ # delete files that are not anymore in local fs
for remote_file in remote_files.values():
for file in remote_file:
self.fs.delete(file._id)
def _get_mongo_files(self, from_path=None):
-
file_dict = {}
file_cursor = self.fs.find(no_cursor_timeout=True, sort=[("uploadDate", -1)])
for file in file_cursor: