social media crossposting tool. 3rd time's the charm
mastodon
misskey
crossposting
bluesky
1import logging, sys, os
2import json
3
4logging.basicConfig(stream=sys.stdout, level=logging.INFO)
5LOGGER = logging.getLogger("XPost")
6
7def as_json(obj, indent=None,sort_keys=False) -> str:
8 return json.dumps(
9 obj.__dict__ if not isinstance(obj, dict) else obj,
10 default=lambda o: o.__json__() if hasattr(o, '__json__') else o.__dict__,
11 indent=indent,
12 sort_keys=sort_keys)
13
14def canonical_label(label: str | None, href: str):
15 if not label or label == href:
16 return True
17
18 split = href.split('://', 1)
19 if len(split) > 1:
20 if split[1] == label:
21 return True
22
23 return False
24
25def safe_get(obj: dict, key: str, default):
26 val = obj.get(key, default)
27 return val if val else default
28
29def as_envvar(text: str | None) -> str | None:
30 if not text:
31 return None
32
33 if text.startswith('env:'):
34 return os.environ.get(text[4:], '')
35
36 return text