def test_creation_and_hydration(self): (ri1, run_id, experiment_id, user_id, status, start_time, end_time, lifecycle_stage, artifact_uri) = self._create() self._check(ri1, run_id, experiment_id, user_id, status, start_time, end_time, lifecycle_stage, artifact_uri) as_dict = { "run_uuid": run_id, "run_id": run_id, "experiment_id": experiment_id, "user_id": user_id, "status": status, "start_time": start_time, "end_time": end_time, "lifecycle_stage": lifecycle_stage, "artifact_uri": artifact_uri } self.assertEqual(dict(ri1), as_dict) proto = ri1.to_proto() ri2 = RunInfo.from_proto(proto) self._check(ri2, run_id, experiment_id, user_id, status, start_time, end_time, lifecycle_stage, artifact_uri) ri3 = RunInfo.from_dictionary(as_dict) self._check(ri3, run_id, experiment_id, user_id, status, start_time, end_time, lifecycle_stage, artifact_uri) # Test that we can add a field to RunInfo and still deserialize it from a dictionary dict_copy_0 = as_dict.copy() dict_copy_0["my_new_field"] = "new field value" ri4 = RunInfo.from_dictionary(dict_copy_0) self._check(ri4, run_id, experiment_id, user_id, status, start_time, end_time, lifecycle_stage, artifact_uri)
def update_run_info(self, run_id, run_status, end_time): """ Updates the metadata of the specified run. """ req_body = message_to_json( UpdateRun(run_uuid=run_id, run_id=run_id, status=run_status, end_time=end_time)) response_proto = self._call_endpoint(UpdateRun, req_body) return RunInfo.from_proto(response_proto.run_info)