Skip to content

Commit 05473ae

Browse files
committed
fix: typing issues and refactor code
1 parent a77b010 commit 05473ae

16 files changed

Lines changed: 115 additions & 96 deletions

File tree

packages/polywrap-core/polywrap_core/types/uri.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import re
44
from dataclasses import dataclass
5+
from functools import total_ordering
56
from typing import Any, List, Optional, Tuple, Union
67

78

@@ -14,6 +15,7 @@ class UriConfig:
1415
uri: str
1516

1617

18+
@total_ordering
1719
class Uri:
1820
"""
1921
A Polywrap URI.

packages/polywrap-core/polywrap_core/types/uri_resolution_step.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from __future__ import annotations
22

33
from dataclasses import dataclass
4-
from typing import TYPE_CHECKING, Optional
4+
from typing import TYPE_CHECKING, List, Optional
55

66
from polywrap_result import Result
77

@@ -16,4 +16,4 @@ class IUriResolutionStep:
1616
source_uri: Uri
1717
result: Result["UriPackageOrWrapper"]
1818
description: Optional[str] = None
19-
sub_history: Optional["IUriResolutionStep"] = None
19+
sub_history: Optional[List["IUriResolutionStep"]] = None

packages/polywrap-msgpack/polywrap_msgpack/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ def sanitize(value: Any) -> Any:
5959
array: List[Any] = value
6060
return [sanitize(a) for a in array]
6161
if isinstance(value, tuple):
62-
array: List[Any] = list(value) # type: ignore
62+
array: List[Any] = list(value) # type: ignore partially unknown
6363
return sanitize(array)
6464
if isinstance(value, set):
6565
set_val: Set[Any] = value
Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,23 @@
11
from abc import ABC, abstractmethod
22

3-
from polywrap_core import IUriResolver, Uri, IUriResolutionContext, UriPackageOrWrapper, Client, IUriResolutionStep
3+
from polywrap_core import (
4+
IUriResolver,
5+
Uri,
6+
IUriResolutionContext,
7+
UriPackageOrWrapper,
8+
Client,
9+
IUriResolutionStep,
10+
)
411
from polywrap_result import Result
512

613

714
class IResolverWithHistory(IUriResolver, ABC):
8-
async def try_resolve_uri(self, uri: Uri, client: Client, resolution_context: IUriResolutionContext):
15+
async def try_resolve_uri(
16+
self, uri: Uri, client: Client, resolution_context: IUriResolutionContext
17+
):
918
result = await self._try_resolve_uri(uri, client, resolution_context)
1019
step = IUriResolutionStep(
11-
source_uri=uri,
12-
result=result,
13-
description=self.get_step_description()
20+
source_uri=uri, result=result, description=self.get_step_description()
1421
)
1522
resolution_context.track_step(step)
1623

@@ -21,5 +28,7 @@ def get_step_description(self) -> str:
2128
pass
2229

2330
@abstractmethod
24-
async def _try_resolve_uri(self, uri: Uri, client: Client, resolution_context: IUriResolutionContext) -> Result["UriPackageOrWrapper"]:
31+
async def _try_resolve_uri(
32+
self, uri: Uri, client: Client, resolution_context: IUriResolutionContext
33+
) -> Result["UriPackageOrWrapper"]:
2534
pass

packages/polywrap-uri-resolvers/polywrap_uri_resolvers/aggregator/uri_resolver_aggregator_base.py renamed to packages/polywrap-uri-resolvers/polywrap_uri_resolvers/abc/uri_resolver_aggregator.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
from polywrap_core import UriResolutionResult, IUriResolutionStep, IUriResolver, Uri, IUriResolutionContext, Client, UriPackageOrWrapper
55
from polywrap_result import Result, Err
66

7-
class UriResolverAggregatorBase(IUriResolver, ABC):
7+
class IUriResolverAggregator(IUriResolver, ABC):
88
@abstractmethod
99
async def get_uri_resolvers(self, uri: Uri, client: Client, resolution_context: IUriResolutionContext) -> Result[List[IUriResolver]]:
1010
pass
@@ -42,7 +42,7 @@ async def try_resolve_uri_with_resolvers(self, uri: Uri, client: Client, resolve
4242
step = IUriResolutionStep(
4343
source_uri=uri,
4444
result=result,
45-
sub_history=sub_context.get_history(),
45+
sub_history=sub_context.get_history(),
4646
description=self.get_step_description()
4747
)
4848
resolution_context.track_step(step)
@@ -54,8 +54,8 @@ async def try_resolve_uri_with_resolvers(self, uri: Uri, client: Client, resolve
5454
step = IUriResolutionStep(
5555
source_uri=uri,
5656
result=result,
57-
sub_history=sub_context.get_history(), # type: ignore
58-
description=self.get_step_description() # type: ignore
57+
sub_history=sub_context.get_history(),
58+
description=self.get_step_description()
5959
)
6060
resolution_context.track_step(step)
6161

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
from .uri_resolver_aggregator_base import *
1+
from ..abc.uri_resolver_aggregator import *
22
from .uri_resolver_aggregator import *

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@
33
from polywrap_core import IUriResolver, Uri, IUriResolutionContext, Client
44
from polywrap_result import Result, Ok
55

6-
from .uri_resolver_aggregator_base import UriResolverAggregatorBase
6+
from ..abc.uri_resolver_aggregator import IUriResolverAggregator
77

8-
class UriResolverAggregator(UriResolverAggregatorBase):
8+
class UriResolverAggregator(IUriResolverAggregator):
99
resolvers: List[IUriResolver]
1010
name: Optional[str]
1111

@@ -15,5 +15,5 @@ def __init__(self, resolvers: List[IUriResolver]):
1515
def get_step_description(self) -> str:
1616
return self.name or "UriResolverAggregator"
1717

18-
def get_uri_resolvers(self, uri: Uri, client: Client, resolution_context: IUriResolutionContext) -> Result[List[IUriResolver]]:
18+
async def get_uri_resolvers(self, uri: Uri, client: Client, resolution_context: IUriResolutionContext) -> Result[List[IUriResolver]]:
1919
return Ok(self.resolvers)

packages/polywrap-uri-resolvers/polywrap_uri_resolvers/builder.py

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,24 @@
99

1010

1111
# TODO: Recheck if this should return result or not
12-
def build_resolver(uri_resolver_like: UriResolverLike, name: Optional[str]) -> IUriResolver:
13-
if type(uri_resolver_like) == list:
14-
resolvers: List[IUriResolver] = list(map(lambda r: build_resolver(cast(UriResolverLike, r), name), uri_resolver_like)) # type: ignore
15-
return UriResolverAggregator(resolvers) # type: ignore
12+
def build_resolver(
13+
uri_resolver_like: UriResolverLike, name: Optional[str]
14+
) -> IUriResolver:
15+
if isinstance(uri_resolver_like, list):
16+
resolvers: List[IUriResolver] = list(
17+
map(
18+
lambda r: build_resolver(r, name),
19+
uri_resolver_like,
20+
)
21+
)
22+
return UriResolverAggregator(resolvers)
1623
elif isinstance(uri_resolver_like, UriPackage):
17-
return PackageResolver(uri=uri_resolver_like.uri, wrap_package=uri_resolver_like.package) # type: ignore
24+
return PackageResolver(
25+
uri=uri_resolver_like.uri, wrap_package=uri_resolver_like.package
26+
)
1827
elif isinstance(uri_resolver_like, UriWrapper):
19-
return WrapperResolver(uri=uri_resolver_like.uri, wrapper=uri_resolver_like.wrapper) # type: ignore
28+
return WrapperResolver(
29+
uri=uri_resolver_like.uri, wrapper=uri_resolver_like.wrapper
30+
)
2031
else:
21-
raise "Unknown resolver-like type" # type: ignore
32+
raise ValueError("Unknown resolver-like value")
Lines changed: 27 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,51 +1,48 @@
1-
from functools import reduce
21
from typing import List, cast
3-
from aggregator import UriResolverAggregatorBase
4-
from polywrap_core import Uri, Client, IUriResolutionContext, IUriResolver, UriPackageOrWrapper
2+
from aggregator import IUriResolverAggregator
3+
from polywrap_core import (
4+
Uri,
5+
Client,
6+
IUriResolutionContext,
7+
IUriResolver,
8+
UriPackageOrWrapper,
9+
)
510
from polywrap_result import Result, Err, Ok
611
from polywrap_uri_resolvers import UriResolverWrapper
7-
class ExtendableUriResolver(UriResolverAggregatorBase):
12+
13+
14+
class ExtendableUriResolver(IUriResolverAggregator):
815
name: str
916

1017
def __init__(self, name: str):
1118
self.name = name
1219

13-
async def get_uri_resolvers(self, uri: Uri, client: Client, resolution_context: IUriResolutionContext) -> Result[List[IUriResolver]]:
20+
async def get_uri_resolvers(
21+
self, uri: Uri, client: Client, resolution_context: IUriResolutionContext
22+
) -> Result[List[IUriResolver]]:
1423
result = client.get_implementations(uri)
1524

1625
if result.is_err():
1726
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)
2527

26-
return Ok(reduce(get_wrapper_resolvers, result.value)) # type: ignore
28+
uri_resolver_impls: List[Uri] = result.unwrap() or []
29+
30+
resolvers: List[IUriResolver] = [
31+
UriResolverWrapper(impl)
32+
for impl in uri_resolver_impls
33+
if not resolution_context.is_resolving(impl)
34+
]
35+
36+
return Ok(resolvers)
2737

2838
async def try_resolve_uri(
29-
self,
30-
uri: Uri,
31-
client: Client,
32-
resolution_context: IUriResolutionContext
39+
self, uri: Uri, client: Client, resolution_context: IUriResolutionContext
3340
) -> Result[UriPackageOrWrapper]:
34-
result = await self.get_uri_resolvers(
35-
uri, client, resolution_context
36-
)
41+
result = await self.get_uri_resolvers(uri, client, resolution_context)
3742

3843
if result.is_err():
3944
return cast(Err, result)
4045

41-
resolvers: List[IUriResolver] = result.value # type: ignore
42-
43-
if len(resolvers) == 0:
44-
return Ok(uri)
46+
resolvers = result.unwrap()
4547

46-
return await self.try_resolve_uri_with_resolvers(
47-
uri,
48-
client,
49-
resolvers,
50-
resolution_context
51-
)
48+
return await self.try_resolve_uri_with_resolvers(uri, client, resolvers, resolution_context) if resolvers else Ok(uri)

packages/polywrap-uri-resolvers/polywrap_uri_resolvers/helpers/infinite_loop_error.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,4 @@
44
class InfiniteLoopError(Exception):
55
def __init__(self, uri: Uri, history: List[IUriResolutionStep]):
66
# TODO: Add history with get_resolution_stack
7-
self.message = f"An infinite loop was detected while resolving the URI: {uri.uri}"
7+
super().__init__(f"An infinite loop was detected while resolving the URI: {uri.uri}")

0 commit comments

Comments
 (0)