maid time
This commit is contained in:
parent
13f546fcf5
commit
b60b16b2f9
9 changed files with 38 additions and 24 deletions
3
.gitignore
vendored
3
.gitignore
vendored
|
@ -1,4 +1,5 @@
|
|||
__pycache__/
|
||||
.venv
|
||||
.vscode/
|
||||
.venv/
|
||||
puppygirl.egg-info
|
||||
*.html
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
from puppygirl.clonable import *
|
||||
from puppygirl.pg import *
|
||||
from puppygirl.elements import *
|
||||
from .clonable import *
|
||||
from .pg import *
|
||||
from .elements import *
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
from argparse import ArgumentParser
|
||||
from puppygirl import Puppygirl
|
||||
from elements.domme import PuppygirlDomme
|
||||
from puppygirl.elements.domme import PuppygirlDomme
|
||||
from puppygirl.renderer import ClientSideRenderer, ServerSideRenderer
|
||||
|
||||
parser = ArgumentParser("puppygirl", add_help=True)
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
from copy import copy
|
||||
from typing import TYPE_CHECKING, Protocol, Self
|
||||
from typing import Protocol, Self
|
||||
|
||||
class Clonable[T = Self](Protocol):
|
||||
def clone(self) -> T:
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
from puppygirl.elements.constants import *
|
||||
from puppygirl.elements.domme import *
|
||||
from puppygirl.elements.shadow_root import *
|
||||
from .constants import *
|
||||
from .domme import *
|
||||
from .shadow_root import *
|
||||
|
|
|
@ -1,14 +1,14 @@
|
|||
from dataclasses import dataclass
|
||||
from typing import TYPE_CHECKING
|
||||
|
||||
from puppygirl.elements import TemplateAttr
|
||||
from puppygirl.elements.shadow_root import ShadowRootMode
|
||||
from puppygirl.renderer import Renderable
|
||||
from .constants import TemplateAttr
|
||||
from .shadow_root import ShadowRootMode
|
||||
from ..renderer import Renderable
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from puppygirl import Puppygirl
|
||||
from puppygirl.elements import Node
|
||||
from puppygirl.puppytype import RenderableElement, Templates
|
||||
from .. import Puppygirl
|
||||
from .shadow_root import Node
|
||||
from ..puppytype import RenderableElement, Templates
|
||||
|
||||
@dataclass
|
||||
class PuppygirlDomme(Renderable):
|
||||
|
|
|
@ -1,10 +1,13 @@
|
|||
from copy import copy
|
||||
from dataclasses import dataclass
|
||||
from enum import StrEnum
|
||||
from typing import Optional, Self
|
||||
from typing import TYPE_CHECKING, Optional, Self
|
||||
|
||||
from bs4 import Tag
|
||||
from puppygirl.clonable import Clonable
|
||||
from ..clonable import Clonable
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from ..puppytype import ElementLike
|
||||
|
||||
TemplateName = "template"
|
||||
|
||||
|
@ -29,6 +32,11 @@ class Node(Clonable):
|
|||
serializable=serializable
|
||||
)
|
||||
|
||||
def from_element(element: "ElementLike") -> Self:
|
||||
if isinstance(element, Node):
|
||||
return element
|
||||
return Node(element)
|
||||
|
||||
def clone(self) -> "Self":
|
||||
return Node(copy(self.value))
|
||||
|
||||
|
@ -80,6 +88,11 @@ class Template(Clonable):
|
|||
def serializable(self, value: bool):
|
||||
self._value["serializable"] = value
|
||||
|
||||
def from_element(element: "ElementLike") -> Self:
|
||||
if isinstance(element, Template):
|
||||
return element
|
||||
return Template(element)
|
||||
|
||||
def clone(self) -> Self:
|
||||
return Template(copy(self._value))
|
||||
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
from typing import Callable, Iterable, Self
|
||||
from bs4 import BeautifulSoup, Tag
|
||||
|
||||
from elements import IdAttr, Template
|
||||
from puppygirl.renderer import Renderable, Renderer
|
||||
from puppygirl.puppytype import ElementLike, ElementLikeList, Parsable, Templates
|
||||
from .elements import IdAttr, Template
|
||||
from .renderer import Renderable, Renderer
|
||||
from .puppytype import ElementLike, ElementLikeList, Parsable, Templates
|
||||
|
||||
class Puppygirl[R: Renderer]:
|
||||
renderer: R
|
||||
|
@ -21,11 +21,11 @@ class Puppygirl[R: Renderer]:
|
|||
return value
|
||||
|
||||
def _create_template_dict(templates: Iterable[ElementLike]) -> Templates:
|
||||
templates = [Template(t) for t in templates]
|
||||
templates = [Template.from_element(t) for t in templates]
|
||||
return {t[IdAttr]: t for t in templates}
|
||||
|
||||
def add_template(self, template: ElementLike):
|
||||
template = Template(template)
|
||||
template = Template.from_element(template)
|
||||
self._templates[template[IdAttr]] = template
|
||||
|
||||
def fetch(self, path: str) -> BeautifulSoup:
|
||||
|
|
|
@ -3,10 +3,10 @@ from typing import BinaryIO, Iterable, TextIO, TypeAlias, TYPE_CHECKING
|
|||
if TYPE_CHECKING:
|
||||
from string import Template
|
||||
from bs4 import BeautifulSoup, Tag
|
||||
from puppygirl.elements import Node
|
||||
from .elements import Node
|
||||
|
||||
Parsable: TypeAlias = "BeautifulSoup | Tag | str | bytes | TextIO | BinaryIO"
|
||||
ElementLike: TypeAlias = "BeautifulSoup | Tag | str | Node"
|
||||
ElementLike: TypeAlias = "BeautifulSoup | Tag | str | Node | Template"
|
||||
ElementLikeList: TypeAlias = "Iterable[ElementLike]"
|
||||
RenderableElement: TypeAlias = "Node | Iterable[Node]"
|
||||
Templates: TypeAlias = "dict[str, Template]"
|
||||
|
|
Loading…
Add table
Reference in a new issue