Skip to content

Commit 63ccafc

Browse files
authored
speed up render function (#8)
* fewer function calls * increment version
1 parent 8b10907 commit 63ccafc

2 files changed

Lines changed: 21 additions & 24 deletions

File tree

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[tool.poetry]
22
name = "simple-html"
3-
version = "1.0.0"
3+
version = "1.0.1"
44
readme = "README.md"
55
description = "Template-less html rendering in Python"
66
authors = ["Keith Philpott <fakekeith@example.org>"]

simple_html/__init__.py

Lines changed: 20 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from html import escape
22
from types import GeneratorType
3-
from typing import Tuple, Union, Dict, List, Generator, Optional
3+
from typing import Tuple, Union, Dict, List, Generator, Optional, Iterable
44

55

66
class SafeString:
@@ -167,34 +167,31 @@ def __call__(
167167
wbr = Tag("wbr")
168168

169169

170-
def _render(node: Node, strs: List[str]) -> None:
170+
def _render(nodes: Iterable[Node], strs: List[str]) -> None:
171171
"""
172172
mutate a list instead of constantly rendering strings
173173
"""
174-
if type(node) is tuple:
175-
strs.append(node[0])
176-
for child in node[1]:
177-
_render(child, strs)
178-
strs.append(node[2])
179-
elif isinstance(node, str):
180-
strs.append(escape(node))
181-
elif isinstance(node, SafeString):
182-
strs.append(node.safe_str)
183-
elif isinstance(node, Tag):
184-
strs.append(node.rendered)
185-
elif isinstance(node, list):
186-
for n in node:
187-
_render(n, strs)
188-
elif isinstance(node, GeneratorType):
189-
for n in node:
190-
_render(n, strs)
191-
else:
192-
raise TypeError(f"Got unknown type: {type(node)}")
174+
for node in nodes:
175+
if type(node) is tuple:
176+
strs.append(node[0])
177+
_render(node[1], strs)
178+
strs.append(node[2])
179+
elif isinstance(node, str):
180+
strs.append(escape(node))
181+
elif isinstance(node, SafeString):
182+
strs.append(node.safe_str)
183+
elif isinstance(node, Tag):
184+
strs.append(node.rendered)
185+
elif isinstance(node, list):
186+
_render(node, strs)
187+
elif isinstance(node, GeneratorType):
188+
_render(node, strs)
189+
else:
190+
raise TypeError(f"Got unknown type: {type(node)}")
193191

194192

195193
def render(*nodes: Node) -> str:
196194
results: List[str] = []
197-
for node in nodes:
198-
_render(node, results)
195+
_render(nodes, results)
199196

200197
return "".join(results)

0 commit comments

Comments
 (0)