arcology-fastapi/arcology/sites.py

106 lines
2.2 KiB
Python

from dataclasses import dataclass
from typing import Optional, List
from enum import Enum
from arcology.config import Environment as Env
from arcology.config import get_settings
@dataclass
class Site():
key: str
domains: dict[Env, List[str]]
title: str
css_file: Optional[str]
node_color: Optional[str]
def get_domains(self, env: Env = get_settings().arcology_env):
return self.domains.get(env, [])
sites = dict()
from functools import lru_cache
from typing import Optional
env = get_settings().arcology_env
@lru_cache(maxsize=16)
def host_to_site(host: str) -> Optional[Site]:
for site in sites.values():
domains = site.domains.get(env)
if domains is None:
raise Exception(f"no domains for site {site}+{env}?")
if host in domains:
return site
arcology = Site(
key="arcology",
domains={
Env.prod: ["engine.arcology.garden"],
Env.dev: ["engine.arcology.garden:8000"]
},
title="The Arcology Site Engine",
css_file=None,
node_color="#67b4f8"
)
sites["arcology"] = arcology
lionsrear = Site(
key="lionsrear",
domains={
Env.prod: ["thelionsrear.com"],
Env.dev: ["dev.thelionsrear.com:8000"]
},
title="The Lion's Rear",
css_file="/static/css/lionsrear.css",
node_color="#87af87"
)
sites["lionsrear"] = lionsrear
garden = Site(
key="garden",
domains={
Env.prod: ["arcology.garden"],
Env.dev: ["dev.arcology.garden:8000"]
},
title="The Arcology Garden",
css_file="/static/css/garden.css",
node_color="#a6dc68"
)
sites["garden"] = garden
cce = Site(
key="cce",
domains={
Env.prod: ["cce.whatthefuck.computer", "cce.rix.si"],
Env.dev: ["dev.cce"],
},
title="The Complete Computing Environment",
css_file="/static/css/cce.css",
node_color="#cc6960"
)
sites["cce"] = cce
doc = Site(
key="doc",
domains={
Env.prod: ["doc.rix.si"],
Env.dev: ["dev.topics"],
},
title="rrix's fact site",
css_file="/static/css/docsite.css",
node_color="#ebbe7b"
)
sites["doc"] = doc
local = Site(
key="local",
domains={
Env.prod: [],
Env.dev: ["localhost:8000"],
},
title="localhost",
css_file="/static/css/docsite.css",
node_color="#211F1C",
)
sites["local"] = local