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