@@ -247,8 +247,8 @@ def is_equal(
247247 ignore_paths = [ignore_paths ]
248248
249249 return cls ._compare_nested (
250- d1 = cls .remove_comments (data1 , comment_start , comment_end ),
251- d2 = cls .remove_comments (data2 , comment_start , comment_end ),
250+ data1 = cls .remove_comments (data1 , comment_start , comment_end ),
251+ data2 = cls .remove_comments (data2 , comment_start , comment_end ),
252252 ignore_paths = [str (path ).split (path_sep ) for path in ignore_paths if path ],
253253 )
254254
@@ -339,14 +339,11 @@ def set_value_by_path_id(cls, data: DataStructure, update_values: dict[str, Any]
339339 { "1>012": "new value", "1>31": ["new value 1", "new value 2"], ... }
340340 ```
341341 The path IDs should have been created using `Data.get_path_id()`."""
342-
343- valid_entries = [(path_id , new_val ) for path_id , new_val in update_values .items ()]
344- if not valid_entries :
342+ if not (valid_update_values := [(path_id , new_val ) for path_id , new_val in update_values .items ()]):
345343 raise ValueError (f"No valid 'update_values' found in dictionary:\n { update_values !r} " )
346344
347- for path_id , new_val in valid_entries :
348- path = cls ._sep_path_id (path_id )
349- data = cls ._set_nested_val (data , path , new_val )
345+ for path_id , new_val in valid_update_values :
346+ data = cls ._set_nested_val (data , id_path = cls ._sep_path_id (path_id ), value = new_val )
350347
351348 return data
352349
@@ -464,33 +461,33 @@ def print(
464461 @classmethod
465462 def _compare_nested (
466463 cls ,
467- d1 : DataStructure ,
468- d2 : DataStructure ,
464+ data1 : DataStructure ,
465+ data2 : DataStructure ,
469466 ignore_paths : list [list [str ]],
470467 current_path : list [str ] = [],
471468 ) -> bool :
472469 if any (current_path == path [:len (current_path )] for path in ignore_paths ):
473470 return True
474- if type (d1 ) is not type (d2 ):
471+ if type (data1 ) is not type (data2 ):
475472 return False
476- if isinstance (d1 , dict ) and isinstance (d2 , dict ):
477- if set (d1 .keys ()) != set (d2 .keys ()):
473+ if isinstance (data1 , dict ) and isinstance (data2 , dict ):
474+ if set (data1 .keys ()) != set (data2 .keys ()):
478475 return False
479- return all (cls ._compare_nested (d1 [key ], d2 [key ], ignore_paths , current_path + [key ]) for key in d1 )
480- if isinstance (d1 , (list , tuple )):
481- if len (d1 ) != len (d2 ):
476+ return all (cls ._compare_nested (data1 [key ], data2 [key ], ignore_paths , current_path + [key ]) for key in data1 )
477+ if isinstance (data1 , (list , tuple )):
478+ if len (data1 ) != len (data2 ):
482479 return False
483480 return all (
484481 cls ._compare_nested (item1 , item2 , ignore_paths , current_path + [str (i )])
485- for i , (item1 , item2 ) in enumerate (zip (d1 , d2 ))
482+ for i , (item1 , item2 ) in enumerate (zip (data1 , data2 ))
486483 )
487- if isinstance (d1 , (set , frozenset )):
488- return d1 == d2
489- return d1 == d2
484+ if isinstance (data1 , (set , frozenset )):
485+ return data1 == data2
486+ return data1 == data2
490487
491488 @staticmethod
492489 def _sep_path_id (path_id : str ) -> list [int ]:
493- """Internal method to separate a path ID into its ID parts."""
490+ """Internal method to separate a path- ID string into its ID parts as a list of integers ."""
494491 if len (split_id := path_id .split (">" )) == 2 :
495492 id_part_len , path_id_parts = split_id
496493
@@ -546,23 +543,24 @@ def _get_path_id(path: str, path_sep: str, data_obj: DataStructure, ignore_not_f
546543 return f"{ max_id_length } >{ '' .join (id .zfill (max_id_length ) for id in path_ids )} "
547544
548545 @classmethod
549- def _set_nested_val (cls , data : DataStructure , path : list [int ], value : Any ) -> DataStructure :
550- if len (path ) == 1 :
546+ def _set_nested_val (cls , data : DataStructure , id_path : list [int ], value : Any ) -> DataStructure :
547+ """Internal method to set a value in a nested data structure based on the provided ID path."""
548+ if len (id_path ) == 1 :
551549 if isinstance (data , dict ):
552550 keys , data = list (data .keys ()), dict (data )
553- data [keys [path [0 ]]] = value
551+ data [keys [id_path [0 ]]] = value
554552 elif isinstance (data , IndexIterableTypes ):
555553 was_t , data = type (data ), list (data )
556- data [path [0 ]] = value
554+ data [id_path [0 ]] = value
557555 data = was_t (data )
558556
559557 else :
560558 if isinstance (data , dict ):
561559 keys , data = list (data .keys ()), dict (data )
562- data [keys [path [0 ]]] = cls ._set_nested_val (data [keys [path [0 ]]], path [1 :], value )
560+ data [keys [id_path [0 ]]] = cls ._set_nested_val (data [keys [id_path [0 ]]], id_path [1 :], value )
563561 elif isinstance (data , IndexIterableTypes ):
564562 was_t , data = type (data ), list (data )
565- data [path [0 ]] = cls ._set_nested_val (data [path [0 ]], path [1 :], value )
563+ data [id_path [0 ]] = cls ._set_nested_val (data [id_path [0 ]], id_path [1 :], value )
566564 data = was_t (data )
567565
568566 return data
@@ -588,30 +586,31 @@ def __init__(self, data: DataStructure, comment_start: str, comment_end: str, co
588586 )) if len (comment_end ) > 0 else None
589587
590588 def __call__ (self ) -> DataStructure :
591- return self ._rem_nested_comments (self .data )
589+ return self .rem_nested_comments (self .data )
592590
593- def _rem_nested_comments (self , item : Any ) -> Any :
591+ def rem_nested_comments (self , item : Any ) -> Any :
594592 if isinstance (item , dict ):
595593 return {
596- k : v
597- for k , v in ((self ._rem_nested_comments (key ), self ._rem_nested_comments (value )) for key , value in item .items ())
598- if k is not None
594+ key : val
595+ for key , val in ( \
596+ (self .rem_nested_comments (k ), self .rem_nested_comments (v )) for k , v in item .items ()
597+ ) if key is not None
599598 }
599+
600600 if isinstance (item , IndexIterableTypes ):
601- processed = (v for v in map (self ._rem_nested_comments , item ) if v is not None )
601+ processed = (v for v in map (self .rem_nested_comments , item ) if v is not None )
602602 return type (item )(processed )
603+
603604 if isinstance (item , str ):
604- return self ._remove_str_comment (item )
605- return item
605+ if self .pattern :
606+ if (match := self .pattern .match (item )):
607+ start , end = match .group (1 ).strip (), match .group (2 ).strip ()
608+ return f"{ start } { self .comment_sep if start and end else '' } { end } " or None
609+ return item .strip () or None
610+ else :
611+ return None if item .lstrip ().startswith (self .comment_start ) else item .strip () or None
606612
607- def _remove_str_comment (self , s : str ) -> Optional [str ]:
608- if self .pattern :
609- if (match := self .pattern .match (s )):
610- start , end = match .group (1 ).strip (), match .group (2 ).strip ()
611- return f"{ start } { self .comment_sep if start and end else '' } { end } " or None
612- return s .strip () or None
613- else :
614- return None if s .lstrip ().startswith (self .comment_start ) else s .strip () or None
613+ return item
615614
616615
617616class _DataRenderHelper :
0 commit comments