in ossdbtoolsservice/disaster_recovery/disaster_recovery_service.py [0:0]
def _get_pg_exe_path(exe_name: str, server_version: Tuple[int, int, int]) -> str:
"""
Find the path to the given PostgreSQL utility executable for the current operating system in a server specific version folder
:param exe_name: The name of the program to find (without .exe). e.g. 'pg_dump'
:param server_version: Tuple of the connected server version components (major, minor, ignored)
:returns: The path to the requested executable
:raises ValueError: if there is no file corresponding to the given exe_name
"""
base_location = os.path.join(os.path.dirname(sys.argv[0]), 'pg_exes')
platform = sys.platform
if platform == 'win32':
os_root = os.path.join(base_location, 'win')
path_suffix = exe_name + '.exe'
elif platform == 'darwin':
os_root = os.path.join(base_location, 'mac')
path_suffix = os.path.join('bin', exe_name)
else:
os_root = os.path.join(base_location, 'linux')
path_suffix = os.path.join('bin', exe_name)
# Get the list of folders in the os specific root folder
all_folders: List[str] = [os.path.normpath(x[0]) for x in os.walk(os_root)]
for folder in all_folders:
folderName = os.path.basename(folder)
version = folderName.split('.')
# Get the major version value
try:
major = int(version[0])
except ValueError:
major = 0
minor = 0
# Set minor version if version length is more than 1 (ex 9.5, 9.6)
if (len(version) > 1):
try:
minor = int(version[1])
except ValueError:
minor = 0
if major == int(server_version[0]) and minor == server_version[1]:
exe_path = os.path.join(folder, path_suffix)
if not os.path.exists(exe_path):
raise ValueError(f'Could not find executable file {exe_path}')
return exe_path
version_string = '.'.join(str(ver) for ver in server_version)
raise ValueError(f'Exe folder {os_root} does not contain {exe_name} for version {version_string}')