Pytest----pluggy源码解读基础准备

news2025/1/12 1:06:18

【原文链接】Pytest----pluggy源码解读基础准备

解读pluggy源码,直接使用pytest环境中安装的pluggy即可,比如这里安装的pluggy版本是1.0.0,为了更好的理解源码,这里首先使用如下应用代码作为应用实例,从如下代码中可以分析出,pluggy的使用步骤主要包括一下几个步骤:
1) HookspecMarker类实例化
2) HookimplMarker类实例化
3) 定义一个接口类,接口类中的函数上使用1)中的实例化作为装饰器装饰
4) 定义一个实现类,实现类中的函数上使用2)中的实例化作为装饰器装饰
5) PluginManager类实例化
6) 对5)中的实例调用 add_hookspecs方法
7) 使用5)中的实例调用注册方法
8) 通过5)中实例的hook属性调用接口方法。

import pluggy

hookspec = pluggy.HookspecMarker("myproject")
hookimpl = pluggy.HookimplMarker("myproject")

class MySpec:
    @hookspec
    def myhook(self, arg1, arg2):
        pass

class Plugin_1:
    @hookimpl()
    def myhook(self, arg1, arg2):
        print("in Plugin_1.myhook()")
        return arg1 + arg2

class Plugin_2:
    @hookimpl(hookwrapper=True)
    def myhook(self, arg1, arg2):
        print("in Plugin_2.myhook() before yield...")
        output=yield
        result=output.get_result()
        print("in Plugin_2.myhook() after yield...")
        print(result)


class Plugin_3:
    @hookimpl
    def myhook(self, arg1, arg2):
        print("inside Plugin_3.myhook()")
        return arg1 - arg2+10

pm = pluggy.PluginManager("myproject")
pm.add_hookspecs(MySpec)
pm.register(Plugin_1())
pm.register(Plugin_2())
pm.register(Plugin_3())
results = pm.hook.myhook(arg1=1, arg2=2)
print("after all run ...")
print(results)

为更好的定位跳转,可以在pycharm中打开上述测试代码,并配置解释器,然后即可在External Library中找到pluggy的源码了,如下图所示。

pluggy 源码只有以下7个文件

pluggy
  |--------__init__.py
  |--------_caller.py
  |--------_hooks.py
  |--------_manager.py
  |--------_result.py
  |--------_tracing.py
  |--------_version.py

其中__init__.py文件代码如下,即这里通过__all__限定了pluggy外部只允许使用PluginManager、PluginValidationError、HookCallError、HookspecMarker、HookimplMarker这五个类。

try:
    from ._version import version as __version__
except ImportError:
    # broken installation, we don't even try
    # unknown only works because we do poor mans version compare
    __version__ = "unknown"

__all__ = [
    "PluginManager",
    "PluginValidationError",
    "HookCallError",
    "HookspecMarker",
    "HookimplMarker",
]

from ._manager import PluginManager, PluginValidationError
from ._callers import HookCallError
from ._hooks import HookspecMarker, HookimplMarker

而_version.py中的内容如下,这里是设置pluggy版本号的。

# coding: utf-8
# file generated by setuptools_scm
# don't change, don't track in version control
version = '1.0.0'
version_tuple = (1, 0, 0)

然后就可以在pycharm中对pluggy应用实例脚本中通过按住Ctrl键,然后鼠标点击即可跳转到对应的函数定义了,比如如下图所示

然后就可以根据pluggy的应用实例代码对pluggy源码进行解析了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/75089.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

低代码助力生产管理:离散型制造业MES系统

制造业作为我国国民经济的支柱产业,在我国经济增长中占有主导作用。而制造业对经济增长的贡献很大一部分来自于以离散制造业为代表的机械装备制造、汽车零部件制造等。因此,离散制造业的发展对我国经济增长具有举足轻重的作用。 离散型制造业的特点&…

中创股份在科创板提交上会稿:计划募资6亿元,景新海为董事长

12月8日,山东中创软件商用中间件股份有限公司(下称“中创股份”)在上海证券交易所科创板提交招股书(上会稿)。相较于此前招股书,中创股份补充了截至2022年9月30日的财务数据等信息。 据贝多财经了解&#x…

记一次 Eclipse 打包的辛酸历程

文章目录1:背景2 maven 工程3 普通工程3.1 打可执行的 jar3.2 打普通 jar4: 运行 jar 包1:背景 偶然的境况下,被迫使用了 Eclipse 进行代码。遇到的代码也有点奇怪,main 方法启动 java 工程,里面封装 Tomc…

音频声音信号

音频信号是模拟信号,我们需要将其保存为数字信号,才能对语音进行算法操作,WAV是Microsoft开发的一种声音文件格式,通常被用来保存未压缩的声音数据。 通道数:同时有个几个设备在进行音频的采样;采样频率&a…

Django连接MySQL与正反向迁移命令

目录 连接MySQL 方法一:pymysql连接 方法二:mysqlclient 迁移命令 连接MySQL 方法一:pymysql连接 第一步:修改settings.py配置文件中的DATABASES: DATABASES {default: {ENGINE: django.db.backends.mysql,HOS…

【车载开发系列】UDS诊断---动态定义DID($0x2C)

【车载开发系列】UDS诊断—动态定义DID($0x2C) UDS诊断---动态定义DID($0x2C)【车载开发系列】UDS诊断---动态定义DID($0x2C)一.概念定义1)DID定义方式2)DID失效条件二.应用场景三.报…

【Python游戏】今天小编用Python实现了一个植物大战僵尸小游戏 | 附源码

前言 halo,包子们下午好 今天给打击整一个植物大战僵尸 无广告版本 哈哈 说实话,现在的小游戏很多都是有广告,多少有点难受 今天给大家直接安排 相关文件 关注小编,私信小编领取哟! 当然别忘了一件三连哟~~ 源码点…

java基于Springboot的社区维修平台-计算机毕业设计

项目介绍 系统管理也都将通过计算机进行整体智能化操作,对于社区维修平台所牵扯的管理及数据保存都是非常多的,例如住户管理、社区公告管理、维修工管理、维修订单管理、接单信息管理、订单信息管理、在线沟通管理、举报信息管理、留言板管理、系统管理…

4G远程智能巡检摄像机功耗测试对比

对于一款输电线路监控设备,由于装在铁塔上面,对于功耗,电网上面的应用,尤为重要,如何得做到低功耗,一直大家研究的地方,解决了功耗,基本产品成功了一半,而合方圆在电网行…

对称加密算法(一)(替换算法,Caesar, Playfair, Hill Cipher,Polyalphabetic Cipher)

文章目录Symmetric Cipher ModelSubstitution TechniquesCaesar CipherMonoalphabetic CiphersPlayfair CipherHill CipherPolyalphabetic CipherVigenere CipherVernam CipherOne-Time PadReferences对称加密,也被称为传统加密、单钥加密或私钥加密,是 …

Flink系列-1、流式计算简介

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 大数据系列文章目录 官方网址:https://flink.apache.org/ 学习资料:https://flink-learning.org.cn/ 目录数据的时效性…

【pytorch】使用pytorch自己实现LayerNorm

pytorch中使用LayerNorm的两种方式,一个是nn.LayerNorm,另外一个是nn.functional.layer_norm 1. 计算方式 根据官方网站上的介绍,LayerNorm计算公式如下。 公式其实也同BatchNorm,只是计算的维度不同。 下面通过实例来走一遍公式 假设有如下的数据 …

JQuery 高级

目录 1. 动画 1. 三种方式显示和隐藏元素 1. 默认显示和隐藏方式 2. 滑动显示和隐藏方式 2. 遍历 1. js的遍历方式 2. jq的遍历方式 5. 插件:增强JQuery的功能 1 . 实现方式: 1. $.fn.extend(object) * 增强通过Jquery获取的对象的…

java计算机毕业设计ssm学生宿舍管理系统efyug(附源码、数据库)

java计算机毕业设计ssm学生宿舍管理系统efyug(附源码、数据库) 项目运行 环境配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff0…

取余,模运算,余数的正负问题,1497. 检查数组对是否可以被 k 整除

首先,我们来看数学中对余数的定义 0到除数之间的整数,所以当除数是负数的时候,余数也是负数。 举个例子: 接下来,我们看计算机中余数是怎么求的??? 所有的语言和计算器都遵循了让商…

防火墙豁免实验

♥️作者:小刘在C站 ♥️每天分享云计算网络运维课堂笔记,疫情之下,你我素未谋面,但你一定要平平安安,一 起努力,共赴美好人生! ♥️夕阳下,是最美的,绽放,愿…

单商户商城系统功能拆解44—应用中心—小程序直播

单商户商城系统,也称为B2C自营电商模式单店商城系统。可以快速帮助个人、机构和企业搭建自己的私域交易线上商城。 单商户商城系统完美契合私域流量变现闭环交易使用。通常拥有丰富的营销玩法,例如拼团,秒杀,砍价,包邮…

shell 基本语法第四讲之(find(文件查找)、xargs(字符串拼凑)、sed(处理文本)、awk(文本处理)、crontab(系统定时器))

20、find(文件查找) 格式 find pathname -options [-print -exec -ok …] 命令说明举例-name按照文件名查找文件。find . -name “1.txt”-perm按照文件权限来查找文件。find . -perm 660-user按照文件属主来查找文件。-group按照文件所属的组来查找文件。-mtime -n n按照文件…

西电计网实验

《计算机通信与网络》网络实验 阅读须知:计网六次实验均已通过线下操作进行验收(后面两次善意线上了),写报告由于描述流程困难,故采用eNSP对实验内容进行复现,故此报告实验的过程分析都是基于eNSP&#xf…

MBSE和刚亮相的B-21“突袭者”隐形轰炸机

DDD领域驱动设计批评文集>> 《软件方法》强化自测题集>> 《软件方法》各章合集>> 12月2日,B-21“突袭者”隐形轰炸机举行揭幕仪式。 摘译一篇来自制造商Northrop Grumman公司(诺斯罗普格鲁曼公司)网站上的文章片段。 利…