扩展开发
本指南将帮助您为 OpenBB 平台开发自定义扩展。
什么是扩展?
扩展是为 OpenBB 平台添加新功能的模块。它们可以包括:
- 新的数据端点
- 分析工具
- 可视化组件
- 自定义指标
扩展结构
基本目录结构
my_extension/
├── __init__.py
├── models/
│ ├── __init__.py
│ └── data_models.py
├── providers/
│ ├── __init__.py
│ └── my_provider.py
└── router.py
创建路由器
from openbb_core.app.model.command_context import CommandContext
from openbb_core.app.model.obbject import OBBject
from openbb_core.app.router import Router
router = Router(prefix="/my_extension")
@router.command(model="MyDataModel")
def my_endpoint(
cc: CommandContext,
provider_choices: dict,
standard_params: dict,
extra_params: dict,
) -> OBBject:
"""我的自定义端点"""
return OBBject(results=data)
定义数据模型
from pydantic import BaseModel, Field
from typing import Optional
class MyDataModel(BaseModel):
"""我的数据模型"""
symbol: str = Field(description="股票代码")
price: float = Field(description="价格")
volume: Optional[int] = Field(default=None, description="成交量")
注册扩展
在 init.py 中
from openbb_core.app.extension_loader import ExtensionLoader
# 注册扩展
ExtensionLoader.register_extension("my_extension", router)
测试扩展
import pytest
from openbb import obb
def test_my_extension():
result = obb.my_extension.my_endpoint("AAPL")
assert result is not None
assert len(result.results) > 0
发布扩展
1. 创建 setup.py
from setuptools import setup, find_packages
setup(
name="openbb-my-extension",
version="1.0.0",
packages=find_packages(),
install_requires=[
"openbb-core",
],
entry_points={
"openbb_extensions": [
"my_extension = my_extension:router",
],
},
)
2. 构建和发布
python setup.py sdist bdist_wheel
pip install twine
twine upload dist/*
最佳实践
- 遵循命名约定
- 提供完整的文档
- 包含单元测试
- 处理错误情况
- 优化性能