tooter/config.py

59 lines
1.5 KiB
Python
Raw Permalink Normal View History

2022-05-09 19:34:00 +00:00
from dataclasses import dataclass
2022-05-09 20:42:31 +00:00
from mastodon import Mastodon
from typing import Tuple, Dict
2022-05-09 19:34:00 +00:00
import yaml
2022-05-09 20:42:31 +00:00
2022-05-09 19:34:00 +00:00
@dataclass
class Config(object):
2022-05-09 20:42:31 +00:00
server: Tuple[str, int, bool]
2022-05-09 19:34:00 +00:00
nickname: str
username: str
realname: str
2022-05-09 20:42:31 +00:00
channel: str
2022-05-09 19:34:00 +00:00
sasl: Tuple[str, str]
2022-05-09 20:42:31 +00:00
mastodon_accounts: Dict[str, Mastodon]
assigned_channels: Dict[str, str]
2022-05-09 19:34:00 +00:00
def load(filepath: str):
with open(filepath) as file:
config_yaml = yaml.safe_load(file.read())
nickname = config_yaml["nickname"]
2022-05-09 20:42:31 +00:00
server = config_yaml["server"]
2022-05-09 19:34:00 +00:00
hostname, port_s = server.split(":", 1)
tls = None
2022-05-09 19:34:00 +00:00
if port_s.startswith("+"):
2022-05-09 20:42:31 +00:00
tls = True
2022-05-09 19:34:00 +00:00
port_s = port_s.lstrip("+")
port = int(port_s)
2022-05-09 20:42:31 +00:00
accounts = {}
channels = {}
for acct in config_yaml["mastodon"]:
accounts[acct["name"]] = Mastodon(
client_id=acct["client_id"],
client_secret=acct["client_secret"],
access_token=acct["access_token"],
api_base_url=acct["api_base_url"],
)
2022-06-14 21:09:18 +00:00
if "channels" in acct:
for channel in acct["channels"]:
channels[channel] = acct["name"]
2022-05-09 20:42:31 +00:00
2022-05-09 19:34:00 +00:00
return Config(
(hostname, port, tls),
nickname,
config_yaml.get("username", nickname),
config_yaml.get("realname", nickname),
config_yaml["channel"],
(config_yaml["sasl"]["username"], config_yaml["sasl"]["password"]),
2022-05-09 20:42:31 +00:00
mastodon_accounts=accounts,
assigned_channels=channels,
2022-05-09 19:34:00 +00:00
)