【原文链接】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 pluggyhookspec = pluggy.HookspecMarker("myproject")
hookimpl = pluggy.HookimplMarker("myproject")class MySpec:@hookspecdef myhook(self, arg1, arg2):passclass Plugin_1:@hookimpl()def myhook(self, arg1, arg2):print("in Plugin_1.myhook()")return arg1 + arg2class Plugin_2:@hookimpl(hookwrapper=True)def myhook(self, arg1, arg2):print("in Plugin_2.myhook() before yield...")output=yieldresult=output.get_result()print("in Plugin_2.myhook() after yield...")print(result)class Plugin_3:@hookimpldef myhook(self, arg1, arg2):print("inside Plugin_3.myhook()")return arg1 - arg2+10pm = 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源码进行解析了。
上一篇:【产品分析】amazon数据采集亚马逊数据分析评论分析竞品
下一篇:音频声音信号