Retro Bulletin Board Systems on atproto. Web app and TUI. lazy mirror of alyraffauf/atbbs atbbs.xyz
forums python tui atproto bbs
3
fork

Configure Feed

Select the types of activity you want to include in your feed.

core: add make_at_uri

+19 -13
+5
core/models.py
··· 34 34 return hash(str(self)) 35 35 36 36 37 + def make_at_uri(did: str, collection: str, rkey: str) -> str: 38 + """Build an AT URI string from its components.""" 39 + return f"at://{did}/{collection}/{rkey}" 40 + 41 + 37 42 # errors 38 43 39 44
+2 -2
core/records.py
··· 10 10 from core import lexicon 11 11 from core.constellation import get_board_activity, get_replies, get_root_posts 12 12 from core.filters import filter_moderated 13 - from core.models import AtUri, AuthError, BBS, Board, MiniDoc, Post, Record 13 + from core.models import AtUri, AuthError, BBS, Board, MiniDoc, Post, Record, make_at_uri 14 14 from core.slingshot import ( 15 15 get_records_batch, 16 16 get_records_by_uri, ··· 51 51 newest posts first, the first time a thread URI appears is its most 52 52 recent activity — giving us bump order naturally. 53 53 """ 54 - board_uri = str(AtUri(bbs.identity.did, lexicon.BOARD, board.slug)) 54 + board_uri = make_at_uri(bbs.identity.did, lexicon.BOARD, board.slug) 55 55 max_scans = 4 56 56 57 57 # Phase 1: Scan board activity to find unique thread URIs
+2 -1
core/resolver.py
··· 11 11 BBSNotFoundError, 12 12 NoBBSError, 13 13 NetworkError, 14 + make_at_uri, 14 15 ) 15 16 from core import lexicon 16 17 from core.cache import TTLCache ··· 51 52 raise NetworkError("Could not reach the network.") 52 53 53 54 site_value = site_record.value 54 - site_uri = str(AtUri(identity.did, lexicon.SITE, "self")) 55 + site_uri = make_at_uri(identity.did, lexicon.SITE, "self") 55 56 56 57 # Fetch boards and news concurrently 57 58 board_uris = site_value["boards"]
+2 -2
tui/screens/compose/news.py
··· 3 3 from textual.widgets import Footer, Input, Static, TextArea 4 4 5 5 from core import lexicon, limits 6 - from core.models import AtUri, BBS 6 + from core.models import BBS, make_at_uri 7 7 from tui.screens.compose.base import ComposeScreen 8 8 from tui.widgets.breadcrumb import Breadcrumb 9 9 ··· 36 36 self.query_one("#compose-title", Input).focus() 37 37 38 38 def get_post_params(self, title: str | None, body: str) -> dict: 39 - site_uri = str(AtUri(self.bbs.identity.did, lexicon.SITE, "self")) 39 + site_uri = make_at_uri(self.bbs.identity.did, lexicon.SITE, "self") 40 40 return {"scope": site_uri, "body": body, "title": title}
+2 -2
tui/screens/compose/thread.py
··· 3 3 from textual.widgets import Footer, Input, Static, TextArea 4 4 5 5 from core import lexicon, limits 6 - from core.models import AtUri, BBS, Board 6 + from core.models import BBS, Board, make_at_uri 7 7 from tui.screens.compose.base import ComposeScreen 8 8 from tui.widgets.breadcrumb import Breadcrumb 9 9 ··· 40 40 self.query_one("#compose-title", Input).focus() 41 41 42 42 def get_post_params(self, title: str | None, body: str) -> dict: 43 - board_uri = str(AtUri(self.bbs.identity.did, lexicon.BOARD, self.board.slug)) 43 + board_uri = make_at_uri(self.bbs.identity.did, lexicon.BOARD, self.board.slug) 44 44 return {"scope": board_uri, "body": body, "title": title}
+2 -2
tui/screens/sysop/create.py
··· 5 5 from textual.widgets import Footer, Input 6 6 7 7 from core import lexicon 8 - from core.models import AtUri, AuthError 8 + from core.models import AuthError, make_at_uri 9 9 from core.records import put_board_record, put_site_record 10 10 from core.resolver import invalidate_bbs_cache, resolve_bbs 11 11 from core.util import now_iso ··· 77 77 "description": description, 78 78 "intro": intro, 79 79 "boards": [ 80 - str(AtUri(session["did"], lexicon.BOARD, board["slug"])) 80 + make_at_uri(session["did"], lexicon.BOARD, board["slug"]) 81 81 for board in self._boards 82 82 ], 83 83 "createdAt": now,
+2 -2
tui/screens/sysop/delete.py
··· 5 5 from textual.widgets import Button, Footer, Static 6 6 7 7 from core import lexicon 8 - from core.models import AtUri, BBS 8 + from core.models import AtUri, BBS, make_at_uri 9 9 from core.constellation import get_root_posts 10 10 from core.records import delete_record, list_pds_records 11 11 from tui.util import make_session_updater ··· 55 55 failed.append(f"board/{board.slug}") 56 56 57 57 # Delete sysop's news posts (posts scoped to site) 58 - site_uri = str(AtUri(session["did"], lexicon.SITE, "self")) 58 + site_uri = make_at_uri(session["did"], lexicon.SITE, "self") 59 59 try: 60 60 backlinks = await get_root_posts(client, site_uri) 61 61 for ref in backlinks.records:
+2 -2
tui/screens/sysop/edit.py
··· 5 5 from textual.widgets import Footer, Input 6 6 7 7 from core import lexicon 8 - from core.models import AtUri, AuthError, BBS 8 + from core.models import AuthError, BBS, make_at_uri 9 9 from core.records import delete_record, put_board_record, put_site_record 10 10 from core.resolver import invalidate_bbs_cache 11 11 from core.util import now_iso ··· 107 107 "description": description, 108 108 "intro": intro, 109 109 "boards": [ 110 - str(AtUri(session["did"], lexicon.BOARD, board["slug"])) 110 + make_at_uri(session["did"], lexicon.BOARD, board["slug"]) 111 111 for board in self._boards 112 112 ], 113 113 "createdAt": self.bbs.site.created_at or now,