Source code for polywrap_uri_resolvers.resolvers.abc.resolver_with_history

"""This module contains the ResolverWithHistory abstract class."""
from abc import abstractmethod

from polywrap_core import (
    InvokerClient,
    Uri,
    UriPackageOrWrapper,
    UriResolutionContext,
    UriResolutionStep,
    UriResolver,
)


[docs]class ResolverWithHistory(UriResolver): """Defines an abstract resolver that tracks its steps in\ the resolution context. This is useful for resolvers that doesn't need to manually track \ their steps in the resolution context. """
[docs] def try_resolve_uri( self, uri: Uri, client: InvokerClient, resolution_context: UriResolutionContext, ) -> UriPackageOrWrapper: """Try to resolve a URI to a wrap package, a wrapper, or a URI and \ update the resolution context with the result. This method calls the internal abstract method _tryResolveUri before\ updating the resolution context. Implementations are expect to place\ resolution logic in _tryResolveUri. Args: uri (Uri): The URI to resolve. client (InvokerClient): The client to use for\ resolving the URI. resolution_context (IUriResolutionContext):\ The resolution context to update. Returns: UriPackageOrWrapper: The resolved URI package, wrapper, or URI. """ result = self._try_resolve_uri(uri, client, resolution_context) step = UriResolutionStep( source_uri=uri, result=result, description=self.get_step_description() ) resolution_context.track_step(step) return result
[docs] @abstractmethod def get_step_description(self) -> str: """Get a description of the resolution step."""
@abstractmethod def _try_resolve_uri( self, uri: Uri, client: InvokerClient, resolution_context: UriResolutionContext, ) -> UriPackageOrWrapper: """Resolve a URI to a wrap package, a wrapper, or a URI using an internal function. Args: uri (Uri): The URI to resolve. client (InvokerClient): The client to use for\ resolving the URI. resolution_context (IUriResolutionContext[UriPackageOrWrapper]):\ The resolution context to update. """
__all__ = ["ResolverWithHistory"]