用于验证变更集批准的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使用说明:

^{pr2}$

测试

包含一个测试运行程序脚本来运行整个测试套件并显示代码 覆盖率指标。传递--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模块定义如何解析参数。在

ChangeSetChangedDirectory

主要的类是ChangeSetChangedDirectory。在

前者为整个变更集建模(即,通过 --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%。使用以下设施:

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
javascript如何找到socket。同一局域网上的IO服务器?   将Java代码格式化为Word/RTF格式   java学习对象以及如何将分配的变量封装到私有变量   java Websocket客户端不在Tomcat中工作   java如何在点击按钮时打开本机表情键盘?   java使用哪个Maven GlassFish插件?   Eclipse Java构建路径不允许添加外部JAR   继承Java6集合。勾选适当的用法   JavaApacheDateUtils:使用多个模式解析日期   java hibernate如何生成查询?   具有id或链接的java Dropbox下载文件或文件夹   java模态对话框未在PrimeFaces 5上显示   java将类对象转换为人类可读的字符串   更新数据库中字段的java通用方法   java无法通过Apache Tomcat访问网络文件夹