Skip to content

Commit 8b1eef4

Browse files
committed
refactor: replace deprecated resolve_value with Component.resolve
1 parent e2f4a0d commit 8b1eef4

8 files changed

Lines changed: 48 additions & 39 deletions

File tree

example/custom_components/aiogram_i18n.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from typing import Any, Optional, Mapping
22

3-
from textcompose.core import resolve_value, Condition, Value
3+
from textcompose.core import Condition, Value
44
from textcompose.elements.base import Element
55

66

@@ -21,7 +21,7 @@ def __init__(
2121
def _resolve_mapping(self, context: Mapping[str, Any]) -> Mapping[str, Any]:
2222
resolved = {}
2323
for key, val in self.mapping.items():
24-
result = resolve_value(val, context)
24+
result = self.resolve(val, context)
2525
resolved[key] = result if result is not None else ""
2626
return resolved
2727

@@ -31,9 +31,9 @@ def render(self, context, **kwargs) -> Optional[str]:
3131

3232
i18n = kwargs.get("i18n")
3333
if i18n is None:
34-
raise ValueError("Missing 'i18n' in render kwargs")
34+
raise ValueError(f"Missing 'i18n' in render kwargs (key={self.text})")
3535

3636
params = self._resolve_mapping(context)
37-
locale = resolve_value(self.locale, context) if self.locale else None
37+
locale = self.resolve(self.locale, context) if self.locale else None
3838

3939
return i18n.get(self.text, locale, **params)

textcompose/containers/group.py

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

33
from textcompose.containers.base import Container
4-
from textcompose.core import Value, Condition, resolve_value
4+
from textcompose.core import Value, Condition
55

66

77
class Group(Container):
@@ -15,6 +15,6 @@ def render(self, context, **kwargs) -> str | None:
1515

1616
parts = []
1717
for comp in self.items:
18-
if (part := resolve_value(comp, context, **kwargs)) is not None:
18+
if (part := self.resolve(comp, context, **kwargs)) is not None:
1919
parts.append(part)
2020
return self.sep.join(parts) if parts else None

textcompose/containers/list.py

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,17 +21,15 @@ def __init__(
2121
self.sep = sep
2222
self.inner_sep = inner_sep
2323

24-
def _render_item(self, item_value: Any, context: Mapping[str, Any], **kwargs) -> str | None:
25-
rendered_parts = [
26-
resolve_value(item_tpl, {"item": item_value, "context": context}, **kwargs) for item_tpl in self.items
27-
]
24+
def _render_item(self, context: Mapping[str, Any], **kwargs) -> str | None:
25+
rendered_parts = [self.resolve(item_tpl, context, **kwargs) for i, item_tpl in enumerate(self.items)]
2826
return self.inner_sep.join(filter(None, rendered_parts)) or None
2927

3028
def render(self, context, **kwargs) -> str | None:
3129
if not self._check_when(context, **kwargs):
3230
return None
3331

34-
items_iterable = resolve_value(self.getter, context, **kwargs)
32+
items_iterable = self.resolve(self.getter, context, **kwargs)
3533
if not items_iterable:
3634
return None
3735

textcompose/core/component.py

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,26 @@
11
from abc import ABC, abstractmethod
2-
from typing import Any, Mapping
2+
from typing import Any, Mapping, Callable
3+
4+
from magic_filter import MagicFilter
35

46
# Direct import to prevent circular import issues
5-
from textcompose.core.resolvers import resolve_value
67
from textcompose.core.types import Condition
78

89

910
class Component(ABC):
1011
def __init__(self, when: Condition | None = None) -> None:
1112
self.when = when
1213

14+
@staticmethod
15+
def resolve(value, context: Mapping[str, Any], **kwargs) -> str | None:
16+
if isinstance(value, MagicFilter):
17+
return value.resolve(context)
18+
elif hasattr(value, "render") and callable(getattr(value, "render")):
19+
return value.render(context, **kwargs)
20+
elif isinstance(value, Callable):
21+
return value(context)
22+
return value
23+
1324
def _check_when(self, context: Mapping[str, Any], **kwargs) -> bool:
1425
if self.when is None:
1526
return True
@@ -18,7 +29,7 @@ def _check_when(self, context: Mapping[str, Any], **kwargs) -> bool:
1829
if isinstance(self.when, str):
1930
return bool(context.get(self.when))
2031

21-
return bool(resolve_value(value=self.when, context=context, **kwargs))
32+
return bool(self.resolve(value=self.when, context=context, **kwargs))
2233

2334
@abstractmethod
2435
def render(self, context: Mapping[str, Any], **kwargs) -> str | None: ...

textcompose/core/resolvers.py

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
1-
from typing import Callable, Mapping, Any
2-
3-
from magic_filter import MagicFilter
1+
import warnings
2+
from typing import Mapping, Any
3+
from textcompose.core import Component
44

55

66
def resolve_value(value, context: Mapping[str, Any], **kwargs) -> str | None:
7-
if isinstance(value, MagicFilter):
8-
return value.resolve(context)
9-
elif hasattr(value, "render") and callable(getattr(value, "render")):
10-
return value.render(context, **kwargs)
11-
elif isinstance(value, Callable):
12-
return value(context)
13-
return value
7+
warnings.warn(
8+
"resolve_value is deprecated and will be removed in future versions. Use Component.resolve instead.",
9+
DeprecationWarning,
10+
stacklevel=2,
11+
)
12+
13+
return Component.resolve(value, context, **kwargs)

textcompose/elements/progress_bar.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from textcompose.core import Condition, Value, resolve_value
1+
from textcompose.core import Condition, Value
22
from textcompose.elements.base import Element
33
from textcompose.styles.progress_bar import PROGRESS_BAR_STYLES, ProgressBarStyle
44

@@ -27,24 +27,24 @@ def render(self, context, **kwargs) -> str | None:
2727
style_obj = PROGRESS_BAR_STYLES.get(self.style, None)
2828
else:
2929
style_obj = ProgressBarStyle(
30-
left=resolve_value(self.style.left, context),
31-
fill=resolve_value(self.style.fill, context),
32-
empty=resolve_value(self.style.empty, context),
33-
right=resolve_value(self.style.right, context),
30+
left=self.resolve(self.style.left, context),
31+
fill=self.resolve(self.style.fill, context),
32+
empty=self.resolve(self.style.empty, context),
33+
right=self.resolve(self.style.right, context),
3434
)
3535
if self.style.template is not None:
36-
style_obj.template = resolve_value(self.style.template, context)
36+
style_obj.template = self.resolve(self.style.template, context)
3737

3838
if style_obj is None:
3939
raise ValueError(f"Unknown style: {self.style}. Available styles: {', '.join(PROGRESS_BAR_STYLES.keys())}")
4040

41-
length = int(resolve_value(self.width, context))
41+
length = int(self.resolve(self.width, context))
4242
if length <= 0:
4343
raise ValueError("Progress bar length must be a positive integer.")
44-
current = float(resolve_value(self.current, context))
44+
current = float(self.resolve(self.current, context))
4545
if current < 0:
4646
raise ValueError("Current value must be non-negative.")
47-
total = float(resolve_value(self.total, context))
47+
total = float(self.resolve(self.total, context))
4848
if total <= 0:
4949
raise ValueError("Total value must be greater than zero.")
5050

textcompose/logics/if_then_else.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from typing import Optional
22

3-
from textcompose.core import Condition, Value, resolve_value
3+
from textcompose.core import Condition, Value
44
from textcompose.logics.base import Logic
55

66

@@ -21,6 +21,6 @@ def render(self, context, **kwargs) -> Optional[str]:
2121
if not self._check_when(context, **kwargs):
2222
return None
2323

24-
if bool(resolve_value(value=self.if_, context=context, **kwargs)):
25-
return resolve_value(self.then_, context, **kwargs)
26-
return resolve_value(self.else_, context, **kwargs)
24+
if bool(self.resolve(value=self.if_, context=context, **kwargs)):
25+
return self.resolve(self.then_, context, **kwargs)
26+
return self.resolve(self.else_, context, **kwargs)

textcompose/template.py

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

33
from textcompose.containers.base import Container
4-
from textcompose.core import Component, Condition, resolve_value
4+
from textcompose.core import Component, Condition
55

66

77
class Template(Container):
@@ -16,7 +16,7 @@ def render(self, context, **kwargs) -> str:
1616

1717
parts = []
1818
for comp in self.items:
19-
if (part := resolve_value(comp, context, **kwargs)) is not None:
19+
if (part := self.resolve(comp, context, **kwargs)) is not None:
2020
parts.append(part)
2121

2222
return self.sep.join(parts).strip()

0 commit comments

Comments
 (0)