创建新的工具包扩展
在使用提供的模板向 OpenBB 平台添加新的工具包扩展和路由器路径之前,了解工具包和提供商扩展之间的区别很重要。您可以在这里找到更多信息。
如何创建路由器扩展
让我们创建一个扩展,在 obb
命名空间的基础上定义一个新的路由器入口点。
它将被称为 openbb-dashboards
,并将作为各种仪表板包的空路由器,用于填充未来的端点。
它本身可能没有任何功能。其他一些扩展将把它命名为依赖项,将其用作入口点。
我们将使用 ZIP 文件 模板作为起点,首先重命名所有内容。
创建文件夹
该文件夹不必与 OpenBB 代码保持在一起,可以是自己的 GitHub 仓库。 为了演示目的,我们将在其余 OpenBB 扩展中解压 ZIP 文件模板:
~/OpenBB/openbb_platform/extensions/dashboards
添加依赖项
此扩展将与可能在未来填充此空间的组件类型无关 - Plotly Dash、Streamlit 等。
依赖项的唯一添加将是 openbb-charting
。
这将提供 Plotly 图表库和带有 PyWry 的自定义后端用于窗口创建。
[tool.poetry]
name = "openbb-dashboards"
version = "1.0.0"
description = "Dashboards Extension for OpenBB"
authors = ["OpenBB Team <hello@openbb.co>"]
readme = "README.md"
packages = [{ include = "openbb_dashboards" }]
[tool.poetry.dependencies]
python = ">=3.8,<3.12"
openbb = "^4.1.7"
openbb-charting = "^2.0.3"
[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"
[tool.poetry.plugins."openbb_core_extension"]
dashboards = "openbb_dashboards.dashboards_router:router"
构建和安装包
打开终端并导航到扩展所在的文件夹,然后输入:
poetry lock
pip install -e .
添加路由器命令
为了演示此扩展,我们将创建一个用于创建和返回折线图的简单函数。这将向新命名空间添加一个端点:obb.dashboards.line_chart()
。
提示
创建新函数后,记住重新构建 Python 接口和静态资源。
import openbb
openbb.build()
exit()
"""Dashboards Router."""
# pylint: disable = unused-argument
from typing import List, Optional, Union
from openbb_charting import charting_router
from openbb_charting.core.openbb_figure import OpenBBFigure
from openbb_core.app.model.charts.chart import Chart
from openbb_core.app.model.obbject import OBBject
from openbb_core.app.router import Router
from openbb_core.app.utils import basemodel_to_df, df_to_basemodel
from openbb_core.provider.abstract.data import Data
router = Router(prefix="")
@router.command(
methods=["POST"],
)
def line_chart(
data: Union[Data, List[Data]],
x: Optional[str] = None,
y: Optional[Union[str, List[str]]] = None,
layout_kwargs: Optional[dict] = None,
scatter_kwargs: Optional[dict] = None,
) -> OBBject:
"""Create a line chart."""
index = "date" if x is None else x
df = basemodel_to_df(data, index=index)
y = y.split(",") if isinstance(y, str) else y
if y is None:
y = df.columns.to_list()
if scatter_kwargs is None:
scatter_kwargs = {}
fig = OpenBBFigure(create_backend=True)
for col in y:
fig = fig.add_scatter(
x=df.index,
y=df[col],
name=col,
hovertemplate=
"<b>%{fullData.name}</b>: " +
"%{y:.2f}" +
"<extra></extra>",
hoverlabel=dict(font_size=10),
**scatter_kwargs,
)
if layout_kwargs is None:
layout_kwargs = {}
fig.update_layout(
hovermode="x unified",
**layout_kwargs,
)
results = OBBject(results=df_to_basemodel(df))
results.chart = Chart(
fig=fig,
content=fig.show(external=True).to_plotly_json(),
format=charting_router.CHART_FORMAT
)
return results
使用示例语法:
data = obb.equity.price.historical("AAPL", provider="yfinance")
chart = obb.dashboards.line_chart(
data.results, y=["high", "low"],
scatter_kwargs = {"showlegend": False},
layout_kwargs={"template":"plotly_white"}
)
chart.show()
此演示并不意味着代表完成的产品,只是在开始时探索的路径。 我们希望您享受这个旅程,并期待看到您构建的内容!