Rebrand the Rust client crate (coven/ → hh/, package+binary "hack-house"), README, CLI strings, and branch (coven → hack-house). Gitea repo renamed cmd-chat → hack-house to match. Crypto/server logic unchanged; selftest + golden-vector test still green, binary is now `hack-house`. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
35 lines
1.0 KiB
Python
35 lines
1.0 KiB
Python
from abc import ABCMeta
|
|
from pathlib import Path
|
|
|
|
|
|
CURRENT_DIR = Path(__file__).parent
|
|
|
|
|
|
def _extract_style(maybe_style: str | None, name: str) -> str:
|
|
if maybe_style is not None:
|
|
maybe_path = Path(maybe_style)
|
|
if maybe_path.exists():
|
|
return maybe_path.read_text(encoding="UTF-8")
|
|
return maybe_style
|
|
maybe_path = CURRENT_DIR / "styles" / f"{name}.css"
|
|
if maybe_path.exists():
|
|
return maybe_path.read_text(encoding="UTF-8")
|
|
return ""
|
|
|
|
|
|
class CSS(ABCMeta):
|
|
"""Cascade stylesheets, i.e. combine all ancestor styles"""
|
|
|
|
def __new__(cls, name, bases, attrs):
|
|
Page = super().__new__(cls, name, bases, attrs)
|
|
# Use a locally defined STYLE or the one from styles directory
|
|
Page.STYLE = _extract_style(attrs.get("STYLE_FILE"), name)
|
|
Page.STYLE += attrs.get("STYLE_APPEND", "")
|
|
# Combine with all ancestor styles
|
|
Page.CSS = "".join(
|
|
Class.STYLE
|
|
for Class in reversed(Page.__mro__)
|
|
if type(Class) is CSS
|
|
)
|
|
return Page
|