social media crossposting tool. 3rd time's the charm
mastodon misskey crossposting bluesky
1from dataclasses import dataclass 2from pathlib import Path 3from typing import Any 4from cross.service import OutputService 5 6ALLOWED_POSTING_VISIBILITY: list[str] = ["public", "unlisted", "private"] 7 8@dataclass(kw_only=True) 9class MastodonOutputOptions: 10 token: str 11 instance: str 12 visibility: str = "public" 13 14 @classmethod 15 def from_dict(cls, data: dict[str, Any]) -> 'MastodonOutputOptions': 16 data['instance'] = data['instance'][:-1] if data['instance'].endswith("/") else data['instance'] 17 18 if 'visibility' in data: 19 if data['visibility'] not in ALLOWED_POSTING_VISIBILITY: 20 raise ValueError(f"Invalid visibility option {data['visibility']}!") 21 22 return MastodonOutputOptions(**data) 23 24# TODO 25class MastodonOutputService(OutputService): 26 def __init__(self, db: Path, options: MastodonOutputOptions) -> None: 27 super().__init__(options.instance, db)