From c17e201a92b03404065fd6518f8d33593d64e7a7 Mon Sep 17 00:00:00 2001 From: Neel Patel Date: Fri, 3 Feb 2017 15:19:21 +0100 Subject: [PATCH] Handle saved directories that no longer exist gracefully. Fixes #2110 --- web/pgadmin/misc/file_manager/__init__.py | 47 +++++++++++++---------- 1 file changed, 27 insertions(+), 20 deletions(-) diff --git a/web/pgadmin/misc/file_manager/__init__.py b/web/pgadmin/misc/file_manager/__init__.py index 6e187fb78..8542cdf1f 100644 --- a/web/pgadmin/misc/file_manager/__init__.py +++ b/web/pgadmin/misc/file_manager/__init__.py @@ -317,34 +317,41 @@ class Filemanager(object): # get last visited directory, if not present then traverse in reverse # order to find closest parent directory last_dir = blueprint.last_directory_visited.get() + check_dir_exists = False if storage_dir is None: if last_dir is None: last_dir = "/" + else: + check_dir_exists = True else: if last_dir is not None: - if len(last_dir) > 1 and \ - (last_dir.endswith('/') or last_dir.endswith('\\')): - last_dir = last_dir[:-1] - while last_dir: - if os.path.exists(storage_dir + last_dir): - break - if _platform == 'win32': - index = max(last_dir.rfind('\\'), last_dir.rfind('/')) - else: - index = last_dir.rfind('/') - last_dir = last_dir[0:index] - if not last_dir: - last_dir = u"/" - - if _platform == 'win32': - if not (last_dir.endswith('\\') or last_dir.endswith('/')): - last_dir += u"\\" - else: - if not last_dir.endswith('/'): - last_dir += u"/" + check_dir_exists = True else: last_dir = u"/" + if check_dir_exists: + if len(last_dir) > 1 and \ + (last_dir.endswith('/') or last_dir.endswith('\\')): + last_dir = last_dir[:-1] + while last_dir: + if os.path.exists( + (storage_dir if storage_dir is not None else '') + last_dir): + break + if _platform == 'win32': + index = max(last_dir.rfind('\\'), last_dir.rfind('/')) + else: + index = last_dir.rfind('/') + last_dir = last_dir[0:index] + if not last_dir: + last_dir = u"/" + + if _platform == 'win32': + if not (last_dir.endswith('\\') or last_dir.endswith('/')): + last_dir += u"\\" + else: + if not last_dir.endswith('/'): + last_dir += u"/" + # create configs using above configs configs = { "fileroot": last_dir.replace('\\', '\\\\'), # for JS json compatibility