Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit70bd512

Browse files
authored
Merge pull request#38 from funbringer/remove_prepare_dirs
replace function _prepare_dirs() with smart properties
2 parents4241471 +ec94f99 commit70bd512

File tree

3 files changed

+58
-57
lines changed

3 files changed

+58
-57
lines changed

‎testgres/api.py

Lines changed: 5 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -33,19 +33,11 @@
3333
Copyright (c) 2016, Postgres Professional
3434
"""
3535

36-
from .nodeimportPostgresNode
37-
36+
fromfunctoolsimportwraps
3837

39-
defget_new_node(name=None,base_dir=None):
40-
"""
41-
Create a new node (select port automatically).
42-
43-
Args:
44-
name: node's application name.
45-
base_dir: path to node's data directory.
38+
from .nodeimportPostgresNode
4639

47-
Returns:
48-
An instance of PostgresNode.
49-
"""
5040

51-
returnPostgresNode(name=name,base_dir=base_dir)
41+
@wraps(PostgresNode.__init__)
42+
defget_new_node(**kwargs):
43+
returnPostgresNode(**kwargs)

‎testgres/consts.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
RECOVERY_CONF_FILE="recovery.conf"
1818
PG_AUTO_CONF_FILE="postgresql.auto.conf"
1919
PG_CONF_FILE="postgresql.conf"
20+
PG_PID_FILE='postmaster.pid'
2021
HBA_CONF_FILE="pg_hba.conf"
2122

2223
# names for log files

‎testgres/node.py

Lines changed: 52 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,8 @@
3131
HBA_CONF_FILE, \
3232
RECOVERY_CONF_FILE, \
3333
PG_LOG_FILE, \
34-
UTILS_LOG_FILE
34+
UTILS_LOG_FILE, \
35+
PG_PID_FILE
3536

3637
from .decoratorsimport \
3738
method_decorator, \
@@ -66,32 +67,33 @@
6667
classPostgresNode(object):
6768
def__init__(self,name=None,port=None,base_dir=None):
6869
"""
69-
Create a new node manually.
70+
Create a new node.
7071
7172
Args:
7273
name: node's application name.
7374
port: port to accept connections.
7475
base_dir: path to node's data directory.
7576
"""
7677

78+
# private
79+
self._should_free_port=portisNone
80+
self._base_dir=base_dir
81+
self._logger=None
82+
self._master=None
83+
7784
# basic
7885
self.host='127.0.0.1'
7986
self.name=nameorgenerate_app_name()
8087
self.port=portorreserve_port()
81-
self.base_dir=base_dir
8288

8389
# defaults for __exit__()
8490
self.cleanup_on_good_exit=testgres_config.node_cleanup_on_good_exit
8591
self.cleanup_on_bad_exit=testgres_config.node_cleanup_on_bad_exit
8692
self.shutdown_max_attempts=3
8793

88-
# private
89-
self._should_free_port=portisNone
90-
self._logger=None
91-
self._master=None
92-
93-
# create directories if needed
94-
self._prepare_dirs()
94+
# NOTE: for compatibility
95+
self.utils_log_name=self.utils_log_file
96+
self.pg_log_name=self.pg_log_file
9597

9698
def__enter__(self):
9799
returnself
@@ -121,19 +123,37 @@ def master(self):
121123
returnself._master
122124

123125
@property
124-
defdata_dir(self):
125-
returnos.path.join(self.base_dir,DATA_DIR)
126+
defbase_dir(self):
127+
ifnotself._base_dir:
128+
self._base_dir=mkdtemp(prefix=TMP_NODE)
129+
130+
# NOTE: it's safe to create a new dir
131+
ifnotos.path.exists(self._base_dir):
132+
os.makedirs(self._base_dir)
133+
134+
returnself._base_dir
126135

127136
@property
128137
deflogs_dir(self):
129-
returnos.path.join(self.base_dir,LOGS_DIR)
138+
path=os.path.join(self.base_dir,LOGS_DIR)
139+
140+
# NOTE: it's safe to create a new dir
141+
ifnotos.path.exists(path):
142+
os.makedirs(path)
143+
144+
returnpath
145+
146+
@property
147+
defdata_dir(self):
148+
# NOTE: we can't run initdb without user's args
149+
returnos.path.join(self.base_dir,DATA_DIR)
130150

131151
@property
132-
defutils_log_name(self):
152+
defutils_log_file(self):
133153
returnos.path.join(self.logs_dir,UTILS_LOG_FILE)
134154

135155
@property
136-
defpg_log_name(self):
156+
defpg_log_file(self):
137157
returnos.path.join(self.logs_dir,PG_LOG_FILE)
138158

139159
def_try_shutdown(self,max_attempts):
@@ -189,21 +209,11 @@ def _create_recovery_conf(self, username):
189209

190210
self.append_conf(RECOVERY_CONF_FILE,line)
191211

192-
def_prepare_dirs(self):
193-
ifnotself.base_dir:
194-
self.base_dir=mkdtemp(prefix=TMP_NODE)
195-
196-
ifnotos.path.exists(self.base_dir):
197-
os.makedirs(self.base_dir)
198-
199-
ifnotos.path.exists(self.logs_dir):
200-
os.makedirs(self.logs_dir)
201-
202212
def_maybe_start_logger(self):
203213
iftestgres_config.use_python_logging:
204214
# spawn new logger if it doesn't exist or is stopped
205215
ifnotself._loggerornotself._logger.is_alive():
206-
self._logger=TestgresLogger(self.name,self.pg_log_name)
216+
self._logger=TestgresLogger(self.name,self.pg_log_file)
207217
self._logger.start()
208218

209219
def_maybe_stop_logger(self):
@@ -219,7 +229,7 @@ def _collect_special_files(self):
219229
(os.path.join(self.data_dir,PG_AUTO_CONF_FILE),0),
220230
(os.path.join(self.data_dir,RECOVERY_CONF_FILE),0),
221231
(os.path.join(self.data_dir,HBA_CONF_FILE),0),
222-
(self.pg_log_name,testgres_config.error_log_lines)
232+
(self.pg_log_file,testgres_config.error_log_lines)
223233
]
224234

225235
forf,num_linesinfiles:
@@ -254,12 +264,9 @@ def init(self, initdb_params=None, **kwargs):
254264
This instance of PostgresNode.
255265
"""
256266

257-
# create directories if needed
258-
self._prepare_dirs()
259-
260267
# initialize this PostgreSQL node
261268
cached_initdb(data_dir=self.data_dir,
262-
logfile=self.utils_log_name,
269+
logfile=self.utils_log_file,
263270
params=initdb_params)
264271

265272
# initialize default config files
@@ -398,7 +405,7 @@ def status(self):
398405
"-D",self.data_dir,
399406
"status"
400407
]
401-
execute_utility(_params,self.utils_log_name)
408+
execute_utility(_params,self.utils_log_file)
402409
returnNodeStatus.Running
403410

404411
exceptExecUtilExceptionase:
@@ -416,7 +423,7 @@ def get_pid(self):
416423
"""
417424

418425
ifself.status():
419-
pid_file=os.path.join(self.data_dir,'postmaster.pid')
426+
pid_file=os.path.join(self.data_dir,PG_PID_FILE)
420427
withio.open(pid_file)asf:
421428
returnint(f.readline())
422429

@@ -433,7 +440,7 @@ def get_control_data(self):
433440
_params+= ["-D"]ifpg_version_ge('9.5')else []
434441
_params+= [self.data_dir]
435442

436-
data=execute_utility(_params,self.utils_log_name)
443+
data=execute_utility(_params,self.utils_log_file)
437444

438445
out_dict= {}
439446

@@ -458,13 +465,13 @@ def start(self, params=[]):
458465
_params= [
459466
get_bin_path("pg_ctl"),
460467
"-D",self.data_dir,
461-
"-l",self.pg_log_name,
468+
"-l",self.pg_log_file,
462469
"-w",# wait
463470
"start"
464471
]+params
465472

466473
try:
467-
execute_utility(_params,self.utils_log_name)
474+
execute_utility(_params,self.utils_log_file)
468475
exceptExecUtilExceptionase:
469476
msg='Cannot start node'
470477
files=self._collect_special_files()
@@ -493,7 +500,7 @@ def stop(self, params=[]):
493500
"stop"
494501
]+params
495502

496-
execute_utility(_params,self.utils_log_name)
503+
execute_utility(_params,self.utils_log_file)
497504

498505
self._maybe_stop_logger()
499506

@@ -514,13 +521,13 @@ def restart(self, params=[]):
514521
_params= [
515522
get_bin_path("pg_ctl"),
516523
"-D",self.data_dir,
517-
"-l",self.pg_log_name,
524+
"-l",self.pg_log_file,
518525
"-w",# wait
519526
"restart"
520527
]+params
521528

522529
try:
523-
execute_utility(_params,self.utils_log_name)
530+
execute_utility(_params,self.utils_log_file)
524531
exceptExecUtilExceptionase:
525532
msg='Cannot restart node'
526533
files=self._collect_special_files()
@@ -549,7 +556,7 @@ def reload(self, params=[]):
549556
"reload"
550557
]+params
551558

552-
execute_utility(_params,self.utils_log_name)
559+
execute_utility(_params,self.utils_log_file)
553560

554561
defpg_ctl(self,params):
555562
"""
@@ -569,7 +576,7 @@ def pg_ctl(self, params):
569576
"-w"# wait
570577
]+params
571578

572-
returnexecute_utility(_params,self.utils_log_name)
579+
returnexecute_utility(_params,self.utils_log_file)
573580

574581
deffree_port(self):
575582
"""
@@ -578,6 +585,7 @@ def free_port(self):
578585
"""
579586

580587
ifself._should_free_port:
588+
self._should_free_port=False
581589
release_port(self.port)
582590

583591
defcleanup(self,max_attempts=3):
@@ -717,7 +725,7 @@ def tmpfile():
717725
"-d",dbname
718726
]
719727

720-
execute_utility(_params,self.utils_log_name)
728+
execute_utility(_params,self.utils_log_file)
721729

722730
returnfilename
723731

@@ -953,7 +961,7 @@ def pgbench_run(self,
953961
**kwargs):
954962
"""
955963
Run pgbench with some options.
956-
This event is logged (see self.utils_log_name).
964+
This event is logged (see self.utils_log_file).
957965
958966
Args:
959967
dbname: database name to connect to.
@@ -996,7 +1004,7 @@ def pgbench_run(self,
9961004
# should be the last one
9971005
_params.append(dbname)
9981006

999-
returnexecute_utility(_params,self.utils_log_name)
1007+
returnexecute_utility(_params,self.utils_log_file)
10001008

10011009
defconnect(self,dbname=None,username=None,password=None):
10021010
"""

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp