提交 cb7a1c07 编写于 作者: M Mars Liu

fixed odd orders

上级 c126b3e9
...@@ -14,7 +14,6 @@ formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s') ...@@ -14,7 +14,6 @@ formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter) handler.setFormatter(formatter)
logger.addHandler(handler) logger.addHandler(handler)
def load_json(p): def load_json(p):
with open(p, 'r') as f: with open(p, 'r') as f:
return json.loads(f.read()) return json.loads(f.read())
...@@ -100,13 +99,11 @@ class TreeWalker: ...@@ -100,13 +99,11 @@ class TreeWalker:
for index, chapter in enumerate(level_node["children"]): for index, chapter in enumerate(level_node["children"]):
chapter_title = list(chapter.keys())[0] chapter_title = list(chapter.keys())[0]
chapter_node = list(chapter.values())[0] chapter_node = list(chapter.values())[0]
chapter_path = os.path.join( chapter_path = os.path.join(level_path, f"{index+1}.{chapter_title}")
level_path, f"{index+1}.{chapter_title}")
self.load_sections(chapter_path, chapter_node) self.load_sections(chapter_path, chapter_node)
for index, section_node in enumerate(chapter_node["children"]): for index, section_node in enumerate(chapter_node["children"]):
section_title = list(section_node.keys())[0] section_title = list(section_node.keys())[0]
full_path = os.path.join( full_path = os.path.join(chapter_path, f"{index}.{section_title}")
chapter_path, f"{index}.{section_title}")
if os.path.isdir(full_path): if os.path.isdir(full_path):
self.ensure_exercises(full_path) self.ensure_exercises(full_path)
...@@ -122,7 +119,8 @@ class TreeWalker: ...@@ -122,7 +119,8 @@ class TreeWalker:
level_path = os.path.join(self.root, level) level_path = os.path.join(self.root, level)
num, config = self.load_level_node(level_path) num, config = self.load_level_node(level_path)
levels.append((num, config)) levels.append((num, config))
levels.sort(key=lambda item: item[0])
levels = self.resort_children(self.root, levels)
root_node["children"] = [item[1] for item in levels] root_node["children"] = [item[1] for item in levels]
return root_node return root_node
...@@ -148,7 +146,7 @@ class TreeWalker: ...@@ -148,7 +146,7 @@ class TreeWalker:
num, chapter = self.load_chapter_node(full_name) num, chapter = self.load_chapter_node(full_name)
chapters.append((num, chapter)) chapters.append((num, chapter))
chapters.sort(key=lambda item: item[0]) chapters = self.resort_children(base, chapters)
level_node["children"] = [item[1] for item in chapters] level_node["children"] = [item[1] for item in chapters]
return level_node return level_node
...@@ -160,10 +158,21 @@ class TreeWalker: ...@@ -160,10 +158,21 @@ class TreeWalker:
num, section = self.load_section_node(full_name) num, section = self.load_section_node(full_name)
sections.append((num, section)) sections.append((num, section))
sections.sort(key=lambda item: item[0]) sections = self.resort_children(base, sections)
chapter_node["children"] = [item[1] for item in sections] chapter_node["children"] = [item[1] for item in sections]
return chapter_node return chapter_node
def resort_children(self, base, children):
children.sort(key=lambda item: item[0])
for index, [number, element] in enumerate(children):
title = list(element.keys())[0]
origin = os.path.join(base, f"{number}.{title}")
posted = os.path.join(base, f"{index+1}.{title}")
if origin != posted:
self.logger.info(f"rename [{origin}] to [{posted}]")
os.rename(origin, posted)
return children
def ensure_chapters(self): def ensure_chapters(self):
for subdir in os.listdir(self.root): for subdir in os.listdir(self.root):
self.ensure_level_config(subdir) self.ensure_level_config(subdir)
...@@ -220,8 +229,8 @@ class TreeWalker: ...@@ -220,8 +229,8 @@ class TreeWalker:
config = { config = {
"node_id": self.gen_node_id(), "node_id": self.gen_node_id(),
"keywords": [], "keywords": [],
"children": [], "children":[],
"export": [] "export":[]
} }
dump_json(config_path, config, exist_ok=True, override=True) dump_json(config_path, config, exist_ok=True, override=True)
else: else:
...@@ -285,3 +294,4 @@ class TreeWalker: ...@@ -285,3 +294,4 @@ class TreeWalker:
if "exercise_id" not in exercise: if "exercise_id" not in exercise:
exercise["exercise_id"] = uuid.uuid4().hex exercise["exercise_id"] = uuid.uuid4().hex
dump_json(full_name, exercise) dump_json(full_name, exercise)
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册