Skip to content

Commit bed0509

Browse files
PostgresNode::bind_dir is refactored (utils.get_bin_dir is used)
If node is inited with bin_dir=None, we use a new function utils.get_bin_dir to detect bin_dir.
1 parent 6170013 commit bed0509

2 files changed

Lines changed: 42 additions & 12 deletions

File tree

src/node.py

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,6 @@
9191
from .utils import \
9292
PgVer, \
9393
eprint, \
94-
get_bin_path2, \
9594
get_pg_version2, \
9695
execute_utility2, \
9796
options_string, \
@@ -164,6 +163,7 @@ class PostgresNode(object):
164163

165164
_name: typing.Optional[str]
166165
_port: typing.Optional[int]
166+
_bin_dir: str
167167
_should_free_port: bool
168168
_os_ops: OsOperations
169169
_port_manager: typing.Optional[PortManager]
@@ -173,7 +173,7 @@ def __init__(self,
173173
name=None,
174174
base_dir=None,
175175
port: typing.Optional[int] = None,
176-
bin_dir=None,
176+
bin_dir: typing.Optional[str] = None,
177177
prefix=None,
178178
os_ops: typing.Optional[OsOperations] = None,
179179
port_manager: typing.Optional[PortManager] = None):
@@ -189,6 +189,7 @@ def __init__(self,
189189
port_manager: None or correct port manager object.
190190
"""
191191
assert port is None or type(port) is int
192+
assert bin_dir is None or type(bin_dir) is str
192193
assert os_ops is None or isinstance(os_ops, OsOperations)
193194
assert port_manager is None or isinstance(port_manager, PortManager)
194195

@@ -203,9 +204,15 @@ def __init__(self,
203204
assert self._os_ops is not None
204205
assert isinstance(self._os_ops, OsOperations)
205206

206-
self._pg_version = PgVer(get_pg_version2(self._os_ops, bin_dir))
207+
if bin_dir is not None:
208+
self._bin_dir = bin_dir
209+
else:
210+
self._bin_dir = utils.get_bin_dir(self._os_ops)
211+
212+
assert type(self._bin_dir) is str
213+
214+
self._pg_version = PgVer(get_pg_version2(self._os_ops, self._bin_dir))
207215
self._base_dir = base_dir
208-
self._bin_dir = bin_dir
209216
self._prefix = prefix
210217
self._logger = None
211218
self._master = None
@@ -488,9 +495,8 @@ def base_dir(self):
488495
return self._base_dir
489496

490497
@property
491-
def bin_dir(self):
492-
if not self._bin_dir:
493-
self._bin_dir = os.path.dirname(get_bin_path2(self._os_ops, "pg_config"))
498+
def bin_dir(self) -> str:
499+
assert type(self._bin_dir) is str
494500
return self._bin_dir
495501

496502
@property
@@ -2168,12 +2174,9 @@ def _free_port(self):
21682174
def _get_bin_path(self, filename):
21692175
assert self._os_ops is not None
21702176
assert isinstance(self._os_ops, OsOperations)
2177+
assert type(self._bin_dir) is str
21712178

2172-
if self.bin_dir:
2173-
bin_path = self._os_ops.build_path(self.bin_dir, filename)
2174-
else:
2175-
bin_path = get_bin_path2(self._os_ops, filename)
2176-
return bin_path
2179+
return self._os_ops.build_path(self._bin_dir, filename)
21772180

21782181
@staticmethod
21792182
def _escape_config_value(value):

src/utils.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,33 @@ def get_bin_path2(os_ops: OsOperations, filename):
165165
return filename
166166

167167

168+
def get_bin_dir(os_ops: OsOperations) -> str:
169+
assert os_ops is not None
170+
assert isinstance(os_ops, OsOperations)
171+
172+
if isinstance(os_ops, RemoteOperations):
173+
pg_config = os.environ.get("PG_CONFIG_REMOTE") or os.environ.get("PG_CONFIG")
174+
else:
175+
# try PG_CONFIG - get from local machine
176+
pg_config = os.environ.get("PG_CONFIG")
177+
178+
if pg_config:
179+
bindir = get_pg_config(pg_config, os_ops)["BINDIR"]
180+
return bindir
181+
182+
# try PG_BIN
183+
pg_bin = os_ops.environ("PG_BIN")
184+
if pg_bin:
185+
return pg_bin
186+
187+
pg_config_path = os_ops.find_executable('pg_config')
188+
if pg_config_path:
189+
bindir = get_pg_config(pg_config_path)["BINDIR"]
190+
return bindir
191+
192+
raise RuntimeError("BinDir is not detected.")
193+
194+
168195
def get_pg_config(pg_config_path=None, os_ops=None):
169196
"""
170197
Return output of pg_config (provided that it is installed).

0 commit comments

Comments
 (0)