shenjack
e44e4d132c
Some checks failed
自动生成 label / Generate-label (push) Failing after 44s
我的问题( 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
69 lines
2.0 KiB
Python
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)
|