mystx.ext.github_readme_stats.base 源代码
"""GitHub Readme Stats 指令的基础工具。
提供基类 ``BaseGitHubCardDirective``,封装:
- 将选项字典转换为查询字符串;
- 生成原始 HTML ``<img>`` 节点用于嵌入卡片。
"""
from docutils import nodes
from docutils.parsers.rst import Directive
[文档]
class BaseGitHubCardDirective(Directive):
"""GitHub 卡片指令的通用基类。
继承自 ``docutils.parsers.rst.Directive``,为各具体指令提供
URL 构建与 HTML 节点生成的通用能力。
"""
[文档]
def build_url(self, base_url, options):
"""根据基础地址和选项构建完整查询 URL。
Args:
base_url: GitHub Readme Stats 接口基础地址,例如
``https://github-readme-stats.vercel.app/api``。
options: 指令选项字典;布尔值 True 会被序列化为
``key=true``,其他类型以 ``key=value`` 形式拼接。
Returns:
完整的查询 URL 字符串。
"""
params = []
for key, value in options.items():
if isinstance(value, bool):
if value:
params.append(f"{key}=true")
else:
params.append(f"{key}={value}")
return f"{base_url}?{'&'.join(params)}"
[文档]
def create_image_node(self, url, alt="GitHub Card"):
"""创建原始 HTML 节点,以 ``<img>`` 标签插入卡片图片。
Args:
url: 图片地址(通常为 GitHub Readme Stats 服务的卡片 URL)。
alt: 图片的替代文本。
Returns:
``docutils.nodes.raw`` 节点,可直接嵌入到最终 HTML。
"""
html = f'<img src="{url}" alt="{alt}">'
return nodes.raw('', html, format='html')