From 9e0af0b5099881c70d4befd3bad1bf852b4500fb Mon Sep 17 00:00:00 2001 From: Seth Trowbridge Date: Fri, 15 Aug 2025 13:09:46 -0400 Subject: [PATCH] misc --- proxy.py | 41 ++++++++++++++++++++++++++--------------- 1 file changed, 26 insertions(+), 15 deletions(-) diff --git a/proxy.py b/proxy.py index 0e30486..43a439b 100644 --- a/proxy.py +++ b/proxy.py @@ -1,6 +1,10 @@ from typing import List, Protocol, Tuple, Union -def MakeAttrs(css:str|Tuple[str, ...]|None, id:str|None, attributes: dict[str, str | None]) -> str: +render_depth:int = 0 + +def MakeAttrs(css:str|Tuple[str, ...]|None, id:str|None, attributes: dict[str, str | None]|None) -> str: + if not attributes: + attributes = {} if css: attributes['class'] = " ".join(css) if isinstance(css, (list, tuple)) else css if id: @@ -16,10 +20,15 @@ class ComplexProxyLeaf(dict): attrs:str = "" def __init__(self, name:str): self.name = name - def __call__(self, css:str|None = None, id:str|None = None): - clone = ComplexProxyLeaf(self.name) - clone.attrs = MakeAttrs(css, id, {}) + + def props(self, css:str|Tuple[str, ...]|None, id:str|None, attributes: dict[str, str | None]|None): + clone = clone = self.__class__(self.name) + clone.attrs = MakeAttrs(css, id, attributes) return clone + + def __call__(self, css:str|None = None, id:str|None = None): + return self.props(css, id, {}) + def __repr__(self) -> str: return f'<{self.name} {self.attrs}/>' @@ -28,34 +37,36 @@ class ComplexProxyBranch(ComplexProxyLeaf): attrs:str = "" def __init__(self, name:str): self.name = name + def __call__(self, css:str|None = None, id:str|None = None): - clone = ComplexProxyBranch(self.name) - clone.attrs = MakeAttrs(css, id, {}) - return clone + return self.props(css, id, None) def __repr__(self) -> str: - print("dump", self.attrs) - copy = self.attrs - self.attrs = "" - return f'<{self.name} {copy}>' + return f'<{self.name} {self.attrs}>' def __getitem__(self, key:Union[str, 'ComplexProxyBranch', ComplexProxyLeaf, Tuple[Union[str, 'ComplexProxyBranch', ComplexProxyLeaf], ...]]) -> str: + + global render_depth + render_depth = render_depth + 1 if isinstance(key, tuple): - children = "".join(str(k) for k in key) + children = f'\n'.join(str(k) for k in key) else: children = key - print("child", self.attrs) - return f'<{self.name} {self.attrs}>{children}' - + render_depth = render_depth - 1 + + return f'<{self.name} {self.attrs}>\n{children}\n' IMG = ComplexProxyLeaf("img") BR = ComplexProxyLeaf("br") A = ComplexProxyBranch("a") + print( A [ "click here", BR, + IMG(id="header.png"), A(css="test"), + A["other?"], A(css="www.site.com") [ IMG(id="image.png")