|
2 | 2 | from typing import List, Optional, Tuple, Union
|
3 | 3 |
|
4 | 4 | import pandas
|
| 5 | +import yaml |
5 | 6 | from jinja2 import Template
|
6 | 7 | from jinja2.exceptions import TemplateSyntaxError
|
7 | 8 |
|
8 |
| -from pysqa.utils.core import QueueAdapterCore |
9 |
| -from pysqa.utils.execute import execute_command |
10 |
| -from pysqa.utils.queues import Queues |
11 |
| -from pysqa.utils.validate import value_error_if_none, value_in_range |
| 9 | +from pysqa.base.core import QueueAdapterCore, execute_command |
| 10 | +from pysqa.base.validate import check_queue_parameters, value_error_if_none |
| 11 | + |
| 12 | + |
| 13 | +class Queues(object): |
| 14 | + """ |
| 15 | + Queues is an abstract class simply to make the list of queues available for auto completion. This is mainly used in |
| 16 | + interactive environments like jupyter. |
| 17 | + """ |
| 18 | + |
| 19 | + def __init__(self, list_of_queues: List[str]): |
| 20 | + """ |
| 21 | + Initialize the Queues object. |
| 22 | +
|
| 23 | + Args: |
| 24 | + list_of_queues (List[str]): A list of queue names. |
| 25 | +
|
| 26 | + """ |
| 27 | + self._list_of_queues = list_of_queues |
| 28 | + |
| 29 | + def __getattr__(self, item: str) -> str: |
| 30 | + """ |
| 31 | + Get the queue name. |
| 32 | +
|
| 33 | + Args: |
| 34 | + item (str): The name of the queue. |
| 35 | +
|
| 36 | + Returns: |
| 37 | + str: The name of the queue. |
| 38 | +
|
| 39 | + Raises: |
| 40 | + AttributeError: If the queue name is not in the list of queues. |
| 41 | +
|
| 42 | + """ |
| 43 | + if item in self._list_of_queues: |
| 44 | + return item |
| 45 | + else: |
| 46 | + raise AttributeError |
| 47 | + |
| 48 | + def __dir__(self) -> List[str]: |
| 49 | + """ |
| 50 | + Get the list of queues. |
| 51 | +
|
| 52 | + Returns: |
| 53 | + List[str]: The list of queues. |
| 54 | +
|
| 55 | + """ |
| 56 | + return self._list_of_queues |
12 | 57 |
|
13 | 58 |
|
14 | 59 | class QueueAdapterWithConfig(QueueAdapterCore):
|
@@ -162,18 +207,12 @@ def check_queue_parameters(
|
162 | 207 | """
|
163 | 208 | if active_queue is None:
|
164 | 209 | active_queue = self._config["queues"][queue]
|
165 |
| - cores = value_in_range( |
166 |
| - value=cores, |
167 |
| - value_min=active_queue["cores_min"], |
168 |
| - value_max=active_queue["cores_max"], |
169 |
| - ) |
170 |
| - run_time_max = value_in_range( |
171 |
| - value=run_time_max, value_max=active_queue["run_time_max"] |
172 |
| - ) |
173 |
| - memory_max = value_in_range( |
174 |
| - value=memory_max, value_max=active_queue["memory_max"] |
| 210 | + return check_queue_parameters( |
| 211 | + active_queue=active_queue, |
| 212 | + cores=cores, |
| 213 | + run_time_max=run_time_max, |
| 214 | + memory_max=memory_max, |
175 | 215 | )
|
176 |
| - return cores, run_time_max, memory_max |
177 | 216 |
|
178 | 217 | def _job_submission_template(
|
179 | 218 | self,
|
@@ -270,3 +309,17 @@ def _load_templates(queue_lst_dict: dict, directory: str = ".") -> None:
|
270 | 309 | + error.message,
|
271 | 310 | lineno=error.lineno,
|
272 | 311 | )
|
| 312 | + |
| 313 | + |
| 314 | +def read_config(file_name: str = "queue.yaml") -> dict: |
| 315 | + """ |
| 316 | + Read and parse a YAML configuration file. |
| 317 | +
|
| 318 | + Args: |
| 319 | + file_name (str): The name of the YAML file to read. |
| 320 | +
|
| 321 | + Returns: |
| 322 | + dict: The parsed configuration as a dictionary. |
| 323 | + """ |
| 324 | + with open(file_name, "r") as f: |
| 325 | + return yaml.load(f, Loader=yaml.FullLoader) |
0 commit comments