diff --git a/autosubmit/autosubmit.py b/autosubmit/autosubmit.py index 11b00bbee13ea69574c1e8f0a87b14150af831c1..999d5896ddc2dcc88cfc47777b5ae38a7a0940d4 100644 --- a/autosubmit/autosubmit.py +++ b/autosubmit/autosubmit.py @@ -714,9 +714,9 @@ class Autosubmit: #Enforce LANG=C try: try: - locale.setlocale(locale.LC_ALL,'C.utf8') + locale.setlocale(locale.LC_ALL,'C.UTF-8') except: - locale.setlocale(locale.LC_ALL, 'C.UTF-8') + locale.setlocale(locale.LC_ALL, 'C.utf8') except: Log.info("Locale C.utf8 is not found, using '{0}' as fallback".format("C")) locale.setlocale(locale.LC_ALL, 'C') @@ -1872,6 +1872,7 @@ class Autosubmit: e.message) # Restore platforms and try again, to avoid endless loop with failed configuration, a hard limit is set. reconnected = False + send_mail = True while not reconnected and main_loop_retrials > 0: main_loop_retrials = main_loop_retrials - 1 sleep(30) @@ -1885,7 +1886,7 @@ class Autosubmit: )] # noinspection PyTypeChecker platforms_to_test.add(job.platform) - Autosubmit.restore_platforms(platforms_to_test,mail_notify=True,as_conf=as_conf,expid=expid) + Autosubmit.restore_platforms(platforms_to_test,mail_notify=send_mail,as_conf=as_conf,expid=expid) reconnected = True except AutosubmitCritical: # Message prompt by restore_platforms. diff --git a/autosubmit/job/job.py b/autosubmit/job/job.py index e799bf013602a8fa752d7ba4cd8d4362a25da287..0615e5d97229f29a6dbf5cbea10aca189852d86e 100644 --- a/autosubmit/job/job.py +++ b/autosubmit/job/job.py @@ -1037,6 +1037,31 @@ class Job(object): "PARAMETER export: Variable: {0} doesn't exist".format(e.message)) parameters['EXPORT'] = self.export + #PROJECT VARIABLES: + parameters['PROJECT_TYPE'] = as_conf.get_project_type().lower() + if as_conf._proj_parser is not None and parameters['PROJECT_TYPE'] != "none": + # Load project parameters + proj_param = as_conf.load_project_parameters() + variables_to_modify = [] + deep_level = 1 + max_deep_level = 10 + for key, value in proj_param.items(): + if type(proj_param[key]) is str: + look_non_sub_variables = re.findall('%(? 0: + variables_to_modify.append(key) + while len(variables_to_modify) > 0 and deep_level < max_deep_level: + for key, value in parameters.items(): + for var in variables_to_modify: + proj_param[var] = re.sub('%(? 0: + variables_to_modify.append(key) + parameters.update(proj_param) self.parameters = parameters return parameters @@ -1162,8 +1187,7 @@ class Job(object): template_content = template_content.replace("%%", "%") script_name = '{0}.cmd'.format(self.name) self.script_name = '{0}.cmd'.format(self.name) - open(os.path.join(self._tmp_path, script_name), - 'w').write(template_content) + open(os.path.join(self._tmp_path, script_name),'w').write(template_content) os.chmod(os.path.join(self._tmp_path, script_name), 0o755) return script_name diff --git a/autosubmit/job/job_packages.py b/autosubmit/job/job_packages.py index c34338bad49bb024496c1e1ebb8ee437f662c702..a9d25b562c1c5eea30159804e6407e80b8fe17a8 100644 --- a/autosubmit/job/job_packages.py +++ b/autosubmit/job/job_packages.py @@ -362,6 +362,7 @@ class JobPackageThread(JobPackageBase): self._jobs_resources = jobs_resources self._wrapper_factory = self.platform.wrapper self.current_wrapper_section = wrapper_section + self.inner_retrials = 0 if configuration is not None: self.inner_retrials = configuration.get_retrials() self.export = configuration.get_wrapper_export(self.current_wrapper_section) diff --git a/test/unit/test_job.py b/test/unit/test_job.py index 5248377d4ad07233ea70432c9a9b6e84dc31e958..bbf369aa46802c325e7a86c0f4eba8297864ee03 100644 --- a/test/unit/test_job.py +++ b/test/unit/test_job.py @@ -173,7 +173,6 @@ class TestJob(TestCase): with patch.object(builtins, "open", open_mock): # act self.job.create_script(config) - # assert update_content_mock.assert_called_with(config) open_mock.assert_called_with(os.path.join(self.job._tmp_path, self.job.name + '.cmd'), 'w') @@ -259,13 +258,16 @@ class TestJob(TestCase): as_conf.get_wallclock = Mock(return_value='00:30') as_conf.get_member_list = Mock(return_value=[]) as_conf.get_custom_directives = Mock(return_value='["whatever"]') - + as_conf.load_project_parameters = Mock(return_value=dict()) + self.job.parameters['PROJECT_TYPE'] = "none" dummy_serial_platform = Mock() dummy_serial_platform.name = 'serial' dummy_platform = Mock() dummy_platform.serial_platform = dummy_serial_platform dummy_platform.custom_directives = '["whatever"]' + self.job._platform = dummy_platform + # Act parameters = self.job.update_parameters(as_conf, dict()) # Assert diff --git a/test/unit/test_job_package.py b/test/unit/test_job_package.py index a695c95bbec9dd43935701b4058766a334331ea4..147ffec5298284f1eebf6db2516845860288e9c2 100644 --- a/test/unit/test_job_package.py +++ b/test/unit/test_job_package.py @@ -45,6 +45,11 @@ class TestJobPackage(TestCase): def test_job_package_submission(self): # arrange + write_mock = Mock().write = Mock() + self._tmp_path = Mock() + for job in self.jobs: + job._get_paramiko_template = Mock("false","empty") + self.job_package._create_scripts = Mock() self.job_package._send_files = Mock() self.job_package._do_submission = Mock()