refactor: reverse visibility for get_resource_template/_get_resource_template methods

This commit is contained in:
Jeremiah Lowin 2026-01-17 14:41:40 -05:00
commit 676e43a939
8 changed files with 16 additions and 16 deletions

View file

@ -204,7 +204,7 @@ class AuthMiddleware(Middleware):
# Get resource/template (component auth is checked in get_*, raises if unauthorized)
component = await fastmcp.fastmcp.get_resource(str(uri))
if component is None:
component = await fastmcp.fastmcp._get_resource_template(str(uri))
component = await fastmcp.fastmcp.get_resource_template(str(uri))
if component is None:
raise AuthorizationError(
f"Authorization failed for resource '{uri}': resource not found"

View file

@ -187,7 +187,7 @@ class AggregateProvider(Provider):
)
return self._collect_list_results(results, "list_resource_templates")
async def get_resource_template(
async def _get_resource_template(
self, uri: str, version: VersionSpec | None = None
) -> ResourceTemplate | None:
"""Get resource template by URI.
@ -198,7 +198,7 @@ class AggregateProvider(Provider):
If specified, returns highest version matching the spec from any provider.
"""
results = await gather(
*[p._get_resource_template(uri, version) for p in self._providers],
*[p.get_resource_template(uri, version) for p in self._providers],
return_exceptions=True,
)
return self._get_highest_version_result(

View file

@ -184,7 +184,7 @@ class Provider:
return await chain()
async def _get_resource_template(
async def get_resource_template(
self, uri: str, version: VersionSpec | None = None
) -> ResourceTemplate | None:
"""Get resource template by transformed URI with all transforms applied.
@ -197,7 +197,7 @@ class Provider:
async def base(
u: str, version: VersionSpec | None = None
) -> ResourceTemplate | None:
return await self.get_resource_template(u, version)
return await self._get_resource_template(u, version)
chain = base
for transform in self.transforms:
@ -311,7 +311,7 @@ class Provider:
"""
return []
async def get_resource_template(
async def _get_resource_template(
self, uri: str, version: VersionSpec | None = None
) -> ResourceTemplate | None:
"""Get a resource template that matches the given URI.

View file

@ -550,16 +550,16 @@ class FastMCPProvider(Provider):
FastMCPProviderResourceTemplate.wrap(self.server, t) for t in raw_templates
]
async def get_resource_template(
async def _get_resource_template(
self, uri: str, version: VersionSpec | None = None
) -> ResourceTemplate | None:
"""Get a resource template that matches the given URI.
Passes the full VersionSpec to the nested server, which handles both
exact version matching and range filtering. Uses _get_resource_template
exact version matching and range filtering. Uses get_resource_template
to ensure the nested server's transforms are applied.
"""
raw_template = await self.server._get_resource_template(uri, version)
raw_template = await self.server.get_resource_template(uri, version)
if raw_template is None:
return None
return FastMCPProviderResourceTemplate.wrap(self.server, raw_template)

View file

@ -203,12 +203,12 @@ class FileSystemProvider(LocalProvider):
await self._ensure_loaded()
return await super()._list_resource_templates()
async def get_resource_template(
async def _get_resource_template(
self, uri: str, version: VersionSpec | None = None
) -> ResourceTemplate | None:
"""Get a resource template, reloading if in reload mode."""
await self._ensure_loaded()
return await super().get_resource_template(uri, version)
return await super()._get_resource_template(uri, version)
async def list_prompts(self) -> Sequence[Prompt]:
"""Return all prompts, reloading if in reload mode."""

View file

@ -558,7 +558,7 @@ class LocalProvider(Provider):
if isinstance(v, ResourceTemplate) and self._is_component_enabled(v)
]
async def get_resource_template(
async def _get_resource_template(
self, uri: str, version: VersionSpec | None = None
) -> ResourceTemplate | None:
"""Get a resource template that matches the given URI.

View file

@ -383,7 +383,7 @@ class OpenAPIProvider(Provider):
"""Return all resource templates created from the OpenAPI spec."""
return list(self._templates.values())
async def get_resource_template(
async def _get_resource_template(
self, uri: str, version: VersionSpec | None = None
) -> ResourceTemplate | None:
"""Get a resource template that matches the given URI."""

View file

@ -1324,12 +1324,12 @@ class FastMCP(Provider, Generic[LifespanResultT]):
return _dedupe_with_versions(authorized, lambda t: t.uri_template)
async def get_resource_template(
async def _get_resource_template(
self, uri: str, version: VersionSpec | None = None
) -> ResourceTemplate | None:
"""Get a resource template by URI via aggregation from providers.
This is the raw lookup that Provider._get_resource_template() wraps with transforms.
This is the raw lookup that Provider.get_resource_template() wraps with transforms.
Aggregates from all sub-providers and applies component-level auth.
Args:
@ -1341,7 +1341,7 @@ class FastMCP(Provider, Generic[LifespanResultT]):
"""
# Aggregate from all sub-providers (each applies their own transforms)
results = await gather(
*[p._get_resource_template(uri, version) for p in self._providers],
*[p.get_resource_template(uri, version) for p in self._providers],
return_exceptions=True,
)