用于验证变更集批准的CLI工具。
approvals-validator的Python项目详细描述
批准验证器
一个CLI,用于验证是否已为变更集接收到足够的批准 在一个项目的上下文中。在
目录
安装
在愤怒中使用该工具的最快方法是使用pip
安装它:
pip install approvals-validator
。在
或者,从项目根目录运行可执行文件。安装依赖项
使用bin/setup
。在
使用
% validate_approvals --help Usage: validate_approvals REQUIRED_FLAGS Validate that the correct approvals have been received to approve changes to the given files. Note: Multiple approvers and/or changed files can be passed as CSV strings. Example: validate_approvals --approvers alovelace,eclarke --changed-files src/com/twitter/follow/Follow.java Options: -a, --approvers USERNAMES Username(s) of approvals. [required] -c, --changed-files FILE_PATHS File paths. [required] -h, --help Show this message and exit.
要求
- Python>;=3.8.0(对于
functools.cached_property
)
为asdf用户包含一个.tool-versions
文件。在
依赖关系
测试运行程序脚本(./test
)将尝试在
virtualenv位于名为./env
的项目根目录。在
作为参考,bin/setup
使用说明:
测试
包含一个测试运行程序脚本来运行整个测试套件并显示代码
覆盖率指标。传递--docker
标志以(重新)构建一个Docker映像并
用Docker运行测试。在
验收测试用Bash脚本编写,单元和集成测试在 pytest的Python。在
% ./test Running acceptance tests... ./validate_approvals -c data/minimal/y/file -a B ./validate_approvals -c data/minimal/y/file -a A,C ./validate_approvals -c data/minimal/y/file -a D ./validate_approvals --approvers alovelace,ghopper --changed-files data/repo/src/com/twitter/follow/Follow.java,data/repo/src/com/twitter/user/User.java ./validate_approvals --approvers alovelace --changed-files data/repo/src/com/twitter/follow/Follow.java ./validate_approvals --approvers eclarke --changed-files data/repo/src/com/twitter/follow/Follow.java ./validate_approvals --approvers alovelace,eclarke --changed-files data/repo/src/com/twitter/follow/Follow.java ./validate_approvals --approvers mfox --changed-files data/repo/src/com/twitter/tweet/Tweet.java Running pytest tests... Running mypy on 11 files... done with status 0 Success: no issues found in 11 source files ............................... [100%] ---------- coverage: platform darwin, python 3.8.0-final-0 ----------- Name Stmts Miss Cover ------------------------------------------------------------------------ approval_validator/__init__.py 3 0 100% approval_validator/change_set.py 14 14 0% approval_validator/changed_directory.py 30 0 100% approval_validator/cli_utils.py 14 14 0% approval_validator/exceptions.py 9 2 78% approval_validator/file_utils.py 74 0 100% approval_validator/tests/__init__.py 0 0 100% approval_validator/tests/changed_directory_test.py 37 0 100% approval_validator/tests/file_utils_test.py 59 4 93% ------------------------------------------------------------------------ TOTAL 240 34 86%
设计说明
脚本入口点是可执行文件中的CLI函数
validate_approvals
。在
approval_validator.cli_utils
模块定义如何解析参数。在
ChangeSet
,ChangedDirectory
主要的类是ChangeSet
和ChangedDirectory
。在
前者为整个变更集建模(即,通过
--changed-files
标志),后者是文件列表中每个单独的条目
传递给--changed_files
。在
# approval_validator/changed_directory.py L24-37@cached_propertydefaffected_directories(self)->Tuple[Path,...]:returnutil.find_dependent_dirs(self.directory)@cached_propertydefapproved(self)->bool:""" Return true if sufficient approval has been received for this ChangedDirectory. """forimpacted_dirinself.impacted_directories:ifnotself.__change_approved(impacted_dir):returnFalsereturnTrue
file_utils
文件解析和目录遍历逻辑位于file_utils
模块中。在
exceptions
定义ApprovalValidatorError
,库特定的基类
异常,以及ProjectRootNotFoundError
,它在项目根目录时引发
找不到。在
# approval_validator/exceptions.py L8-20classProjectRootNotFoundError(ApprovalValidatorError):"""Raised when a project root can't be found."""def__init__(self,start_dir):self.start_dir=start_dirdef__str__(self):message=f""" Project root search failed. Started from: {self.start_dir} Note: We detect the presence of a project root using the entries of PROJECT_ROOT_FILES. (see: approval_validator/file_utils.py) """returnf"\n\n{cleandoc(message)}"
性能
缓存使运行时间缩短了约20%。使用以下设施:
- 项目
标签: