Skip to content

Commit

Permalink
Merge pull request #52 from valentingol/master
Browse files Browse the repository at this point in the history
Improve path not found error message and solve bug
  • Loading branch information
SalzingerJ authored Aug 22, 2024
2 parents 1874770 + 1bd6ba3 commit eaccff7
Show file tree
Hide file tree
Showing 4 changed files with 17 additions and 15 deletions.
2 changes: 1 addition & 1 deletion unittests/config/test_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -780,7 +780,7 @@ def test_errors(caplog, yaml_default_sub_variations,
make_config({"param": 1, "var": {"a": 1}}, config_class=template())
with pytest.raises(Exception, match="Grid parsing failed.*"):
make_config({"param": 1, "grid": {}}, config_class=template())
with pytest.raises(Exception, match="ERROR : path not found .*"):
with pytest.raises(Exception, match="ERROR : no YAML file found at path .*"):
template()(config_path_or_dictionary="not_found")
with pytest.raises(Exception, match="'config_metadata' is a "
"special parameter.*"):
Expand Down
10 changes: 5 additions & 5 deletions yaecs/config/config_base.py
Original file line number Diff line number Diff line change
Expand Up @@ -199,10 +199,10 @@ def _get_path(path_to_check):

# If the path is absolute, use it...
if os.path.isabs(path):
path = _get_path(path)
if path is not None:
self._reference_folder = str(Path(path).parents[0])
return path
processed_path = _get_path(path)
if processed_path is not None:
self._reference_folder = str(Path(processed_path).parents[0])
return processed_path

# ... if not, search relatively to some reference folders.
else:
Expand Down Expand Up @@ -255,7 +255,7 @@ def _get_path(path_to_check):
self._reference_folder = str(Path(absolute_path).parents[0])
return filtered[0]

raise FileNotFoundError(f"ERROR : path not found ({path}).")
raise FileNotFoundError(f"ERROR : no YAML file found at path '{path}'.")

def _manual_merge(self, config_path_or_dictionary: ConfigDeclarator, do_not_pre_process: bool = False,
do_not_post_process: bool = False, source: str = 'config',
Expand Down
18 changes: 9 additions & 9 deletions yaecs/config/yaml_scanner.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,24 +59,24 @@ def update_state(self, yaml_loader, tag, node):

self.state["is_param_tag"] = bool(yaml_loader.constructed_objects) or tag.lower() == "!:no-tag:"
self.state["resolving_recursive_param"] = yaml_loader.DEFAULT_MAPPING_TAG == "!:no-tag:"
mapping_added = yaml_loader.constructed_objects and isinstance(
list(yaml_loader.constructed_objects.keys())[-1], yaml.MappingNode)
sequence_added = yaml_loader.constructed_objects and isinstance(
list(yaml_loader.constructed_objects.keys())[-1], yaml.SequenceNode)
complex_added = 0
for value in list(yaml_loader.constructed_objects.keys())[::-1]:
if isinstance(value, (yaml.MappingNode, yaml.SequenceNode)):
complex_added += 1
else:
break
node_type = "scalar" if isinstance(node, yaml.ScalarNode) else "sequence" if isinstance(
node, yaml.SequenceNode) else "mapping"

if node_type == "sequence":
self.state["sequence_depth"].append("sequence")
if sequence_added:
self.state["sequence_depth"].pop(-1)
if self.state["sequence_depth"]:
if node_type == "mapping":
self.state["sequence_depth"].append("mapping")
if mapping_added and len(yaml_loader.constructed_objects) != self.state["last_ended_mapping"]:
self.state["sequence_depth"].pop(-1)
if complex_added and len(yaml_loader.constructed_objects) != self.state["last_ended_mapping"]:
self.state["sequence_depth"] = self.state["sequence_depth"][:-complex_added]
self.state["last_ended_mapping"] = len(yaml_loader.constructed_objects)
if node_type == "mapping" or mapping_added or sequence_added:
if node_type == "mapping" or complex_added:
self.state["last_non_scalar"] = len(yaml_loader.constructed_objects)

key_counter = len(yaml_loader.constructed_objects) - self.state["last_non_scalar"]
Expand Down
2 changes: 2 additions & 0 deletions yaecs/yaecs_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -198,6 +198,8 @@ def assign_order(order: ProcessingOrder = Priority.INDIFFERENT) -> Callable[[Cal
def decorator_order(func: Callable) -> Callable:
if not hasattr(func, "yaecs_metadata"):
set_function_attribute(func, "yaecs_metadata", {})
if "name" not in func.yaecs_metadata:
func.yaecs_metadata["name"] = func.__name__
func.yaecs_metadata["order"] = order
return func

Expand Down

0 comments on commit eaccff7

Please sign in to comment.