一个简单的异步应用插件系统

aiohook的Python项目详细描述


aiohook–用于异步、三重奏和古玩的简单插件

aiohooks是一个小库,用于帮助在 python 3.7+异步应用程序开发与anyio兼容 图书馆。

快速启动

  • 通过修饰一个伪def,声明钩子协同程序的签名。 (没有实现,或者使用默认实现)使用aiohook.spec
  • await您希望在其中调用插件的伪协同程序。
  • 在单独的模块或类中实现虚拟coros,并用 aiohook.impl('reference.to.dummy')
  • 调用aiohook.register(reference)来注册修饰的实现 在reference(对象实例或模块)中。
  • 未实现的钩子导致调用默认实现。
  • 注册同一个钩子的多个实现会引发异常。

基本用法

在这个故事中,你的名字是华莱士,你正在实现一个很棒的异步 应用程序接受插件。你的用户,格罗米特,想利用你的 插件系统注入他的自定义解析逻辑。

应用程序设计器

必须首先定义每个钩子函数的签名,因为 在单独的pluginspecs.py文件中的实例:

fromtypingimportSequence,Optionalimportaiohook@aiohook.specasyncdeftokenize(sentence:str)->Sequence[str]:# Describe the purpose of the hook, arguments etc in the docstring"""Split string of characters into individual tokens."""# No implementation here, this is just a function spec@aiohook.specasyncdeftransform_token(word:str)->Optional[str]:"""Preprocess each raw token, for instance as a normalization step."""

在应用程序代码中,然后调用指定的函数,就好像它们 已经实施:

importsysfrompluginspecsimporttokenize,transform_tokenwithopen(sys.argv[1],'r')asf:

插件开发人员

开发

两个需求文件用于描述开发设置:

  • requirements.txt文件描述了一个工作开发环境,其中 固定依赖项。
  • requirements-base.txt文件仅包含直接取消固定的依赖项。

覆盖率

的测试
pytest --cov=aiohook tests/

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

推荐PyPI第三方库


热门话题
java将多个线程中的函数放入单个队列   数组在Java中,如何在不改变整数顺序的情况下找到整数组的顺序?   java控制器属于表示层?   java Apache Ivy和本地Maven repo如何处理使用Maven 3构建的快照   Java可与泛型类型进行比较   java这个表达式在泛型中是什么意思   JavaEclipse和TeamCity插件   java检测构造函数中的final是否为空   java如何在StanfordCoreNLP管道中同时使用词汇化和依赖性解析器?   java在AntUnit控制台日志中显示完整异常堆栈跟踪   lambda如何与Java 8供应商建立连锁关系   如何让GRPC的重试机制在Kubernetes集群中使用grpcjava工作?   如何使用openjdk:7 Docker映像和Gradle包装器避免“EC参数错误”?   java将集合映射扩展为一维映射新的“无法推断函数接口类型”