基于Cython的插件式面向对象编程系统
项目描述
cPop用于表达插件式面向对象编程范式。插件式面向对象编程范式被设计成使可插拔软件易于编写和扩展。
插件式面向对象编程提供了一种新的方法来扩展开发团队并交付复杂的软件。这是通过将应用程序完全由插件组成,并使应用程序本身能够相互原生插拔来实现的。
使用插件式面向对象编程,可以轻松地实现两者的最佳结合,软件可以构建成小块,使开发更容易维护。然后可以将这些小块合并并部署在一个单一的二进制文件中,使代码部署变得同样简单。
这一切都使用Cython,这是世界上最受欢迎和强大的编程语言之一。
安装
首先,从pypi安装cPop
pip3 install cPop
创建一个可插拔应用程序只需要几行代码。这是每个pop项目的根本。我们创建一个中心,添加动态子系统,然后通过中心的命名空间调用它们。
import cpop
import asyncio
loop = asyncio.get_event_loop()
asyncio.run(main())
async def main():
async with cpop.Hub() as hub:
await hub.my_sub.init.cli()
配置
在创建cpop应用程序时,我们将所有pop配置放入config.yaml
# Every config option for your plugin
config:
my_namespace:
my_opt:
default: True
# Options that should be exposed on the CLI when your app controls the CLI
cli_config:
my_namespace:
my_opt:
# All options that are accepted by ArgParser.add_argument are good here
help: description of this option
subcommands:
- my_subcommand
group: My arg group
# Subcommands to expose for your project
subcommands:
my_namespace:
my_subcommand:
help: My subcommand
# Dynamic namespaces that your app merges onto and which folders extend those namespaces
dyne:
my_dyne:
- src_dir
# python imports that your app uses which should be added to hub.lib for your app
import:
- asyncio
- importlib
- importlib.resources
- os
- toml
创建pop配置文件
# The default location is in ~/.pop/config.yaml
# But you can change that by setting the POP_CONFIG environment variable
pop_cli:
# Setting this option will make your hub persist on the cli between calls
hub_state: ~/.pop/hub.pkl
log:
log_plugin: async
从上述示例中,所有参数都会加载到hub.OPT.my_namesapce下的命名空间中。一个config.yaml可以向多个命名空间添加配置选项。它们按在sys.path中找到的顺序合并在一起。
测试
克隆仓库
git clone https://gitlab.com/Akm0d/cpop.git
cd cpop
使用测试额外功能安装cpop
pip3 install .\[test\]
运行克隆的cPop副本中的测试
pytest tests
发布
以下步骤是使用 hatch 发布项目的步骤
pip install .\[build\]
hatch build
export HATCH_INDEX_USER="__token__"
export HATCH_INDEX_AUTH="pypi-api-token"
hatch publish
文档
查看文档获取更多信息
这里有一个更深入的教程,之后是关于如何进行插件导向编程的文档。请花时间阅读,它不长,但可以改变您看待编写软件的方式!
项目详情
关闭
哈希值 for cpop-36.0.2-cp312-cp312-manylinux_2_39_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 392bfdbf3e79f308fe504d78ae874013b4cbb6d6ffd1f1278a4ddb3f14dcc0a1 |
|
MD5 | cf2011e680652d3d4e1a8511b34cec3e |
|
BLAKE2b-256 | 210d922765f628b4e8726745f1018a2d61d9ac321fc19529abd0ee1f61cb2d8f |