1- from typing import Any , Dict , Hashable
1+ import os
2+ from typing import Any , Dict , Hashable , TextIO
23
34import yaml
45
56
7+ def _yaml_safe_load (file : TextIO ) -> Dict [Hashable , Any ]:
8+ # loader.get_single_data could return None
9+ loaded_file = yaml .safe_load (file )
10+ if loaded_file is None :
11+ return {}
12+
13+ return loaded_file
14+
15+
616def read_file (filename : str ) -> Dict [Hashable , Any ]:
7- with open (filename , 'r' , encoding = 'UTF-8' ) as file :
8- return yaml . safe_load ( file )
17+ if not os . path . exists (filename ) :
18+ return {}
919
20+ with open (filename , 'r' , encoding = 'UTF-8' ) as file :
21+ return _yaml_safe_load (file )
1022
11- def update_file (filename : str , content : Dict [Hashable , Any ]) -> None :
12- try :
13- with open (filename , 'r' , encoding = 'UTF-8' ) as file :
14- file_content = yaml .safe_load (file )
15- except FileNotFoundError :
16- file_content = {}
1723
24+ def write_file (filename : str , content : Dict [Hashable , Any ]) -> None :
1825 with open (filename , 'w' , encoding = 'UTF-8' ) as file :
19- file_content = _deep_update (file_content , content )
20- yaml .safe_dump (file_content , file )
26+ yaml .safe_dump (content , file )
27+
28+
29+ def update_file (filename : str , content : Dict [Hashable , Any ]) -> None :
30+ write_file (filename , _deep_update (read_file (filename ), content ))
2131
2232
2333def _deep_update (source : Dict [Hashable , Any ], overrides : Dict [Hashable , Any ]) -> Dict [Hashable , Any ]:
@@ -26,4 +36,5 @@ def _deep_update(source: Dict[Hashable, Any], overrides: Dict[Hashable, Any]) ->
2636 source [key ] = _deep_update (source .get (key , {}), value )
2737 else :
2838 source [key ] = overrides [key ]
39+
2940 return source
0 commit comments