import os
import yaml
import sys
import argparse
def load_yaml(file_path):
"""
load yaml
:param file_path: yaml file path
:return: content of yaml
"""
with open(file_path, encoding="utf-8") as fp:
try:
content = yaml.load(fp.read(), Loader=yaml.Loader)
except yaml.MarkedYAMLError as e:
print(e)
sys.exit(1)
return content
def get_sig_owners_path(sig_name):
cur_path = os.getcwd()
sig_path = os.path.join(cur_path, sig_name)
if not os.path.exists(sig_path):
print("%s is not exist" % sig_path)
sys.exit(1)
owners_path = os.path.join(sig_path, "OWNERS")
return sig_path, owners_path
def make_template_file_data_and_write(sig_name, sig_path, owners_path):
content = {}
content["name"] = sig_name
content["description"] = "TO_BE_CLARIFIED"
content["created_on"] = "2019-12-31"
content["mailing_list"] = "TO_BE_CLARIFIED"
content["meeting_url"] = "TO_BE_CLARIFIED"
content["mature_level"] = "startup"
content["mentors"] = [{"gitee_id": "--xxx--", "name": "TO_BE_CLARIFIED", "organization": "TO_BE_CLARIFIED", "email": "TO_BE_CLARIFIED"}]
if os.path.exists(os.path.join(sig_path, "sig-info.yaml")):
sig_info_content = load_yaml(os.path.join(sig_path, "sig-info.yaml"))
content["description"] = sig_info_content.get("description") if sig_info_content.get("description") else "TO_BE_CLARIFIED"
content["meeting_url"] = sig_info_content.get("meeting_url") if sig_info_content.get("meeting_url") else "TO_BE_CLARIFIED"
content["mailing_list"] = sig_info_content.get("mailing_list") if sig_info_content.get("mailing_list") else "TO_BE_CLARIFIED"
mts_in_sig_info = []
for i in sig_info_content.get("maintainers"):
mts_in_sig_info.append(i["gitee_id"])
v = []
for m in decode_owners(owners_path):
if m in mts_in_sig_info:
for mr in sig_info_content.get("maintainers"):
if m == mr["gitee_id"]:
v.append({
"gitee_id": m, "name": mr.get("name") if mr.get("name") else "TO_BE_CLARIFIED",
"organization": mr.get("organization") if mr.get("organization") else "TO_BE_CLARIFIED",
"email": mr.get("email") if mr.get("email") else "TO_BE_CLARIFIED",
})
else:
v.append({"gitee_id": m, "name": "TO_BE_CLARIFIED", "organization": "TO_BE_CLARIFIED",
"email": "TO_BE_CLARIFIED"})
if len(v) == 0:
content["maintainers"] = [
{"gitee_id": "--xxx--", "name": "TO_BE_CLARIFIED", "organization": "TO_BE_CLARIFIED",
"email": "TO_BE_CLARIFIED"}]
else:
content["maintainers"] = v
else:
v = []
for m in decode_owners(owners_path):
v.append({"gitee_id": m, "name": "TO_BE_CLARIFIED", "organization": "TO_BE_CLARIFIED",
"email": "TO_BE_CLARIFIED"})
if len(v) == 0:
content["maintainers"] = [
{"gitee_id": "--xxx--", "name": "TO_BE_CLARIFIED", "organization": "TO_BE_CLARIFIED",
"email": "TO_BE_CLARIFIED"}]
else:
content["maintainers"] = v
repos = []
for root, dirs, files in os.walk(sig_path):
if len(dirs) == 0:
if len(files) == 0:
break
for f in files:
if root.count("/") > 2 and f.endswith(".yaml"):
repos.append(root.split("/")[-2] + '/' + f.split(".yaml")[0])
else:
continue
if len(repos) == 0:
content["repositories"] = [{"repo": ["example/repos1", "example/repos2"], "committers": [{"gitee_id": "--xxx--", "name": "TO_BE_CLARIFIED", "organization": "TO_BE_CLARIFIED", "email": "TO_BE_CLARIFIED"}],
"contributors": [{"gitee_id": "--xxx--", "name": "TO_BE_CLARIFIED", "organization": "TO_BE_CLARIFIED", "email": "TO_BE_CLARIFIED"}],}, {"repo": ["example/repos1", "example/repos2"],}, ]
else:
content["repositories"] = [{"repo": repos, "committers": [{"gitee_id": "--xxx--", "name": "TO_BE_CLARIFIED", "organization": "TO_BE_CLARIFIED", "email": "TO_BE_CLARIFIED"}],
"contributors": [{"gitee_id": "--xxx--", "name": "TO_BE_CLARIFIED", "organization": "TO_BE_CLARIFIED", "email": "TO_BE_CLARIFIED"}], }]
write_yaml_to_sig(sig_path, content)
def decode_owners(owners_path):
if os.path.exists(owners_path):
c = load_yaml(owners_path)
return c["maintainers"]
else:
return []
def write_yaml_to_sig(dst_path, data):
file_path = os.path.join(dst_path, "sig-info.yaml")
with open(file_path, 'w', encoding="utf-8") as f:
yaml.dump(data, f, Dumper=yaml.Dumper, sort_keys=False)
if __name__ == '__main__':
"""
Tool to help creating and filling sig-info.yaml, by leveraging existing information.
"""
par = argparse.ArgumentParser()
par.add_argument("community", type=str, help="Local path of community repository")
par.add_argument("-s", "--sig", type=str, help="Name of SIG (for exampke, ai)")
args = par.parse_args()
sig_dir = os.path.join(args.community, "sig")
os.chdir(sig_dir)
s_path, o_path = get_sig_owners_path(args.sig)
make_template_file_data_and_write(args.sig, s_path, o_path)