[docs]@dataclass
class Head(SheetHandler):
class Meta:
name = "head"
metas: List[alias_meta] = field(
default_factory=list,
metadata={"name": "meta", "namespace": ""},
)
links: List[Link] = field(
default_factory=list,
metadata={"name": "link", "namespace": ""},
)
cached_links = {}
title: Optional[str] = field(default=None, metadata={"type": "Element"})
# description: Optional[str] = field(default="", metadata={"type": "Element"})
# style: Optional[str] = field(default="", metadata={"type": "Element"})
style: CSSSheet = field(
default_factory=lambda: cssutils.parseString(""),
metadata={
"name": "style",
"type": "Element",
},
)
[docs] def get_link_dict(self, cached=True, cache=True):
"""
Return a dictionary of resolved links.
If cached is True, then the cached resolved links are returned.
"""
ret = {}
for m in self.links:
if m.ref in self.cached_links and cached:
ret[m.ref] = self.cached_links[m.ref]
else:
ret[m.ref] = io.read(m.href)
if cache:
self.cached_links[m.ref] = ret[m.ref]
return ret
[docs] def get_sheets(self):
sheets = []
sheets += super().get_sheets()
for k, v in self.get_link_dict().items():
if k == "stylesheet":
sheets += [v]
sheets += [self.style]
return sheets
[docs] def get_sheet(self):
return self.style
[docs] def with_sheet(self, sheet):
self.style = sheet
return self