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

Commitac0a2bb

Browse files
PostgresNode is updated [os_ops and clone_with_new_name_and_base_dir]
1) Constructor of PostgresNode can get an explicit os_ops object2) PostgresNode::os_ops property is added3) New method PostgresNode::clone_with_new_name_and_base_dir is addedIt is used to right clone an object in NodeBackup::spawn_primary
1 parentea11496 commitac0a2bb

File tree

2 files changed

+59
-10
lines changed

2 files changed

+59
-10
lines changed

‎testgres/backup.py

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -147,8 +147,19 @@ def spawn_primary(self, name=None, destroy=True):
147147
base_dir=self._prepare_dir(destroy)
148148

149149
# Build a new PostgresNode
150-
NodeClass=self.original_node.__class__
151-
withclean_on_error(NodeClass(name=name,base_dir=base_dir,conn_params=self.original_node.os_ops.conn_params))asnode:
150+
assertself.original_nodeisnotNone
151+
152+
if (hasattr(self.original_node,"clone_with_new_name_and_base_dir")):
153+
node=self.original_node.clone_with_new_name_and_base_dir(name=name,base_dir=base_dir)
154+
else:
155+
# For backward compatibility
156+
NodeClass=self.original_node.__class__
157+
node=NodeClass(name=name,base_dir=base_dir,conn_params=self.original_node.os_ops.conn_params)
158+
159+
assertnodeisnotNone
160+
asserttype(node)==self.original_node.__class__# noqa: E721
161+
162+
withclean_on_error(node)asnode:
152163

153164
# New nodes should always remove dir tree
154165
node._should_rm_dirs=True

‎testgres/node.py

Lines changed: 46 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,7 @@
100100
from .backupimportNodeBackup
101101

102102
from .operations.os_opsimportConnectionParams
103+
from .operations.os_opsimportOsOperations
103104
from .operations.local_opsimportLocalOperations
104105
from .operations.remote_opsimportRemoteOperations
105106

@@ -135,7 +136,7 @@ class PostgresNode(object):
135136
_C_MAX_START_ATEMPTS=5
136137

137138
def__init__(self,name=None,base_dir=None,port=None,conn_params:ConnectionParams=ConnectionParams(),
138-
bin_dir=None,prefix=None):
139+
bin_dir=None,prefix=None,os_ops=None):
139140
"""
140141
PostgresNode constructor.
141142
@@ -157,17 +158,20 @@ def __init__(self, name=None, base_dir=None, port=None, conn_params: ConnectionP
157158

158159
# basic
159160
self.name=nameorgenerate_app_name()
160-
iftestgres_config.os_ops:
161-
self.os_ops=testgres_config.os_ops
162-
elifconn_params.ssh_key:
163-
self.os_ops=RemoteOperations(conn_params)
161+
ifos_opsisNone:
162+
os_ops=__class__._get_os_ops(conn_params)
164163
else:
165-
self.os_ops=LocalOperations(conn_params)
164+
assertconn_paramsisNone
165+
pass
166166

167-
self.host=self.os_ops.host
167+
assertos_opsisnotNone
168+
assertisinstance(os_ops,OsOperations)
169+
self._os_ops=os_ops
170+
171+
self.host=os_ops.host
168172
self.port=portorutils.reserve_port()
169173

170-
self.ssh_key=self.os_ops.ssh_key
174+
self.ssh_key=os_ops.ssh_key
171175

172176
# defaults for __exit__()
173177
self.cleanup_on_good_exit=testgres_config.node_cleanup_on_good_exit
@@ -204,6 +208,40 @@ def __repr__(self):
204208
return"{}(name='{}', port={}, base_dir='{}')".format(
205209
self.__class__.__name__,self.name,self.port,self.base_dir)
206210

211+
@staticmethod
212+
def_get_os_ops(conn_params:ConnectionParams)->OsOperations:
213+
iftestgres_config.os_ops:
214+
returntestgres_config.os_ops
215+
216+
asserttype(conn_params)==ConnectionParams# noqa: E721
217+
218+
ifconn_params.ssh_key:
219+
returnRemoteOperations(conn_params)
220+
221+
returnLocalOperations(conn_params)
222+
223+
defclone_with_new_name_and_base_dir(self,name:str,base_dir:str):
224+
assertnameisNoneortype(name)==str# noqa: E721
225+
assertbase_dirisNoneortype(base_dir)==str# noqa: E721
226+
227+
assert__class__==PostgresNode
228+
229+
node=PostgresNode(
230+
name=name,
231+
base_dir=base_dir,
232+
conn_params=None,
233+
bin_dir=self._bin_dir,
234+
prefix=self._prefix,
235+
os_ops=self._os_ops)
236+
237+
returnnode
238+
239+
@property
240+
defos_ops(self)->OsOperations:
241+
assertself._os_opsisnotNone
242+
assertisinstance(self._os_ops,OsOperations)
243+
returnself._os_ops
244+
207245
@property
208246
defpid(self):
209247
"""

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp