Comunicados
- -Todavía no hay comunicados.
- -Organízate
La acampada se organiza en OASIS, una red social libre sobre Secure Scuttlebutt. No hay empresa detrás ni cuentas que se puedan cerrar desde fuera. Al instalarla entras solo en La Plaza, el pub común, y desde ahí llegas a la acampada.
@@ -44,17 +37,8 @@Directo es lo que la acampada va subiendo al pub. Se ve sin instalar nada.
- -Comisiones
- -Las comisiones se crean como tribus dentro de OASIS.
- - -Debates
- -Los debates se abren como foros dentro de OASIS.
- +Directo y comunicados se ven sin instalar nada.
+Las comisiones son tribus y los debates son foros. Se entra desde la app.
\n") - out.append(f"
{p}
") - return "\n".join(out) - - -def nombre(c): - h = hashlib.sha256(c["key"].encode()).hexdigest()[:8] - return f"{fecha(c['ts']):%Y-%m-%d}-{h}.html" - - -def cambia(doc, clave, contenido): - ini, fin = f"", f"" - i, j = doc.find(ini), doc.find(fin) - if i < 0 or j < i: - sys.exit(f"faltan las marcas {clave}:inicio / {clave}:fin") - return doc[:i + len(ini)] + "\n" + contenido + "\n " + doc[j:] - - -def escribe(ruta, texto): - try: - with open(ruta, encoding="utf-8") as f: - if f.read() == texto: - return - except FileNotFoundError: - pass - fd, tmp = tempfile.mkstemp(dir=os.path.dirname(ruta), prefix=".tmp.") - try: - with os.fdopen(fd, "w", encoding="utf-8") as f: - f.write(texto) - os.chmod(tmp, 0o644) - os.replace(tmp, ruta) - except BaseException: - os.unlink(tmp) - raise - - -def lista_comunicados(cs): - if not cs: - return "Todavía no hay comunicados.
" - li = [] - for c in cs: - t = fecha(c["ts"]) - titulo, resto = partir(c["texto"]) - ext = plano(resto) - if len(ext) > EXTRACTO: - ext = ext[:EXTRACTO].rsplit(" ", 1)[0] + "…" - li.append( - "{html.escape(titulo)}
\n' - + (f"{html.escape(ext)}
\n" if ext else "") - + "- \n' + "\n".join(li) + "\n
{vacio}
" - li = [] - for it in items: - s = sub(it) - li.append(f"- \n' + "\n".join(li) + "\n