forked from chapimenge3/codenight-developers
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgenerators.py
108 lines (97 loc) · 3.98 KB
/
generators.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
"""
Generate a README.md file for all developers that are listed under each category
"""
import os
import json
from string import Template
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
with open(os.path.join(BASE_DIR, 'README_TEMPLATE.md'), 'r', encoding='utf_8') as f:
README_TEMPLATE = Template(f.read())
def get_category():
"""
Get category from category.json
"""
with open(os.path.join(BASE_DIR, 'category.json'), 'r') as f:
category = json.load(f)
return category
def get_members(category: str):
"""
Get members from Base dir/category/members.json
"""
try:
if os.path.exists(os.path.join(BASE_DIR, category, 'members.json')):
with open(os.path.join(BASE_DIR, category, 'members.json'), 'r') as f:
text = f.read()
members_name = json.loads(text) if text else []
else:
members_name = []
members = []
for member in members_name:
with open(os.path.join(BASE_DIR, category, f'{member}'), 'r') as f:
content = f.read()
members.append(content.strip())
return members
except FileNotFoundError as e:
print(f' 37 File not found: {os.path.join(BASE_DIR, category, "members.json")}, {e}')
return []
def get_new_members(category: str):
"""
Get new members if the name in the base dir/category/member_name.md is not in the members.json
"""
try:
if os.path.exists(os.path.join(BASE_DIR, category, 'members.json')):
with open(os.path.join(BASE_DIR, category, 'members.json'), 'r') as f:
text = f.read()
old_members_name = json.loads(text) if text else []
else:
old_members_name = []
new_members = []
new_members_name = []
for member in os.listdir(os.path.join(BASE_DIR, category)):
if member.endswith('.md'):
if member not in old_members_name:
with open(os.path.join(BASE_DIR, category, member), 'r', encoding='utf_8') as f:
content = f.read()
new_members.append(content.strip())
new_members_name.append(member)
print(f'New member found: {member} in {category}')
if new_members_name:
# if there are new members, add them to members.json
if os.path.exists(os.path.join(BASE_DIR, category, 'members.json')):
with open(os.path.join(BASE_DIR, category, 'members.json'), 'r') as f:
text = f.read()
members_name = json.loads(text) if text else []
else:
members_name = []
members_name.extend(new_members_name)
with open(os.path.join(BASE_DIR, category, 'members.json'), 'w') as f:
json.dump(members_name, f, indent=4)
return new_members
except FileNotFoundError:
return []
def get_all_members(category: str):
"""
Get all members from members.json and new members
"""
members = get_members(category)
new_members = get_new_members(category)
all_members = members + new_members
return all_members
def generate_readme():
"""
Generate a README.md file for all developers that are listed under each category
"""
category = get_category()
categories_text = ''
developers_text = ''
for category_name in category:
categories_text += f'- [{category_name} Developer](#{category_name})\n'
developers_text += f'## {category_name}\n\n'
for count, member in enumerate(get_all_members(category_name)):
developers_text += f'### Developer {count+1}\n{member}\n\n'
developers_text += '\n'
readme = README_TEMPLATE.substitute(categories=categories_text, developers=developers_text.strip())
with open(os.path.join(BASE_DIR, 'README.md'), 'w', encoding='utf_8') as f:
f.write(readme)
if __name__ == '__main__':
generate_readme()