22
33import json
44import warnings
5- from unittest .mock import MagicMock , patch , PropertyMock
5+ from unittest .mock import MagicMock , patch
66
77import pytest
88
@@ -1057,9 +1057,10 @@ def test_declaration_wins_over_the_model_trainer_branch(self):
10571057 def test_train_returns_step_arguments_and_submits_nothing (self ):
10581058 session = self ._pipeline_session ()
10591059 trainer = self ._make_trainer (sagemaker_session = session )
1060- with self ._pinned_name (), patch (
1061- "sagemaker.train.multi_turn_rl_trainer.Job.create"
1062- ) as mock_create :
1060+ with (
1061+ self ._pinned_name (),
1062+ patch ("sagemaker.train.multi_turn_rl_trainer.Job.create" ) as mock_create ,
1063+ ):
10631064 step_args = trainer .train ()
10641065 assert isinstance (step_args , _StepArguments )
10651066 assert step_args .caller_name == "create_job"
@@ -1137,9 +1138,7 @@ def test_wait_is_overridden_and_announced(self):
11371138 warnings .simplefilter ("always" )
11381139 step_args = trainer .train (wait = True )
11391140 assert step_args .func_kwargs .get ("wait" ) is False
1140- assert any (
1141- "No Wait" in str (w .message ) for w in caught
1142- ), [str (w .message ) for w in caught ]
1141+ assert any ("No Wait" in str (w .message ) for w in caught ), [str (w .message ) for w in caught ]
11431142
11441143 # --- parity with the direct submission path -------------------------------
11451144
@@ -1151,11 +1150,13 @@ def _record(**kwargs):
11511150 recorded .update (kwargs )
11521151 return MagicMock ()
11531152
1154- with self ._pinned_name (), patch (
1155- "sagemaker.train.multi_turn_rl_trainer.Job.create" , side_effect = _record
1156- ), patch (
1157- "sagemaker.train.multi_turn_rl_trainer.AgentRFTJob.from_job" ,
1158- return_value = MagicMock (),
1153+ with (
1154+ self ._pinned_name (),
1155+ patch ("sagemaker.train.multi_turn_rl_trainer.Job.create" , side_effect = _record ),
1156+ patch (
1157+ "sagemaker.train.multi_turn_rl_trainer.AgentRFTJob.from_job" ,
1158+ return_value = MagicMock (),
1159+ ),
11591160 ):
11601161 trainer .train (wait = False )
11611162 return recorded
@@ -1203,9 +1204,9 @@ def test_captured_request_matches_what_job_create_would_send(self):
12031204 }
12041205
12051206 session = self ._pipeline_session ()
1206- captured = dict (self . _capture (
1207- self ._make_trainer (sagemaker_session = session , tags = tags ), session
1208- ). args )
1207+ captured = dict (
1208+ self ._capture ( self . _make_trainer (sagemaker_session = session , tags = tags ), session ). args
1209+ )
12091210 # The document is captured as the raw config dict for JobStep to scope and
12101211 # encode; compare it to the direct route's config, and the rest to the wire.
12111212 document = captured .pop ("JobConfigDocument" )
@@ -1221,9 +1222,9 @@ def test_captured_request_matches_job_create_with_both_tag_forms(self):
12211222 self ._make_trainer (sagemaker_session = self ._direct_session (), tags = tags )
12221223 )
12231224 session = self ._pipeline_session ()
1224- captured = dict (self . _capture (
1225- self ._make_trainer (sagemaker_session = session , tags = tags ), session
1226- ). args )
1225+ captured = dict (
1226+ self ._capture ( self . _make_trainer (sagemaker_session = session , tags = tags ), session ). args
1227+ )
12271228 document = captured .pop ("JobConfigDocument" )
12281229 assert document == json .loads (direct ["job_config_document" ])
12291230 wire = self ._job_create_wire_request (direct , direct ["job_config_document" ])
@@ -1256,7 +1257,9 @@ def test_document_describes_the_same_config_on_both_routes(self):
12561257 session = self ._pipeline_session ()
12571258 trainer = self ._make_trainer (sagemaker_session = session )
12581259 captured = self ._capture (trainer , session ).args ["JobConfigDocument" ]
1259- direct = self ._make_trainer (sagemaker_session = self ._direct_session ())._build_job_config_document ()
1260+ direct = self ._make_trainer (
1261+ sagemaker_session = self ._direct_session ()
1262+ )._build_job_config_document ()
12601263 assert isinstance (captured , dict )
12611264 assert captured == json .loads (direct )
12621265
@@ -1281,7 +1284,8 @@ def test_pipeline_variable_in_the_job_config_survives_capture(self):
12811284 def test_pipeline_variable_document_would_be_a_type_error_unencoded (self ):
12821285 """Locks the reason the encoder is needed rather than assuming it."""
12831286 trainer = self ._make_trainer (
1284- sagemaker_session = self ._direct_session (), s3_output_path = ParameterString (name = "OutputPath" )
1287+ sagemaker_session = self ._direct_session (),
1288+ s3_output_path = ParameterString (name = "OutputPath" ),
12851289 )
12861290 with pytest .raises (TypeError , match = "not JSON serializable" ):
12871291 trainer ._build_job_config_document ()
@@ -1292,11 +1296,13 @@ def test_direct_path_still_submits_and_returns_a_job(self):
12921296 """Criterion: a normal session behaves exactly as before."""
12931297 job_handle = MagicMock ()
12941298 trainer = self ._make_trainer (sagemaker_session = self ._direct_session ())
1295- with self ._pinned_name (), patch (
1296- "sagemaker.train.multi_turn_rl_trainer.Job.create"
1297- ) as mock_create , patch (
1298- "sagemaker.train.multi_turn_rl_trainer.AgentRFTJob.from_job" ,
1299- return_value = job_handle ,
1299+ with (
1300+ self ._pinned_name (),
1301+ patch ("sagemaker.train.multi_turn_rl_trainer.Job.create" ) as mock_create ,
1302+ patch (
1303+ "sagemaker.train.multi_turn_rl_trainer.AgentRFTJob.from_job" ,
1304+ return_value = job_handle ,
1305+ ),
13001306 ):
13011307 returned = trainer .train (wait = False )
13021308 mock_create .assert_called_once ()
@@ -1307,11 +1313,13 @@ def test_direct_path_still_submits_and_returns_a_job(self):
13071313 def test_direct_path_honours_wait (self ):
13081314 job_handle = MagicMock ()
13091315 trainer = self ._make_trainer (sagemaker_session = self ._direct_session ())
1310- with self ._pinned_name (), patch (
1311- "sagemaker.train.multi_turn_rl_trainer.Job.create"
1312- ), patch (
1313- "sagemaker.train.multi_turn_rl_trainer.AgentRFTJob.from_job" ,
1314- return_value = job_handle ,
1316+ with (
1317+ self ._pinned_name (),
1318+ patch ("sagemaker.train.multi_turn_rl_trainer.Job.create" ),
1319+ patch (
1320+ "sagemaker.train.multi_turn_rl_trainer.AgentRFTJob.from_job" ,
1321+ return_value = job_handle ,
1322+ ),
13151323 ):
13161324 trainer .train (wait = True )
13171325 job_handle .wait .assert_called_once ()
0 commit comments