48 lines
1.2 KiB
Python
48 lines
1.2 KiB
Python
from collections import UserDict
|
|
from typing import TYPE_CHECKING, Any, Dict, Iterator
|
|
|
|
if TYPE_CHECKING:
|
|
from .section import Section
|
|
|
|
from .. import color
|
|
|
|
PCN_GLOBALS: Dict[str, Any] = {
|
|
"color": color.Color,
|
|
"hsluv": color.hsluv,
|
|
"hsluva": color.hsluva,
|
|
"hsl": color.hsl,
|
|
"hsla": color.hsla,
|
|
"rgb": color.rgb,
|
|
"rgba": color.rgba,
|
|
}
|
|
|
|
|
|
class GlobalsDict(UserDict):
|
|
def __init__(self, section: "Section") -> None:
|
|
super().__init__()
|
|
self.section = section
|
|
|
|
@property
|
|
def full_dict(self) -> Dict[str, Any]:
|
|
return {
|
|
**PCN_GLOBALS,
|
|
**(self.section.root if self.section.root else {}),
|
|
**(self.section.root.globals if self.section.root else {}),
|
|
"self": self.section,
|
|
"parent": self.section.parent,
|
|
"root": self.section.parent,
|
|
**self.data,
|
|
}
|
|
|
|
def __getitem__(self, key: str) -> Any:
|
|
return self.full_dict[key]
|
|
|
|
def __iter__(self) -> Iterator[str]:
|
|
return iter(self.full_dict)
|
|
|
|
def __len__(self) -> int:
|
|
return len(self.full_dict)
|
|
|
|
def __repr__(self) -> str:
|
|
return repr(self.full_dict)
|