arcology-fastapi/arcology-sites.org

252 lines
5.4 KiB
Org Mode

:PROPERTIES:
:ID: 20211219T144255.001827
:ROAM_ALIASES: "An Arcology Spreads Over Multiple Domains"
:END:
#+TITLE: Arcology Sites
#+AUTO_TANGLE: t
#+FILETAGS: :Arcology:Development:
#+ARCOLOGY_KEY: arcology/sites
#+ARCOLOGY_ALLOW_CRAWL: t
Arcology is designed to allow a writer to publish writing from across their [[id:cce/org-roam][org-roam]] [[id:knowledge_base][Knowledge Base]] to multiple domains, interlinking between them where necessary. Each site can provide its own CSS -- and maybe eventually its own page template -- and some minimal metadata, all of which are stored in dataclasses which are meant to be used as courtesy classes to store data for the HTML generator and link router.
#+begin_src python :session *Python*
import arcology.sites
site_name = "arcology"
arcology.sites.sites.get(site_name)
arcology.sites.doc
#+end_src
#+begin_src python :tangle arcology/sites.py
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()
#+end_src
#+begin_src python :tangle arcology/sites.py
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
#+end_src
* [[id:arcology/readme][Arcology FastAPI Self-Hosting]]
Of course this thing self-hosts. :)
#+begin_src python :tangle arcology/sites.py
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
#+end_src
* [[id:af7445a2-e4e7-47e8-8faa-f87b76628383][The Lion's Rear]]
#+begin_src python :tangle arcology/sites.py
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
#+end_src
#+begin_src css :tangle arcology/static/css/lionsrear.css
:root {
--alert: #CC6960;
--primary: #707231;
--secondary: #ebbe7b;
--success: #67b4f8;
--warning: #7e5c41;
--white: #87af87;
--light-gray: #cfdcc2;
--medium-gray: #a0aa96;
--dark-gray: #82796C;
--black: #211F1C;
}
body {
background-color: var(--white);
}
section.backlinks {
padding: 0.5em;
border-radius: 1em;
background-color: var(--light-gray);
margin-bottom: 2em;
margin-top: 1em;
}
pre,code {
font-weight: bold;
}
#+end_src
* [[id:1e247294-5f0e-4956-9caa-2c5961236dfa][The Arcology Garden]]
#+begin_src python :tangle arcology/sites.py
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
#+end_src
#+begin_src css :tangle arcology/static/css/garden.css
:root {
--alert: #CC6960;
--primary: #707231;
--secondary: #ebbe7b;
--success: #67b4f8;
--warning: #7e5c41;
--white: #fcf6ed;
--light-gray: #f6e5cb;
--medium-gray: #BAAD9B;
--dark-gray: #82796C;
--black: #211F1C;
--bg: #a6dc68;
}
body {
background-color: var(--bg);
}
#+end_src
* [[id:cce/cce][The Complete Computing Environment]]
#+begin_src python :tangle arcology/sites.py
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
#+end_src
#+begin_src css :tangle arcology/static/css/cce.css
:root {
--alert: #CC6960;
--primary: #707231;
--secondary: #ebbe7b;
--success: #67b4f8;
--warning: #7e5c41;
--white: #fcfcfc;
--light-gray: #dcdcec;
--medium-gray: #cacada;
--dark-gray: #808090;
--black: #211F1C;
}
body {
background-color: var(--dark-gray);
}
#+end_src
* [[id:6b306fe3-fbc4-4ba7-bfcb-089c0564f9c3][Topic Index]] -- the "fact site"
#+begin_src python :tangle arcology/sites.py
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
#+end_src
#+begin_src css :tangle arcology/static/css/docsite.css
:root {
--alert: #CC6960;
--primary: #707231;
--secondary: #ebbe7b;
--success: #67b4f8;
--warning: #7e5c41;
--white: #fcfcfc;
--light-gray: #dcdcec;
--medium-gray: #cacada;
--dark-gray: #808090;
--black: #211F1C;
}
body {
background-color: var(--medium-gray);
}
#+end_src
* "local" site for development
#+begin_src python :tangle arcology/sites.py
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
#+end_src