Skip to content

Commit 2beef61

Browse files
refactor Params class constructor to from_node (#157)
1 parent 31a9672 commit 2beef61

File tree

3 files changed

+11
-9
lines changed

3 files changed

+11
-9
lines changed

src/django_bird/components.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ def get_asset(self, asset_filename: str) -> Asset | None:
4747
return None
4848

4949
def get_bound_component(self, node: BirdNode):
50-
params = Params.with_attrs(node.attrs)
50+
params = Params.from_node(node)
5151
return BoundComponent(component=self, params=params, nodelist=node.nodelist)
5252

5353
@property

src/django_bird/params.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,18 +14,14 @@
1414

1515
if TYPE_CHECKING:
1616
from django_bird.components import Component
17+
from django_bird.templatetags.tags.bird import BirdNode
1718

1819

1920
@dataclass
2021
class Params:
2122
attrs: list[Param] = field(default_factory=list)
2223
props: list[Param] = field(default_factory=list)
2324

24-
@classmethod
25-
def with_attrs(cls, attrs: list[Param] | None) -> Params:
26-
"""Create a Params instance with a copy of the provided attrs."""
27-
return cls(attrs=attrs.copy() if attrs is not None else [], props=[])
28-
2925
def render_props(self, component: Component, context: Context):
3026
if component.nodelist is None:
3127
return
@@ -56,6 +52,10 @@ def render_attrs(self, context: Context) -> SafeString:
5652
rendered = " ".join(attr.render_attr(context) for attr in self.attrs)
5753
return mark_safe(rendered)
5854

55+
@classmethod
56+
def from_node(cls, node: BirdNode) -> Params:
57+
return cls(attrs=node.attrs.copy(), props=[])
58+
5959

6060
@dataclass
6161
class Param:
@@ -64,9 +64,9 @@ class Param:
6464

6565
def render_attr(self, context: Context) -> str:
6666
value = self.value.resolve(context)
67-
name = self.name.replace("_", "-")
6867
if value is None:
6968
return ""
69+
name = self.name.replace("_", "-")
7070
if value is True:
7171
return name
7272
return f'{name}="{value}"'

tests/test_params.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
from django_bird.params import Param
77
from django_bird.params import Params
88
from django_bird.params import Value
9+
from django_bird.templatetags.tags.bird import BirdNode
910

1011
from .utils import TestComponent
1112

@@ -305,5 +306,6 @@ def test_render_attrs(self, params, context, expected):
305306
),
306307
],
307308
)
308-
def test_with_attrs(self, attrs, expected):
309-
assert Params.with_attrs(attrs) == expected
309+
def test_from_node(self, attrs, expected):
310+
node = BirdNode(name="test", attrs=attrs, nodelist=None)
311+
assert Params.from_node(node) == expected

0 commit comments

Comments
 (0)