Skip to content

Commit 3568f43

Browse files
committed
Improved table interface
1 parent eb3e0ee commit 3568f43

File tree

3 files changed

+11
-10
lines changed

3 files changed

+11
-10
lines changed

src/bootlace/table/base.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ def __init__(self, decorated_classes: Iterable[str] | None = None) -> None:
113113
else:
114114
self.decorated_classes = set(decorated_classes)
115115

116-
def render(self, items: list[Any]) -> tags.html_tag:
116+
def __call__(self, items: list[Any]) -> tags.html_tag:
117117
table = tags.table(cls="table")
118118
table.classes.add(*self.decorated_classes)
119119
thead = tags.thead()
@@ -127,8 +127,8 @@ def render(self, items: list[Any]) -> tags.html_tag:
127127
id = getattr(item, "id", None)
128128
tr = tags.tr(id=f"item-{id}" if id else None)
129129
for column in self.columns.values():
130-
td = column.cell(item)
131-
tr.add(td)
130+
cell = column.cell(item)
131+
tr.add(tags.td(cell))
132132
tbody.add(tr)
133133
table.add(tbody)
134134
return table

src/bootlace/table/columns.py

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

33
import attrs
44
from dominate import tags
5+
from dominate.util import text
56
from flask import url_for
67

78
from bootlace.icon import Icon
@@ -13,7 +14,7 @@
1314
class Column(ColumnBase):
1415

1516
def cell(self, value: Any) -> tags.html_tag:
16-
return tags.td(getattr(value, self.attribute))
17+
return text(str(getattr(value, self.attribute)))
1718

1819

1920
@attrs.define
@@ -22,7 +23,7 @@ class EditColumn(ColumnBase):
2223

2324
def cell(self, value: Any) -> tags.html_tag:
2425
id = getattr(value, "id", None)
25-
return tags.td(tags.a(getattr(value, self.attribute), href=url_for(self.endpoint, id=id)))
26+
return tags.a(getattr(value, self.attribute), href=url_for(self.endpoint, id=id))
2627

2728

2829
@attrs.define
@@ -33,12 +34,12 @@ class CheckColumn(ColumnBase):
3334

3435
def cell(self, value: Any) -> tags.html_tag:
3536
if getattr(value, self.attribute):
36-
return tags.td(as_tag(self.yes))
37-
return tags.td(as_tag(self.no))
37+
return as_tag(self.yes)
38+
return as_tag(self.no)
3839

3940

4041
@attrs.define
4142
class Datetime(ColumnBase):
4243

4344
def cell(self, value: Any) -> tags.html_tag:
44-
return tags.td(getattr(value, self.attribute).isoformat())
45+
return text(getattr(value, self.attribute).isoformat())

tests/table/test_table.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ def test_basic_table(items: list[Item], table: type[Table]) -> None:
3131
assert len(table.columns) == 2
3232

3333
table = table()
34-
rendered = table.render(items).render()
34+
rendered = table(items).render()
3535

3636
print(rendered)
3737

@@ -60,7 +60,7 @@ def test_basic_table(items: list[Item], table: type[Table]) -> None:
6060
def test_table_with_decorated_classes(items: list[Item], table: type[Table]) -> None:
6161

6262
table = table(decorated_classes=["table-striped", "table-bordered"])
63-
rendered = table.render(items).render()
63+
rendered = table(items).render()
6464

6565
print(rendered)
6666

0 commit comments

Comments
 (0)