From b68b44307143138f6de77579bda36f15b9f4471e Mon Sep 17 00:00:00 2001 From: Seth Trowbridge Date: Fri, 15 Aug 2025 14:37:35 -0400 Subject: [PATCH] class extensions started --- proxy.py | 54 +++++++++++++++++++++++++++++------------------------- 1 file changed, 29 insertions(+), 25 deletions(-) diff --git a/proxy.py b/proxy.py index 43a439b..b173a5b 100644 --- a/proxy.py +++ b/proxy.py @@ -1,6 +1,4 @@ -from typing import List, Protocol, Tuple, Union - -render_depth:int = 0 +from typing import List, Tuple, Union def MakeAttrs(css:str|Tuple[str, ...]|None, id:str|None, attributes: dict[str, str | None]|None) -> str: if not attributes: @@ -13,16 +11,17 @@ def MakeAttrs(css:str|Tuple[str, ...]|None, id:str|None, attributes: dict[str, s for key, value in attributes.items(): if value: attrList.append(f'{key}="{value}"') - return " ".join(attrList) + return " " + " ".join(attrList) -class ComplexProxyLeaf(dict): +class ComplexProxyLeaf(): name:str = "" - attrs:str = "" - def __init__(self, name:str): - self.name = name + def __init__(self, name:str|None = None): + if name: + self.name = name + self.attrs = None def props(self, css:str|Tuple[str, ...]|None, id:str|None, attributes: dict[str, str | None]|None): - clone = clone = self.__class__(self.name) + clone = self.__class__(self.name) clone.attrs = MakeAttrs(css, id, attributes) return clone @@ -30,37 +29,42 @@ class ComplexProxyLeaf(dict): return self.props(css, id, {}) def __repr__(self) -> str: - return f'<{self.name} {self.attrs}/>' + return f'<{self.name}{self.attrs or ""}/>' class ComplexProxyBranch(ComplexProxyLeaf): name:str = "" - attrs:str = "" - def __init__(self, name:str): - self.name = name - - def __call__(self, css:str|None = None, id:str|None = None): - return self.props(css, id, None) + def __init__(self, name:str|None = None): + if name: + self.name = name + self.attrs = None def __repr__(self) -> str: - return f'<{self.name} {self.attrs}>' + return f'<{self.name}{self.attrs or ""}>' 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 = f'\n'.join(str(k) for k in key) else: - children = key + children = str(key) - render_depth = render_depth - 1 + return f'<{self.name}{self.attrs or ""}>\n{children}\n' - return f'<{self.name} {self.attrs}>\n{children}\n' +class IMGTag(ComplexProxyLeaf): + name = "img" + def __call__(self, css:str|None = None, id:str|None = None, src:str|None = None): + return self.props(css, id, {"src":src}) + +class ATag(ComplexProxyBranch): + name = "a" + def __call__(self, css:str|None = None, id:str|None = None, href:str|None = None, target:str|None = None): + return self.props(css, id, {"href":href, "target":target}) -IMG = ComplexProxyLeaf("img") +IMG = IMGTag() +A = ATag() BR = ComplexProxyLeaf("br") -A = ComplexProxyBranch("a") +DIV = ComplexProxyBranch("div") print( - A + DIV [ "click here", BR,