From bc63652811f7fdc1080102bf70f0ecc7aae496d6 Mon Sep 17 00:00:00 2001 From: Murtuza Zabuawala Date: Thu, 9 Mar 2017 09:54:55 +0000 Subject: [PATCH] Fix the issue where Import/Export was failing in linux runtime. Fixes #2166 Issue: Changes done by Ashesh in pgAdmin4.py file for setting up PYTHONHOME variable to sys.prefix was applicable only for windows only. Additionally I have also added exception handling for file provided by user for Backup/Restore/Import/Export. --- web/pgAdmin4.py | 4 +++- web/pgadmin/misc/bgprocess/processes.py | 2 +- web/pgadmin/tools/backup/__init__.py | 10 ++++++++-- web/pgadmin/tools/import_export/__init__.py | 6 +++++- web/pgadmin/tools/restore/__init__.py | 5 ++++- 5 files changed, 21 insertions(+), 6 deletions(-) diff --git a/web/pgAdmin4.py b/web/pgAdmin4.py index c7382872f..6025514b8 100644 --- a/web/pgAdmin4.py +++ b/web/pgAdmin4.py @@ -100,7 +100,9 @@ if __name__ == '__main__': # the process-executor. # # Setting PYTHONHOME launch them properly. - os.environ['PYTHONHOME'] = sys.prefix + from pgadmin.utils import IS_WIN + if IS_WIN: + os.environ['PYTHONHOME'] = sys.prefix try: app.run( diff --git a/web/pgadmin/misc/bgprocess/processes.py b/web/pgadmin/misc/bgprocess/processes.py index 5fc48c7ae..457e6d343 100644 --- a/web/pgadmin/misc/bgprocess/processes.py +++ b/web/pgadmin/misc/bgprocess/processes.py @@ -217,7 +217,7 @@ class BatchProcess(object): executor = file_quote(os.path.join( os.path.dirname(u(__file__)), u'process_executor.py' )) - paths = sys.path[:] + paths = os.environ['PATH'].split(os.pathsep) interpreter = None if os.name == 'nt': diff --git a/web/pgadmin/tools/backup/__init__.py b/web/pgadmin/tools/backup/__init__.py index 099a82278..87e011c78 100644 --- a/web/pgadmin/tools/backup/__init__.py +++ b/web/pgadmin/tools/backup/__init__.py @@ -226,7 +226,10 @@ def create_backup_job(sid): else: data = json.loads(request.data, encoding='utf-8') - backup_file = filename_with_file_manager_path(data['file']) + try: + backup_file = filename_with_file_manager_path(data['file']) + except Exception as e: + return bad_request(errormsg=str(e)) # Fetch the server details like hostname, port, roles etc server = Server.query.filter_by( @@ -324,7 +327,10 @@ def create_backup_objects_job(sid): else: data = json.loads(request.data, encoding='utf-8') - backup_file = filename_with_file_manager_path(data['file']) + try: + backup_file = filename_with_file_manager_path(data['file']) + except Exception as e: + return bad_request(errormsg=str(e)) # Fetch the server details like hostname, port, roles etc server = Server.query.filter_by( diff --git a/web/pgadmin/tools/import_export/__init__.py b/web/pgadmin/tools/import_export/__init__.py index 76f71e10d..e5bd70892 100644 --- a/web/pgadmin/tools/import_export/__init__.py +++ b/web/pgadmin/tools/import_export/__init__.py @@ -223,7 +223,11 @@ def create_import_export_job(sid): storage_dir = get_storage_directory() if 'filename' in data: - _file = filename_with_file_manager_path(data['filename'], data['is_import']) + try: + _file = filename_with_file_manager_path(data['filename'], data['is_import']) + except Exception as e: + return bad_request(errormsg=str(e)) + if not _file: return bad_request(errormsg=_('Please specify a valid file')) diff --git a/web/pgadmin/tools/restore/__init__.py b/web/pgadmin/tools/restore/__init__.py index 394902fe9..393639bde 100644 --- a/web/pgadmin/tools/restore/__init__.py +++ b/web/pgadmin/tools/restore/__init__.py @@ -179,7 +179,10 @@ def create_restore_job(sid): else: data = json.loads(request.data, encoding='utf-8') - _file = filename_with_file_manager_path(data['file']) + try: + _file = filename_with_file_manager_path(data['file']) + except Exception as e: + return bad_request(errormsg=str(e)) if _file is None: return make_json_response(