Something went wrong. Try again.
social media crossposting tool. 3rd time's the charm
mastodon misskey crossposting bluesky
Something went wrong. Try again.
1234567891011121314151617181920212223242526272829303132333435363738394041424344import jsonimport loggingimport osimport sys
logging.basicConfig(stream=sys.stdout, level=logging.INFO)LOGGER = logging.getLogger("XPost")
def as_json(obj, indent=None, sort_keys=False) -> str: return json.dumps( obj.__dict__ if not isinstance(obj, dict) else obj, default=lambda o: o.__json__() if hasattr(o, "__json__") else o.__dict__, indent=indent, sort_keys=sort_keys, )
def canonical_label(label: str | None, href: str): if not label or label == href: return True
split = href.split("://", 1) if len(split) > 1: if split[1] == label: return True
return False
def safe_get(obj: dict, key: str, default): val = obj.get(key, default) return val if val else default
def as_envvar(text: str | None) -> str | None: if not text: return None
if text.startswith("env:"): return os.environ.get(text[4:], "")
return text