You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
30 lines
771 B
30 lines
771 B
from __future__ import annotations |
|
|
|
from typing import TYPE_CHECKING, Iterator, List, Optional |
|
|
|
from typing_extensions import Self |
|
|
|
from . import globals # pylint: disable=redefined-builtin |
|
|
|
if TYPE_CHECKING: |
|
from .element import Element |
|
|
|
|
|
class Slot: |
|
|
|
def __init__(self, parent: Element, name: str, template: Optional[str] = None) -> None: |
|
self.name = name |
|
self.parent = parent |
|
self.template = template |
|
self.children: List[Element] = [] |
|
|
|
def __enter__(self) -> Self: |
|
globals.get_slot_stack().append(self) |
|
return self |
|
|
|
def __exit__(self, *_) -> None: |
|
globals.get_slot_stack().pop() |
|
globals.prune_slot_stack() |
|
|
|
def __iter__(self) -> Iterator[Element]: |
|
return iter(self.children)
|
|
|