Skip to content

Commit e704ef6

Browse files
committed
feat: start implementation of uri resolver wrapper
1 parent 3ae3816 commit e704ef6

4 files changed

Lines changed: 92 additions & 5 deletions

File tree

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,9 @@
1+
from .abc import *
2+
from .aggregator import *
3+
from .helpers import *
14
from .legacy import *
25
from .fs_resolver import *
36
from .legacy.redirect_resolver import *
47
from .static_resolver import *
8+
from recursive_resolver import *
9+
from .uri_resolver_wrapper import *

packages/polywrap-uri-resolvers/polywrap_uri_resolvers/aggregator/uri_resolver_aggregator_base.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@
22
from typing import List
33

44
from polywrap_core import UriResolutionResult, IUriResolutionStep, IUriResolver, Uri, IUriResolutionContext, Client, UriPackageOrWrapper
5-
from polywrap_result import Result, Ok
5+
from polywrap_result import Result
66

77
class UriResolverAggregatorBase(IUriResolver, ABC):
88
@abstractmethod
9-
def get_uri_resolvers(self, uri: Uri, client: Client, resolution_context: IUriResolutionContext) -> Result[List[IUriResolver]]:
9+
async def get_uri_resolvers(self, uri: Uri, client: Client, resolution_context: IUriResolutionContext) -> Result[List[IUriResolver]]:
1010
pass
1111

1212
@abstractmethod
Lines changed: 49 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,51 @@
1+
from functools import reduce
2+
from typing import List, cast
13
from aggregator import UriResolverAggregatorBase
2-
4+
from polywrap_core import Uri, Client, IUriResolutionContext, IUriResolver, UriPackageOrWrapper
5+
from polywrap_result import Result, Err, Ok
6+
from polywrap_uri_resolvers import UriResolverWrapper
37
class ExtendableUriResolver(UriResolverAggregatorBase):
4-
def __init__(self):
5-
pass
8+
name: str
9+
10+
def __init__(self, name: str):
11+
self.name = name
12+
13+
async def get_uri_resolvers(self, uri: Uri, client: Client, resolution_context: IUriResolutionContext) -> Result[List[IUriResolver]]:
14+
result = client.get_implementations(uri)
15+
16+
if result.is_err():
17+
return cast(Err, result)
18+
19+
def get_wrapper_resolvers(implementation_uri: Uri, resolvers: List[UriResolverWrapper]) -> List[IUriResolver]:
20+
if not resolution_context.is_resolving(implementation_uri):
21+
resolver_wrapper = UriResolverWrapper(implementation_uri)
22+
resolvers.append(resolver_wrapper)
23+
24+
return cast(List[IUriResolver], resolvers)
25+
26+
return Ok(reduce(get_wrapper_resolvers, result.value)) # type: ignore
27+
28+
async def try_resolve_uri(
29+
self,
30+
uri: Uri,
31+
client: Client,
32+
resolution_context: IUriResolutionContext
33+
) -> Result[UriPackageOrWrapper]:
34+
result = await self.get_uri_resolvers(
35+
uri, client, resolution_context
36+
)
37+
38+
if result.is_err():
39+
return cast(Err, result)
40+
41+
resolvers: List[IUriResolver] = result.value # type: ignore
42+
43+
if len(resolvers) == 0:
44+
return Ok(uri)
45+
46+
return await self.try_resolve_uri_with_resolvers(
47+
uri,
48+
client,
49+
resolvers,
50+
resolution_context
51+
)
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
from typing import Optional, Union, cast
2+
from polywrap_core import Uri, Client, IUriResolutionContext, UriPackageOrWrapper
3+
from polywrap_uri_resolvers import ResolverWithHistory
4+
from polywrap_result import Result, Ok, Err
5+
6+
class UriResolverWrapper(ResolverWithHistory):
7+
implementation_uri: Uri
8+
9+
def __init__(self, uri: Uri) -> None:
10+
self.implementation_uri = uri
11+
12+
def get_step_description(self) -> str:
13+
return super().get_step_description()
14+
15+
async def _try_resolve_uri(
16+
self,
17+
uri: Uri,
18+
client: Client,
19+
resolution_context: IUriResolutionContext
20+
) -> Result[UriPackageOrWrapper]:
21+
result = await try_resolve_uri_with_implementation(uri, self.implementation_uri, client, resolution_context)
22+
23+
if result.is_err():
24+
return cast(Err, result)
25+
26+
return Ok()
27+
28+
29+
30+
async def try_resolve_uri_with_implementation(
31+
uri: Uri,
32+
implementation_uri: Uri,
33+
client: Client,
34+
resolution_context: IUriResolutionContext
35+
) -> Result[Optional[Union[str, bytearray]]]:
36+
return Ok("")

0 commit comments

Comments
 (0)