layer linter检查项目是否遵循自定义的分层体系结构。

layer-linter的Python项目详细描述


层绒布

https://img.shields.io/pypi/v/layer_linter.svgPython versionshttps://api.travis-ci.org/seddonym/layer_linter.svg?branch=masterhttps://codecov.io/gh/seddonym/layer_linter/branch/master/graph/badge.svgDocumentation Status

layer linter已被弃用,取而代之的是进口linter。

Import Linter做了linter层所做的一切,但是有更多的特性和稍微不同的api。 如果您已经在使用layer linter,那么迁移到import linter很简单:这里有一个指南here

轮廓

layer linter检查项目是否遵循自定义的分层体系结构,基于 它的内部依赖关系(即模块之间的导入)。

概述

layer linter是一个命令行工具,用于检查您是否遵循了一个自定的 python项目中的体系结构。它通过分析内部 在代码库中的所有模块之间导入,并比较 反对在layers.yml文件中提供的一组简单规则。

例如,可以使用它来检查^{tt2}中没有模块$ 从myproject.bar内的任何模块导入,甚至是间接导入。

如果您在团队中处理复杂的代码库,这一点尤其有用, 当您想要强制执行特定的体系结构样式时。在这种情况下,您可以添加 将linter分层到部署管道,以便不遵循的任何代码 架构将无法通过测试。

快速启动

安装层绒布:

pip install layer-linter

决定要检查的依赖项流。在这个例子中,我们有 将我们的项目组织成三个子包,myproject.highmyproject.mediummyproject.low。这些子包称为layers。注意:图层必须 具有相同的父包(即所有包都在同一目录中)。这个父容器称为container

在项目的根目录中创建一个layers.yml。例如:

My Layers Contract:
  containers:
    - myproject
  layers:
    - high
    - medium
    - low

(这个契约告诉layer linter层的顺序从底部的low开始 到顶端的high。上层可以导入下层,但不是相反。)

注意,容器是python包的绝对名称,而层是相对于容器的。

现在,从项目根目录运行:

layer-lint myproject

如果您的代码违反了合同,您将看到如下错误消息:

============
Layer Linter
============

---------
Contracts
---------

Analyzed 23 files, 44 dependencies.
-----------------------------------

My layer contract BROKEN

Contracts: 0 kept, 1 broken.

----------------
Broken contracts
----------------


My layer contract
-----------------


1. myproject.low.x imports myproject.high.y:

    myproject.low.x <-
    myproject.utils <-
    myproject.high.y

有关详细信息,请参见Usage

历史记录

0.1.0(2018-06-20)

  • pypi上的第一个版本。

0.2.0(2018-06-23)

  • 在当前工作目录中查找layers.yml

0.3.0(2018-06-24)

  • 将命令重命名为layer-lint
  • layers.yml中的层的顺序从高级别更改为低级别。

0.4.0(2018-07-22)

  • 使依赖性分析更加高效和健壮。
  • 改进了报表格式。
  • 删除了其他更简洁的非法依赖项所暗示的非法依赖项。
  • 添加了--debug命令行参数。

0.5.0(2018-08-01)

  • 添加了要报告的已分析文件和依赖项的计数。
  • 修复了从在不同目录中运行命令到包的问题。
  • 提高了分析速度。
  • 已将--config_directory命令行参数更改为--config-directory

0.6.0(2018-08-07)

  • 增加了白名单路径的能力。

0.6.1(2018-08-07)

  • 已将当前工作目录添加到路径。

0.6.2(2018-08-17)

  • 不要分析不是python包的目录的子目录。
  • 阻止安装不兼容的Pydeps版本(1.6)。

0.7.0(2018-09-04)

  • 用t完成静态分析的重写o生成依赖关系图。
  • 添加了安静和冗长的报告。
  • 添加了类型注释和mypy。
  • 使用pybackwards构建早期版本的python。
  • 更正了引用layers.yml而不是layers.yaml的文档。

0.7.1(2018-09-04)

  • 修正了0.7.0的打包错误。

0.7.2(2018-09-05)

  • 修正了没有检查层的所有子模块的错误。

0.7.3(2018-09-07)

  • 放弃了对Python3.4和3.5的支持,并调整了打包。

0.7.4(2018-09-20)

  • 调整了命令行错误处理。
  • 改进了自述文件和核心概念文档。

0.8.0(2018-09-29)

  • --config-directory参数替换为--config参数,该参数将改为文件名。

0.9.0(2018-10-13)

  • 移到测试版。
  • 改进文件。
  • 更好地处理传递到命令行的无效包名称。

0.10.0(2018-10-14)

  • 在合同中将“packages”重命名为“containers”。

0.10.1(2018-10-14)

  • 改进了对无效容器的处理。

0.10.2(2018-10-17)

  • 层丢失时出错。

0.10.3(2018-11-2)

  • 修复了pypi上的rst渲染。

0.11.0(2018-11-5)

  • 支持定义可选层。

0.11.1(2019-1-16)

0.12.0(2019-1-16)

  • 修复了对init.py文件中相对导入的分析。

0.12.1(2019-2-2)

  • 添加对Click 7.x的支持。

0.12.2(2019-3-20)

  • 修复Windows文件路径的错误。

0.12.3(2019-6-8)

  • 不建议使用层绒,改为进口绒。

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

推荐PyPI第三方库


热门话题
java resultSet next()方法不返回任何值   java向数组中添加元素?   java在字符串中替换代词   使用ajax时java搜索数据库不工作   java tomcat表示此url不支持http方法post   java正在发生什么   java浏览器不生成文件下载对话框   带有CR和CF的java javascript textarea maxlength问题   javamaven:如何配置javadoc来生成所有私有和包   java问题:“用作trywithresources资源的变量应该是final或实际上是final”   java类只是为了语义   java httpclient在glassfish servlet中发布到https时出现“SSL证书错误”   java图形用户界面不可见错误   我的java CORBA聊天应用程序中出现“org.omg.CORBA.COMM_FAILURE:vmcid:SUN minor code:208 completed:Maybe”错误的原因是什么   javascript在服务器端创建电子邮件草稿并在用户客户端打开   java向JComboBox添加隐藏按钮   使用Java是可能的。awt。图像安卓应用程序