Lee-W commented on code in PR #72939:
URL: https://github.com/apache/airflow/pull/72939#discussion_r4052613504
##########
devel-common/src/sphinx_exts/providers_extensions.py:
##########
@@ -515,8 +514,93 @@ def render_content(self, *, tags: set[str] | None,
header_separator: str = DEFAU
return _render_openlineage_supported_classes_content()
+def _find_provider_package_data(package_name: str) -> dict[str, Any]:
+ for provider in load_package_data():
+ if provider["package-name"] == package_name:
+ return provider
+ raise ValueError(f"No provider.yaml found for package '{package_name}'")
+
+
+def _render_connection_services_content(package_name: str) -> str:
+ provider = _find_provider_package_data(package_name)
+ rows = [
+ {
+ "hook_name": conn["hook-name"],
+ "services": conn.get("external-services") or [],
+ "ref": f"howto/connection:{conn['connection-type']}",
+ }
+ for conn in provider.get("connection-types", [])
+ ]
+ return _render_template("provider_connection_services.rst.jinja2",
rows=rows)
+
+
+# Display name for each toolset module: the class name for modules that map to
one
+# (`toolsets.rst` documents each under a `` ``ClassName`` `` heading), or a
short
+# descriptive name for the two that don't (`managed_agent` documents a family
of
+# provider-specific subclasses under "Managed Agent Toolsets";
`langchain_bridge` is a
+# function, documented under "Working with LangChain"). Kept here rather than
in
+# `provider.yaml` because it is presentation-only, not metadata the registry
also needs.
+#
+# Deliberately no `.get(basename, default)` fallback below: every module in
+# `python-modules` must have an entry here, the same way `LABELS` and the
anchor check
+# in `test_provider_metadata.py` require full coverage. A `KeyError` on a new
toolset
+# module is the intended failure mode, not a silently rendered basename.
+_TOOLSET_DISPLAY_NAMES = {
+ "hook": "HookToolset",
+ "sql": "SQLToolset",
+ "datafusion": "DataFusionToolset",
+ "logging": "LoggingToolset",
+ "mcp": "MCPToolset",
+ "skills": "AgentSkillsToolset",
+ "sandbox": "SandboxToolset",
+ "langchain_bridge": "LangChain Bridge",
+ "managed_agent": "Managed Agent Toolsets",
+}
+
+
+def _render_toolset_services_content(package_name: str) -> str:
+ provider = _find_provider_package_data(package_name)
+ rows = []
+ for toolset in provider.get("toolsets", []):
+ services_by_module = {
+ entry["module"]: entry["services"] for entry in
toolset.get("external-services") or []
+ }
+ for module in toolset.get("python-modules", []):
+ basename = module.rsplit(".", 1)[-1]
+ rows.append(
+ {
+ "display_name": _TOOLSET_DISPLAY_NAMES[basename],
Review Comment:
`_render_toolset_services_content` now catches the `KeyError` and raises a
`ValueError` naming the provider package and the full dotted module path, and
saying to add an entry to `_TOOLSET_DISPLAY_NAMES`.
Deriving the name from `provider.yaml` didn't work: `integration-name` is in
`toolsets` entry, not per module, so all 9 modules would collapse to 1 name.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]