MCPcopy Create free account
hub / github.com/MotrixLab/AiOS / _file2dict

Method _file2dict

util/config.py:54–109  ·  view source on GitHub ↗
(filename)

Source from the content-addressed store, hash-verified

52
53 @staticmethod
54 def _file2dict(filename):
55 filename = osp.abspath(osp.expanduser(filename))
56 check_file_exist(filename)
57 if filename.lower().endswith('.py'):
58 with tempfile.TemporaryDirectory() as temp_config_dir:
59 temp_config_file = tempfile.NamedTemporaryFile(
60 dir=temp_config_dir, suffix='.py')
61 temp_config_name = osp.basename(temp_config_file.name)
62 shutil.copyfile(filename,
63 osp.join(temp_config_dir, temp_config_name))
64 temp_module_name = osp.splitext(temp_config_name)[0]
65 sys.path.insert(0, temp_config_dir)
66 Config._validate_py_syntax(filename)
67 mod = import_module(temp_module_name)
68 sys.path.pop(0)
69 cfg_dict = {
70 name: value
71 for name, value in mod.__dict__.items()
72 if not name.startswith('__')
73 }
74 del sys.modules[temp_module_name]
75 temp_config_file.close()
76 else:
77 raise IOError('Only py/yml/yaml/json type are supported now!')
78
79 cfg_text = filename + '\n'
80 with open(filename, 'r') as f:
81 cfg_text += f.read()
82
83 if BASE_KEY in cfg_dict:
84 cfg_dir = osp.dirname(filename)
85 base_filename = cfg_dict.pop(BASE_KEY)
86 base_filename = base_filename if isinstance(
87 base_filename, list) else [base_filename]
88
89 cfg_dict_list = list()
90 cfg_text_list = list()
91 for f in base_filename:
92 _cfg_dict, _cfg_text = Config._file2dict(osp.join(cfg_dir, f))
93 cfg_dict_list.append(_cfg_dict)
94 cfg_text_list.append(_cfg_text)
95
96 base_cfg_dict = dict()
97 for c in cfg_dict_list:
98 if len(base_cfg_dict.keys() & c.keys()) > 0:
99 raise KeyError('Duplicate key is not allowed among bases')
100 # TODO Allow the duplicate key while warnning user
101 base_cfg_dict.update(c)
102
103 base_cfg_dict = Config._merge_a_into_b(cfg_dict, base_cfg_dict)
104 cfg_dict = base_cfg_dict
105
106 cfg_text_list.append(cfg_text)
107 cfg_text = '\n'.join(cfg_text_list)
108
109 return cfg_dict, cfg_text
110
111 @staticmethod

Callers 2

fromfileMethod · 0.80
get_config_fromfileMethod · 0.80

Calls 6

check_file_existFunction · 0.85
_validate_py_syntaxMethod · 0.80
_merge_a_into_bMethod · 0.80
itemsMethod · 0.45
keysMethod · 0.45
updateMethod · 0.45

Tested by

no test coverage detected