仓库处理器¶
本文档描述了 Django Packages 仓库处理器 API。
在 Django Packages 中添加像 GitHub 这样的新仓库系统是一项相对简单的工作。你需要提供两样东西
- 在 apps.models.repos 目录中添加一个新的仓库处理器,并遵循所述的 API
- 添加测试来检查你的工作
- 文档中记录所有特殊设置。
- 更改 SUPPORTED_REPO 以包含新的仓库处理器的名称。
如果无法自动检测(例如,自托管的 Forgejo 实例),请将包上的 Repo host 字段设置为所需的处理器。即使仓库 URL 不匹配内置正则表达式,也会使用选定的处理器。
如果我的目标仓库不支持所有必要的字段怎么办?¶
假设你想使用 GitBlarg,一个新服务,其 API 不提供仓库关注者数量或参与者数量。为了处理它们,你只需设置这些值,直到 GitBlarg 支持正确的数据。
例如,正如你在 apps.models.repos.base_handler.BaseHandler.fetch_metadata() 方法中看到的那样,它期望看到的 Package 实例是一个逗号分隔的值
def fetch_metadata(self, package):
"""Accepts a package.models.Package instance:
return: package.models.Package instance
Must set the following fields:
package.repo_watchers (int)
package.repo_forks (int)
package.repo_description (text )
package.participants = (comma-separated value)
"""
raise NotImplemented()
所以你的代码可能会做以下事情
from GitBlargLib import GitBlargAPI
def fetch_metadata(self, package):
# fetch the GitBlarg data
git_blarg_data = GitBlargAPI.get(package.repo_name())
# set the package attributes
package.repo_watchers = 0 # GitBlagAPI doesn't have this so we set to 0
package.repo_forks = git_blarg_data.forks
package.repo_description = git_blarg_data.note
package.participants = (
"" # GitBlagAPI doesn't have this so we set to an empty string
)
return package
克隆 GitBlarg 的仓库怎么样,这样我们就能更好地查看数据?¶
问题在于,开发人员、设计师和经理会很高兴地将千兆字节的数据放入 git/hg/svn/fossil/cvs 仓库中。对于单个项目来说,这听起来不算多,但是当你处理 Django Packages 实例中的数千个包时,数据的规模变得……好吧……令人恐惧。现在轻微的烦恼变成了一个惊人的大问题。
因此,试图通过这种方式解决问题的仓库处理器上的拉取请求将一概拒绝。