-
Notifications
You must be signed in to change notification settings - Fork 24
/
update.py
69 lines (54 loc) · 2.68 KB
/
update.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
# -*- coding: utf-8 -*-
import os
from urllib.parse import quote
EXCLUDE_DIRS = ['.git', 'docs', '.vscode', '.circleci', 'site','.github','src','overrides','images']
README_MD = ['README.md', 'readme.md', 'index.md']
TXT_EXTS = ['md', 'txt']
TXT_URL_PREFIX = 'https://github.com/bjut-swift/BJUT-Helper/blob/master/'
BIN_URL_PREFIX = 'https://github.com/bjut-swift/BJUT-Helper/raw/master/'
def list_files(course: str):
filelist_texts = '## 文件列表\n\n'
readme_path = ''
for root, dirs, files in os.walk('./' + course):
files.sort()
level = root.replace('./' + course, '').count(os.sep)
indent = ' ' * 4 * level
subindent = ' ' * 4 * (level + 1)
if root != './' + course: # For subdirectories
filelist_texts += '{}- {}\n\n'.format(indent, os.path.basename(root))
else: # For the top-level directory (course directory itself)
filelist_texts += '- {}\n\n'.format(os.path.basename(root))
for f in files:
if f not in README_MD:
ext = f.split('.')[-1]
file_path = os.path.join(root, f).replace('./', '') # Remove './' from path
if ext in TXT_EXTS:
if ext == 'md':
filelist_texts += '{}- [{}]({})\n\n'.format(subindent, f, TXT_URL_PREFIX + quote(file_path))
else:
filelist_texts += '{}- [{}]({})\n\n'.format(subindent, f, TXT_URL_PREFIX + quote(file_path))
else:
filelist_texts += '{}- [{}]({})\n\n'.format(subindent, f, BIN_URL_PREFIX + quote(file_path))
elif root == './' + course and readme_path == '':
readme_path = os.path.join(root, f)
return filelist_texts, readme_path
def generate_md(course: str, filelist_texts: str, readme_path: str):
final_texts = ['\n\n', filelist_texts]
if readme_path:
with open(readme_path, 'r', encoding='utf-8') as file:
final_texts = file.readlines() + final_texts
with open('docs/{}.md'.format(course), 'w', encoding='utf-8') as file:
file.writelines(final_texts)
if __name__ == '__main__':
if os.path.exists('docs'):
shutil.rmtree('docs')
os.mkdir('docs')
courses = list(filter(lambda x: os.path.isdir(x) and (
x not in EXCLUDE_DIRS), os.listdir('.'))) # list courses
for course in courses:
filelist_texts, readme_path = list_files(course)
generate_md(course, filelist_texts, readme_path)
with open('README.md', 'r', encoding='utf-8') as file:
mainreadme_lines = file.readlines()
with open('docs/index.md', 'w', encoding='utf-8') as file:
file.writelines(mainreadme_lines)