首页 > 其他分享 >扩展 importlinter forbidden 约束支持通配符

扩展 importlinter forbidden 约束支持通配符

时间:2024-08-20 11:18:24浏览次数:10  
标签:通配符 forbidden modules module importlinter fields import

1. 前言

importlinter 默认的 forbidden 约束并不支持通配符,本文通过自定义合约一直 forbidden_modules 以支持通配符的方式配置。


2. 实现

在项目根目录中加入 importlinterc.py 文件:

from importlinter.application.contract_utils import AlertLevel
from importlinter.contracts.forbidden import ForbiddenContract
from importlinter.domain import fields
from importlinter.domain.helpers import _to_pattern
from importlinter.domain.imports import Module


class FnMatchForbiddenContract(ForbiddenContract):
    
    # 以下字段来自 ForbiddenContract,但仍需要重复定义
    # 因为 importlinter 是通过类的 __dict__ 查找字段定义的
    source_modules = fields.ListField(subfield=fields.ModuleField())
    forbidden_modules = fields.ListField(subfield=fields.ModuleField())
    ignore_imports = fields.SetField(subfield=fields.ImportExpressionField(), required=False)
    allow_indirect_imports = fields.StringField(required=False)
    unmatched_ignore_imports_alerting = fields.EnumField(AlertLevel, default=AlertLevel.ERROR)

    def check(self, graph, verbose):
        self.extend_modules(graph)
        return super().check(graph, verbose)

    def extend_modules(self, graph):
        """扩展包含通配符的 module 为实际对应的 modules"""
        modules = []

        for module in self.forbidden_modules:
            if '*' not in module.name:
                modules.append(module)
            else:
                length = len(modules)
                pattern = _to_pattern(module.name)
                for maybe_forbidden in graph.modules:
                    if pattern.match(maybe_forbidden):
                        modules.append(Module(maybe_forbidden))

                if len(modules) == length:
                    raise ValueError('unrecognized module name {}'.format(module.name))

        self.forbidden_modules = modules


3. 配置

pyproject.toml 文件中注册:

[tool.importlinter]
root_packages = ['prettymd']

# 也可以覆盖原名称使用 forbidden
# 会优先使用用户配置的类
contract_types = [
    'fnmatch_forbidden: importlinterc.FnMatchForbiddenContract'
]

# 使用通配符
[[tool.importlinter.contracts]]
name = 'prettymd.db does not import prettymd.service.*'
type = 'fnmatch_forbidden'
source_modules = ['prettymd.db']
forbidden_modules = ['prettymd.service.*']

4. 参考

  1. Custom contract types — Import Linter 2.0 documentation
  2. to_pattern 匹配的示例可参考:Options used by multiple contracts

标签:通配符,forbidden,modules,module,importlinter,fields,import
From: https://www.cnblogs.com/kingron/p/18369095

相关文章

  • 遇到403 Forbidden ,服务器端查询后结果是http get查询字符串中包含非法字符
    原文链接:https://blog.csdn.net/mm_hello11/article/details/84261672 报错解释:HTTPGET请求通过查询字符串(即URL中"?"后面的部分)传递参数。如果查询字符串包含非法字符,服务器可能会拒绝请求并返回错误,因为这些非法字符可能会破坏URL的格式或者服务器的安全性。非法字符通常......
  • Java反射机制快速入门与通配符
    1.Java反射的原理​在Java中,每个类在编译后都会生成一个.class文件,JVM会为每个加载的类创建一个Class对象,这个对象包含了类的全部结构信息,包括类名、方法、字段、构造函数等。Class对象存储了类的元数据,这些元数据可以在运行时被访问。通过Class对象,程序可以......
  • GeoTrust OV通配符SSL证书申请!
    GeoTrust作为知名的SSL证书供应商,拥有广泛的市场接受度和高占有率,其OV通配符SSL证书更是受到众多企业和网站的信任和采用。GeoTrustSSL证书的优势在于其品牌信誉、强大的加密能力、多样化的验证级别以适应不同安全需求、出色的浏览器兼容性、灵活的域名支持选项,以及便捷的管......
  • 通配符SSL证书快速申请教程
    目前SSL里面通配符证书使用率比较广,虽然没有单域名那么普及,但通配符仅次于单域名SSL证书,主要原因是因为通配符具备保护申请域名及下一级域名无限制的使用,好处是通配符SSL证书无需再另外花钱去买证书,一本通配符SSL证书可以涵盖了子域名,适合未来或者现在有很多子域名的网站。......
  • 通配符和正则表达式区别
    通配符和正则表达式区别通配符是shell自带的用于匹配文件名的工具,多用在文件名上,比如查找find,ls,cp等等。正则表达式则需要特定命令的支持才可以使用,如:grep、sed和awk(号称Linux三剑客)、vi/vim、perl等,这些都是处理文本的工具。其次,shell对通配符与正则表达式的处理也有不同,“......
  • Java中使用通配符的限制与使用案例解析
    UML类图如下Person类Student类Teacher类Grade类packagecom.itheima.demo;importjava.util.ArrayList;importjava.util.Collections;publicclassGrade{ privateArrayList<Teacher>teacherList=newArrayList<>(); privateArrayList<Student......
  • 在 Google Colab 上运行 Django:错误 403 Forbidden
    我正在尝试对我的Python程序的Colab进行一些测试并使用Django。我按照此链接中的说明进行操作。我确保在settings.py中设置了此设置ALLOWED_HOSTS=['*']运行此命令以获取链接https://randomstrings.colab.googleusercontent.com/fromgo......
  • 这一文,关于 Java 泛型的点点滴滴 二 (extends、super、<?> 通配符、泛型与反射)
    本文是《这一文,关于Java泛型的点点滴滴》的第二篇,也是最后一篇。在上一篇文章中我们介绍了关于Java泛型的基础知识,而在本文中,我们将深入Java泛型,介绍了extends、super、<?>通配符,并在最后介绍了使用反射获取泛型信息。在阅读本文之前,请先阅读上一篇文章:这一文,关于Jav......
  • 无字母RCE绕过(取反,异或,自增,通配符)
    原理参考:无数字字母rce总结(取反、异或、自增、临时文件)-CSDN博客RCE篇之无数字字母rce-学安全的小白-博客园(cnblogs.com)RCE通配符绕过-CSDN博客以下是我的个人理解及例题1.取反例题:[SWPUCTF2021新生赛]hardrce|NSSCTF取反用法就是对我们想要执行的语句通过......
  • 单域名、多域名、通配符SSL证书,该如何选择?
    随着《网络安全法》《数据安全法》相关法律法规的发布,履行数据保护义务,做好数据安全保护是每个企业的重要工作。其中,SSL证书作为企业网站实现HTTPS加密保护数据传输安全的必备措施,根据域名保护数量,可以分为单域名SSL证书、多域名SSL证书以及通配符SSL证书,那么我们该如何选择呢?......