import os
import re
import glob
from file_utils import read_json_file
def _get_external_deps_file_list(search_path: str):
search_str = "{}/**/*{}".format(search_path, ".json")
external_deps_file_list = glob.glob(search_str, recursive=True)
return external_deps_file_list
def _read_external_deps_info(build_out_dir: str):
ext_deps_file_list = _get_external_deps_file_list(build_out_dir)
ext_deps_file_dict = {}
for _external_deps_file in ext_deps_file_list:
if not os.path.exists(_external_deps_file):
raise Exception(
"file '{}' doesn't exist.".format(_external_deps_file))
module_ext_deps_info = read_json_file(_external_deps_file)
if module_ext_deps_info is None:
raise Exception(
"read file '{}' failed.".format(_external_deps_file))
_filename = os.path.basename(_external_deps_file)
_filename_snippet = re.search(r'(.*).json', _filename).group(1)
part_name, module_name = _parse_module_name(_filename_snippet)
module_alias = '{}:{}'.format(part_name, module_name)
ext_deps_file_dict[module_alias] = module_ext_deps_info
return ext_deps_file_dict
def _parse_module_name(name_str):
split_result = name_str.split('__')
part_name = split_result[0]
module_name = split_result[1]
return part_name, module_name
def _read_module_deps_info(module_deps_files_path):
deps_files = os.listdir(module_deps_files_path)
deps_data = {}
for _filename in deps_files:
_deps_file = os.path.join(module_deps_files_path, _filename)
if not os.path.exists(_deps_file):
raise Exception("file '{}' doesn't exist.".format(_deps_file))
module_deps_info = read_json_file(_deps_file)
if module_deps_info is None:
raise Exception("read file '{}' failed.".format(_deps_file))
_filename_snippet = _filename
part_name, module_name = _parse_module_name(_filename_snippet)
module_alias = '{}:{}'.format(part_name, module_name)
deps_data[module_alias] = module_deps_info
return deps_data
def _merge_external_deps_label(deps_data, external_deps_data):
for _module_alias, _info in deps_data.items():
_module_alias_external_deps = _module_alias.replace('.json', '')
external_deps = _info.get('external_deps')
if not external_deps:
continue
ext_deps_label_info = external_deps_data.get(_module_alias_external_deps)
if not ext_deps_label_info:
raise Exception(
"module '{}' external deps info is incorrect.".format(
_module_alias_external_deps))
_info['external_deps_label'] = ext_deps_label_info.get('deps')
deps_data_new = {}
for module_part, module_part_info in deps_data.items():
module_part_name = module_part.replace('.json', '')
deps_data_new[module_part_name] = module_part_info
return deps_data_new
def get_all_deps_data(module_deps_files_path):
deps_data = _read_module_deps_info(module_deps_files_path)
external_deps_data = _read_external_deps_info(module_deps_files_path)
all_deps_data = _merge_external_deps_label(deps_data, external_deps_data)
return all_deps_data