diff --git a/pysqa/utils/basic.py b/pysqa/utils/basic.py index 8d7bd0e7..8e27da04 100644 --- a/pysqa/utils/basic.py +++ b/pysqa/utils/basic.py @@ -8,6 +8,7 @@ import pandas from jinja2 import Template +from jinja2.exceptions import TemplateSyntaxError from pysqa.utils.execute import execute_command from pysqa.utils.queues import Queues @@ -485,7 +486,16 @@ def _load_templates(queue_lst_dict, directory="."): for queue_dict in queue_lst_dict.values(): if "script" in queue_dict.keys(): with open(os.path.join(directory, queue_dict["script"]), "r") as f: - queue_dict["template"] = Template(f.read()) + try: + queue_dict["template"] = Template(f.read()) + except TemplateSyntaxError as error: + raise TemplateSyntaxError( + message="File: " + + queue_dict["script"] + + " - " + + error.message, + lineno=error.lineno, + ) @staticmethod def _value_error_if_none(value): diff --git a/tests/config/bad_template/bad.sh b/tests/config/bad_template/bad.sh new file mode 100644 index 00000000..43e734b0 --- /dev/null +++ b/tests/config/bad_template/bad.sh @@ -0,0 +1 @@ +{%- endif %} \ No newline at end of file diff --git a/tests/config/bad_template/queue.yaml b/tests/config/bad_template/queue.yaml new file mode 100644 index 00000000..6d63e882 --- /dev/null +++ b/tests/config/bad_template/queue.yaml @@ -0,0 +1,4 @@ +queue_type: SLURM +queue_primary: bad +queues: + bad: {cores_max: 100, cores_min: 10, run_time_max: 259200, script: bad.sh} diff --git a/tests/test_basic.py b/tests/test_basic.py index a83ebae7..bd4ca7e4 100644 --- a/tests/test_basic.py +++ b/tests/test_basic.py @@ -3,6 +3,7 @@ import os import unittest +from jinja2.exceptions import TemplateSyntaxError from pysqa import QueueAdapter from pysqa.utils.basic import BasisQueueAdapter @@ -21,9 +22,12 @@ def setUpClass(cls): cls.path = os.path.dirname(os.path.abspath(__file__)) def test_missing_config(self): - self.assertRaises( - ValueError, QueueAdapter, directory=os.path.join(self.path, "config/error") - ) + with self.assertRaises(ValueError): + QueueAdapter(directory=os.path.join(self.path, "config/error")) + + def test_bad_queue_template(self): + with self.assertRaises(TemplateSyntaxError): + QueueAdapter(directory=os.path.join(self.path, "config/bad_template")) class TestBasisQueueAdapter(unittest.TestCase):