@@ -32,14 +32,14 @@ def __init__(self, case_root=None, infile="env_batch.xml", read_only=False):
3232 initialize an object interface to file env_batch.xml in the case directory
3333 """
3434 self ._batchtype = None
35- self ._hidden_batch_script = {}
3635 # This arbitrary setting should always be overwritten
3736 self ._default_walltime = "00:20:00"
3837 schema = os .path .join (utils .get_schema_path (), "env_batch.xsd" )
3938 super (EnvBatch , self ).__init__ (
4039 case_root , infile , schema = schema , read_only = read_only
4140 )
4241 self ._batchtype = self .get_batch_system_type ()
42+ self ._env_workflow = None
4343
4444 # pylint: disable=arguments-differ
4545 def set_value (self , item , value , subgroup = None , ignore_type = False ):
@@ -205,14 +205,16 @@ def set_batch_system(self, batchobj, batch_system_type=None):
205205 lock_file (os .path .basename (batchobj .filename ), self ._caseroot )
206206
207207 def get_job_overrides (self , job , case ):
208- env_workflow = case .get_env ("workflow" )
208+ if not self ._env_workflow :
209+ self ._env_workflow = case .get_env ("workflow" )
209210 (
210211 total_tasks ,
211212 num_nodes ,
212213 tasks_per_node ,
213214 thread_count ,
214215 ngpus_per_node ,
215- ) = env_workflow .get_job_specs (case , job )
216+ ) = self ._env_workflow .get_job_specs (case , job )
217+
216218 overrides = {}
217219
218220 if total_tasks :
@@ -258,27 +260,12 @@ def make_batch_script(self, input_template, job, case, outfile=None):
258260 subgroup = job ,
259261 overrides = overrides ,
260262 )
261- env_workflow = case .get_env ("workflow" )
262-
263- hidden = env_workflow .get_value ("hidden" , subgroup = job )
264- # case.st_archive is not hidden for backward compatibility
265- if (
266- (job != "case.st_archive" and hidden is None )
267- or hidden == "True"
268- or hidden == "true"
269- ):
270- self ._hidden_batch_script [job ] = True
271- else :
272- self ._hidden_batch_script [job ] = False
263+ if not self ._env_workflow :
264+ self ._env_workflow = case .get_env ("workflow" )
273265
274266 output_name = (
275267 get_batch_script_for_job (
276- job ,
277- hidden = (
278- self ._hidden_batch_script [job ]
279- if job in self ._hidden_batch_script
280- else None
281- ),
268+ job , hidden = self ._env_workflow .hidden_job (case , job )
282269 )
283270 if outfile is None
284271 else outfile
@@ -299,8 +286,10 @@ def set_job_defaults(self, batch_jobs, case):
299286
300287 if self ._batchtype == "none" :
301288 return
302- env_workflow = case .get_env ("workflow" )
303- known_jobs = env_workflow .get_jobs ()
289+
290+ if not self ._env_workflow :
291+ self ._env_workflow = case .get_env ("workflow" )
292+ known_jobs = self ._env_workflow .get_jobs ()
304293
305294 for job , jsect in batch_jobs :
306295 if job not in known_jobs :
@@ -457,11 +446,13 @@ def set_job_defaults(self, batch_jobs, case):
457446 seconds = convert_to_seconds (walltime )
458447 full_bab_time = convert_to_babylonian_time (seconds )
459448 walltime = format_time (walltime_format , "%H:%M:%S" , full_bab_time )
449+ if not self ._env_workflow :
450+ self ._env_workflow = case .get_env ("workflow" )
460451
461- env_workflow .set_value (
452+ self . _env_workflow .set_value (
462453 "JOB_QUEUE" , self .text (queue ), subgroup = job , ignore_type = False
463454 )
464- env_workflow .set_value ("JOB_WALLCLOCK_TIME" , walltime , subgroup = job )
455+ self . _env_workflow .set_value ("JOB_WALLCLOCK_TIME" , walltime , subgroup = job )
465456 logger .debug (
466457 "Job {} queue {} walltime {}" .format (job , self .text (queue ), walltime )
467458 )
@@ -764,20 +755,19 @@ def submit_jobs(
764755 waiting to resubmit at the end of the first sequence
765756 workflow is a logical indicating whether only "job" is submitted or the workflow sequence starting with "job" is submitted
766757 """
767- env_workflow = case . get_env ( "workflow" )
758+
768759 external_workflow = case .get_value ("EXTERNAL_WORKFLOW" )
769- alljobs = env_workflow .get_jobs ()
760+ if not self ._env_workflow :
761+ self ._env_workflow = case .get_env ("workflow" )
762+ alljobs = self ._env_workflow .get_jobs ()
770763 alljobs = [
771764 j
772765 for j in alljobs
773766 if os .path .isfile (
774767 os .path .join (
775768 self ._caseroot ,
776769 get_batch_script_for_job (
777- j ,
778- hidden = self ._hidden_batch_script [j ]
779- if j in self ._hidden_batch_script
780- else None ,
770+ j , hidden = self ._env_workflow .hidden_job (case , j )
781771 ),
782772 )
783773 )
@@ -796,7 +786,9 @@ def submit_jobs(
796786 if index < startindex :
797787 continue
798788 try :
799- prereq = env_workflow .get_value ("prereq" , subgroup = job , resolved = False )
789+ prereq = self ._env_workflow .get_value (
790+ "prereq" , subgroup = job , resolved = False
791+ )
800792 if (
801793 external_workflow
802794 or prereq is None
@@ -815,7 +807,9 @@ def submit_jobs(
815807 ),
816808 )
817809 if prereq :
818- jobs .append ((job , env_workflow .get_value ("dependency" , subgroup = job )))
810+ jobs .append (
811+ (job , self ._env_workflow .get_value ("dependency" , subgroup = job ))
812+ )
819813
820814 if self ._batchtype == "cobalt" :
821815 break
@@ -1100,6 +1094,7 @@ def _submit_single_job(
11001094 set_continue_run = resubmit_immediate ,
11011095 submit_resubmits = workflow and not resubmit_immediate ,
11021096 )
1097+
11031098 if batch_system == "lsf" and not batch_env_flag :
11041099 sequence = (
11051100 run_args ,
@@ -1108,11 +1103,7 @@ def _submit_single_job(
11081103 batchredirect ,
11091104 get_batch_script_for_job (
11101105 job ,
1111- hidden = (
1112- self ._hidden_batch_script [job ]
1113- if job in self ._hidden_batch_script
1114- else None
1115- ),
1106+ hidden = self ._env_workflow .hidden_job (case , job ),
11161107 ),
11171108 )
11181109 elif batch_env_flag :
@@ -1125,11 +1116,7 @@ def _submit_single_job(
11251116 self ._caseroot ,
11261117 get_batch_script_for_job (
11271118 job ,
1128- hidden = (
1129- self ._hidden_batch_script [job ]
1130- if job in self ._hidden_batch_script
1131- else None
1132- ),
1119+ hidden = self ._env_workflow .hidden_job (case , job ),
11331120 ),
11341121 ),
11351122 )
@@ -1142,11 +1129,7 @@ def _submit_single_job(
11421129 self ._caseroot ,
11431130 get_batch_script_for_job (
11441131 job ,
1145- hidden = (
1146- self ._hidden_batch_script [job ]
1147- if job in self ._hidden_batch_script
1148- else None
1149- ),
1132+ hidden = self ._env_workflow .hidden_job (case , job ),
11501133 ),
11511134 ),
11521135 run_args ,
@@ -1439,12 +1422,13 @@ def compare_xml(self, other):
14391422
14401423 def make_all_batch_files (self , case ):
14411424 machdir = case .get_value ("MACHDIR" )
1442- env_workflow = case .get_env ("workflow" )
14431425 logger .info ("Creating batch scripts" )
1444- jobs = env_workflow .get_jobs ()
1426+ if not self ._env_workflow :
1427+ self ._env_workflow = case .get_env ("workflow" )
1428+ jobs = self ._env_workflow .get_jobs ()
14451429 for job in jobs :
14461430 template = case .get_resolved_value (
1447- env_workflow .get_value ("template" , subgroup = job )
1431+ self . _env_workflow .get_value ("template" , subgroup = job )
14481432 )
14491433 if os .path .isabs (template ):
14501434 input_batch_script = template
0 commit comments