From 689fe2613765de71101214a482c928cfdb1b2be6 Mon Sep 17 00:00:00 2001 From: Asko Nõmm Date: Thu, 2 Jan 2025 01:30:23 +0200 Subject: Clean up some naming usages and things --- htmtl/__init__.py | 4 ++-- htmtl/attribute_parser.py | 21 ----------------- htmtl/attribute_parsers/__init__.py | 2 -- htmtl/attribute_parsers/inner_text.py | 13 ----------- htmtl/attribute_parsers/outer_text.py | 12 ---------- htmtl/expression_modifier.py | 19 --------------- htmtl/expression_modifiers/__init__.py | 1 - htmtl/expression_modifiers/truncate.py | 16 ------------- htmtl/expression_parser.py | 6 ++--- htmtl/htmtl.py | 42 +++++++++++++++------------------- htmtl/modifier.py | 19 +++++++++++++++ htmtl/modifiers/__init__.py | 1 + htmtl/modifiers/truncate.py | 16 +++++++++++++ htmtl/parser.py | 20 ++++++++++++++++ htmtl/parsers/__init__.py | 2 ++ htmtl/parsers/inner_text.py | 13 +++++++++++ htmtl/parsers/outer_text.py | 12 ++++++++++ 17 files changed, 107 insertions(+), 112 deletions(-) delete mode 100644 htmtl/attribute_parser.py delete mode 100644 htmtl/attribute_parsers/__init__.py delete mode 100644 htmtl/attribute_parsers/inner_text.py delete mode 100644 htmtl/attribute_parsers/outer_text.py delete mode 100644 htmtl/expression_modifier.py delete mode 100644 htmtl/expression_modifiers/__init__.py delete mode 100644 htmtl/expression_modifiers/truncate.py create mode 100644 htmtl/modifier.py create mode 100644 htmtl/modifiers/__init__.py create mode 100644 htmtl/modifiers/truncate.py create mode 100644 htmtl/parser.py create mode 100644 htmtl/parsers/__init__.py create mode 100644 htmtl/parsers/inner_text.py create mode 100644 htmtl/parsers/outer_text.py (limited to 'htmtl') diff --git a/htmtl/__init__.py b/htmtl/__init__.py index 4286154..f5708d1 100644 --- a/htmtl/__init__.py +++ b/htmtl/__init__.py @@ -1,3 +1,3 @@ from .htmtl import Htmtl -from .attribute_parser import AttributeParser -from .expression_modifier import ExpressionModifier, modifier \ No newline at end of file +from .parser import Parser +from .modifier import Modifier, modifier_name \ No newline at end of file diff --git a/htmtl/attribute_parser.py b/htmtl/attribute_parser.py deleted file mode 100644 index 7511c8e..0000000 --- a/htmtl/attribute_parser.py +++ /dev/null @@ -1,21 +0,0 @@ -from abc import ABC, abstractmethod -from typing import Any, Optional -from dompa.nodes import Node - -from htmtl.expression_parser import ExpressionParser - - -class AttributeParser(ABC): - __data: dict[str, Any] - __expression_parser: ExpressionParser - - def __init__(self, data: dict[str, Any], expression_parser: ExpressionParser) -> None: - self.__data = data - self.__expression_parser = expression_parser - - def expression(self, expression: str) -> Any: - return self.__expression_parser.parse(expression) - - @abstractmethod - def traverse(self, node: Node) -> Optional[Node]: - pass \ No newline at end of file diff --git a/htmtl/attribute_parsers/__init__.py b/htmtl/attribute_parsers/__init__.py deleted file mode 100644 index 4ad8185..0000000 --- a/htmtl/attribute_parsers/__init__.py +++ /dev/null @@ -1,2 +0,0 @@ -from .inner_text import InnerText -from .outer_text import OuterText \ No newline at end of file diff --git a/htmtl/attribute_parsers/inner_text.py b/htmtl/attribute_parsers/inner_text.py deleted file mode 100644 index 75ad01e..0000000 --- a/htmtl/attribute_parsers/inner_text.py +++ /dev/null @@ -1,13 +0,0 @@ -from typing import Optional - -from dompa.nodes import Node, TextNode -from ..attribute_parser import AttributeParser - - -class InnerText(AttributeParser): - def traverse(self, node: Node) -> Optional[Node]: - if "inner-text" in node.attributes: - node.children = [TextNode(value=self.expression(node.attributes["inner-text"]))] - node.attributes.pop("inner-text") - - return node \ No newline at end of file diff --git a/htmtl/attribute_parsers/outer_text.py b/htmtl/attribute_parsers/outer_text.py deleted file mode 100644 index 8e9bead..0000000 --- a/htmtl/attribute_parsers/outer_text.py +++ /dev/null @@ -1,12 +0,0 @@ -from typing import Optional - -from dompa.nodes import Node, TextNode -from ..attribute_parser import AttributeParser - - -class OuterText(AttributeParser): - def traverse(self, node: Node) -> Optional[Node]: - if "outer-text" in node.attributes: - return TextNode(value=self.expression(node.attributes["outer-text"])) - - return node diff --git a/htmtl/expression_modifier.py b/htmtl/expression_modifier.py deleted file mode 100644 index 69d6a86..0000000 --- a/htmtl/expression_modifier.py +++ /dev/null @@ -1,19 +0,0 @@ -from abc import abstractmethod, ABC -from typing import Any - - -class ExpressionModifier(ABC): - name: str - - @abstractmethod - def modify(self, value: Any, opts: list[Any]) -> Any: - pass - - -def modifier(name: str): - def wrapper(cls: type[ExpressionModifier]): - cls.name = name - - return cls - - return wrapper \ No newline at end of file diff --git a/htmtl/expression_modifiers/__init__.py b/htmtl/expression_modifiers/__init__.py deleted file mode 100644 index f200bbd..0000000 --- a/htmtl/expression_modifiers/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from .truncate import Truncate \ No newline at end of file diff --git a/htmtl/expression_modifiers/truncate.py b/htmtl/expression_modifiers/truncate.py deleted file mode 100644 index 41a1bdb..0000000 --- a/htmtl/expression_modifiers/truncate.py +++ /dev/null @@ -1,16 +0,0 @@ -from typing import Any - -from ..expression_modifier import ExpressionModifier, modifier - - -@modifier("truncate") -class Truncate(ExpressionModifier): - def modify(self, value: Any, opts: list[Any]) -> Any: - if isinstance(value, str) and len(opts) > 0: - if all([x in "1234567890" for x in opts[0]]): - char_limit = int(opts[0]) - - if len(value) > char_limit: - return f"{value[:char_limit - 3]}..." - - return value diff --git a/htmtl/expression_parser.py b/htmtl/expression_parser.py index 6d955d9..a99791b 100644 --- a/htmtl/expression_parser.py +++ b/htmtl/expression_parser.py @@ -1,12 +1,12 @@ from typing import Any -from .expression_modifier import ExpressionModifier +from .modifier import Modifier class ExpressionParser: __data: dict[str, Any] - __expression_modifiers: list[type[ExpressionModifier]] + __expression_modifiers: list[type[Modifier]] - def __init__(self, data: dict[str, Any], expression_modifiers: list[type[ExpressionModifier]]) -> None: + def __init__(self, data: dict[str, Any], expression_modifiers: list[type[Modifier]]) -> None: self.__data = data self.__expression_modifiers = expression_modifiers diff --git a/htmtl/htmtl.py b/htmtl/htmtl.py index a865eaf..8c9a7a7 100644 --- a/htmtl/htmtl.py +++ b/htmtl/htmtl.py @@ -1,51 +1,47 @@ from typing import Any from dompa import Dompa -from .attribute_parser import AttributeParser -from .attribute_parsers.inner_text import InnerText -from .attribute_parsers.outer_text import OuterText -from .expression_modifier import ExpressionModifier -from .expression_modifiers.truncate import Truncate +from .parser import Parser +from .parsers.inner_text import InnerText +from .parsers.outer_text import OuterText +from .modifier import Modifier +from .modifiers.truncate import Truncate from .expression_parser import ExpressionParser class Htmtl: __dom: Dompa __data: dict[str, Any] - __attribute_parsers: list[type[AttributeParser]] - __expression_modifiers: list[type[ExpressionModifier]] + __parsers: list[type[Parser]] + __modifiers: list[type[Modifier]] def __init__(self, template: str, data: dict[str, Any] = None): self.__dom = Dompa(template) self.__data = data or {} - self.__attribute_parsers = self.__default_attribute_parsers() - self.__expression_modifiers = self.__default_expression_modifiers() - @staticmethod - def __default_attribute_parsers() -> list[type[AttributeParser]]: - return [ + # set default attribute parsers + self.__attribute_parsers = [ InnerText, OuterText, ] - @staticmethod - def __default_expression_modifiers() -> list[type[ExpressionModifier]]: - return [ + # set default expression modifiers + self.__expression_modifiers = [ Truncate, ] - def set_attribute_parsers(self, parsers: list[type[AttributeParser]]): + def set_parsers(self, parsers: list[type[Parser]]): for parser in parsers: - if not isinstance(parser, AttributeParser): - raise TypeError("Attribute parser must extend the AttributeParser class.") + if not isinstance(parser, Parser): + raise TypeError("Parser must extend the Parser class.") - self.__attribute_parsers = parsers + self.__parsers = parsers - def set_expression_modifiers(self, modifiers: list[type[ExpressionModifier]]): + def set_modifiers(self, modifiers: list[type[Modifier]]): for modifier in modifiers: - if not isinstance(modifier, ExpressionModifier): - raise NotImplementedError("Modifier must extend the ExpressionModifier class.") + if not isinstance(modifier, Modifier): + raise NotImplementedError("Modifier must extend the Modifier class.") - self.__expression_modifiers = modifiers + self.__modifiers = modifiers def __parse(self) -> None: expression_parser = ExpressionParser(self.__data, self.__expression_modifiers) diff --git a/htmtl/modifier.py b/htmtl/modifier.py new file mode 100644 index 0000000..a771cca --- /dev/null +++ b/htmtl/modifier.py @@ -0,0 +1,19 @@ +from abc import abstractmethod, ABC +from typing import Any + + +class Modifier(ABC): + name: str + + @abstractmethod + def modify(self, value: Any, opts: list[Any]) -> Any: + pass + + +def modifier_name(name: str): + def wrapper(cls: type[Modifier]): + cls.name = name + + return cls + + return wrapper \ No newline at end of file diff --git a/htmtl/modifiers/__init__.py b/htmtl/modifiers/__init__.py new file mode 100644 index 0000000..f200bbd --- /dev/null +++ b/htmtl/modifiers/__init__.py @@ -0,0 +1 @@ +from .truncate import Truncate \ No newline at end of file diff --git a/htmtl/modifiers/truncate.py b/htmtl/modifiers/truncate.py new file mode 100644 index 0000000..bac2862 --- /dev/null +++ b/htmtl/modifiers/truncate.py @@ -0,0 +1,16 @@ +from typing import Any + +from ..modifier import Modifier, modifier_name + + +@modifier_name("truncate") +class Truncate(Modifier): + def modify(self, value: Any, opts: list[Any]) -> Any: + if isinstance(value, str) and len(opts) > 0: + if all([x in "1234567890" for x in opts[0]]): + char_limit = int(opts[0]) + + if len(value) > char_limit: + return f"{value[:char_limit - 3]}..." + + return value diff --git a/htmtl/parser.py b/htmtl/parser.py new file mode 100644 index 0000000..a91de0a --- /dev/null +++ b/htmtl/parser.py @@ -0,0 +1,20 @@ +from abc import ABC, abstractmethod +from typing import Any, Optional +from dompa.nodes import Node +from .expression_parser import ExpressionParser + + +class Parser(ABC): + __data: dict[str, Any] + __expression_parser: ExpressionParser + + def __init__(self, data: dict[str, Any], expression_parser: ExpressionParser) -> None: + self.__data = data + self.__expression_parser = expression_parser + + def expression(self, expression: str) -> Any: + return self.__expression_parser.parse(expression) + + @abstractmethod + def traverse(self, node: Node) -> Optional[Node]: + pass \ No newline at end of file diff --git a/htmtl/parsers/__init__.py b/htmtl/parsers/__init__.py new file mode 100644 index 0000000..4ad8185 --- /dev/null +++ b/htmtl/parsers/__init__.py @@ -0,0 +1,2 @@ +from .inner_text import InnerText +from .outer_text import OuterText \ No newline at end of file diff --git a/htmtl/parsers/inner_text.py b/htmtl/parsers/inner_text.py new file mode 100644 index 0000000..52fc0b4 --- /dev/null +++ b/htmtl/parsers/inner_text.py @@ -0,0 +1,13 @@ +from typing import Optional + +from dompa.nodes import Node, TextNode +from ..parser import Parser + + +class InnerText(Parser): + def traverse(self, node: Node) -> Optional[Node]: + if "inner-text" in node.attributes: + node.children = [TextNode(value=self.expression(node.attributes["inner-text"]))] + node.attributes.pop("inner-text") + + return node \ No newline at end of file diff --git a/htmtl/parsers/outer_text.py b/htmtl/parsers/outer_text.py new file mode 100644 index 0000000..78b0fce --- /dev/null +++ b/htmtl/parsers/outer_text.py @@ -0,0 +1,12 @@ +from typing import Optional + +from dompa.nodes import Node, TextNode +from ..parser import Parser + + +class OuterText(Parser): + def traverse(self, node: Node) -> Optional[Node]: + if "outer-text" in node.attributes: + return TextNode(value=self.expression(node.attributes["outer-text"])) + + return node -- cgit v1.2.3