ARS-docs/scripts/parse-label.py
shenjack e44e4d132c
Some checks failed
自动生成 label / Generate-label (push) Failing after 44s
Commented out unused code in label.yml
我的问题(

Update label.yml to install dependencies using pip

Update git clone URL for python-packs repository

Fix git clone URL in label.yml workflow

Add ls commands to debug dependency installation

Update directory paths in label.yml

Update label generation script

Add ls commands to label.yml workflow

Add ls command to display file details

Remove unnecessary code in label.yml

Update label.yml and add requirement.txt

不管了!

build?

mkdir added
2023-12-14 18:19:46 +08:00

69 lines
2.0 KiB
Python

from pathlib import Path
import mistune
from qtoml.encoder import dumps
from qtoml.decoder import loads
from lib_not_dr import loggers
from lib_not_dr.types.options import Options
ast_markdown = mistune.create_markdown(renderer='ast')
class TagParser(Options):
module_root: Path
tags: dict[str, list[str]] = {}
logger: loggers.logger.Logger = None # noqa
def load_module(self, **kwargs):
for readme in self.module_root.rglob('readme.md'):
self.logger.debug(readme.absolute(), tag="load file")
self.get_module_data(readme)
tag_toml = dumps(self.tags)
tag_path = self.module_root / ".." / "build" / "tags.toml"
tag_path.mkdir(parents=True, exist_ok=True)
tag_path.touch(exist_ok=True)
with open(tag_path, 'w', encoding='utf-8') as file:
file.write(tag_toml)
def get_module_data(self, module_path: Path):
with open(module_path, 'r', encoding='utf-8') as f:
file = f.read()
ast = ast_markdown(file)
if len(ast) == 0:
return
if ast[0] != {'type': 'thematic_break'}:
# 排除开头不是注释块的
return
self.logger.info(f"开始解析 {ast[1]}")
config_code = ast[1].get("raw", "")
config_dict = loads(config_code)
self.logger.trace(config_dict)
if not (tag_list := config_dict.get('tags')):
self.logger.warn("未找到 tags", tag=str(module_path))
return
for tag in tag_list:
if tag not in self.tags:
self.tags[tag] = [module_path.__str__()]
else:
self.tags[tag].append(module_path.__str__())
def init(self, **kwargs) -> bool:
self.logger = loggers.get_logger()
self.logger.global_level = 0
return True
if __name__ == '__main__':
parser = TagParser(module_root = Path("modules"))
parser.load_module()
parser.logger.info(parser.tags)