feat(订阅式软件提供): 按包名详情接口在 README 为空时合成默认 Markdown
新增 _DefaultReadme:由包名、说明、安装命令、依赖表与版本历史合成 README;仅 PackageByNameView(官网数据源)使用,配置页读到的仍是作者原文,避免合成内容被回写。
This commit is contained in:
1 parent
4bd5697cff
commit
aa56281493
1 file changed
+35
-1
@@ -97,6 +97,36 @@ def _DetailRow(package):
|
||||
}
|
||||
|
||||
|
||||
def _DefaultReadme(package, releases):
|
||||
"""包作者未填写 README 时,由包信息合成一份 Markdown 默认 README
|
||||
|
||||
仅用于官网展示(`PackageByNameView`);配置页读取到的仍是「作者填写的原文」,
|
||||
避免把合成内容回写成用户数据。
|
||||
"""
|
||||
lines = [f'# {package.PackageName}', '']
|
||||
lines += [package.PackageDesc.strip() or '该软件包暂未填写说明。', '']
|
||||
|
||||
lines += ['## 安装', '', '```bash', f'venom install {package.PackageName}', '```', '']
|
||||
|
||||
dependencies = package.Dependencies or []
|
||||
lines += ['## 依赖', '']
|
||||
if dependencies:
|
||||
lines += ['| 依赖包 | 版本约束 |', '| --- | --- |']
|
||||
lines += [f"| {d.get('Name', '')} | {d.get('Version') or '*'} |" for d in dependencies]
|
||||
else:
|
||||
lines += ['无外部依赖。']
|
||||
lines += ['']
|
||||
|
||||
lines += ['## 版本历史', '']
|
||||
if releases:
|
||||
lines += [f"- `{r.Version}` · {_Time(r.CreateTime)}" for r in releases]
|
||||
else:
|
||||
lines += ['尚未发布任何版本。']
|
||||
lines += ['']
|
||||
|
||||
return '\n'.join(lines)
|
||||
|
||||
|
||||
class PackageListView(APIView):
|
||||
"""包列表 / 新建包"""
|
||||
|
||||
@@ -198,4 +228,8 @@ class PackageByNameView(APIView):
|
||||
PackageName=name).first()
|
||||
if package is None:
|
||||
return _err(f'包「{name}」不存在', 404, status=404)
|
||||
return _ok(_DetailRow(package))
|
||||
row = _DetailRow(package)
|
||||
# 作者未填 README 时给出合成内容,官网不出现「无 README」占位
|
||||
if not row['Readme']:
|
||||
row['Readme'] = _DefaultReadme(package, list(package.releases.all()))
|
||||
return _ok(row)
|
||||
Reference in new issue
Block a user