diff --git a/toot/__init__.py b/toot/__init__.py index 739ff78..e293c15 100644 --- a/toot/__init__.py +++ b/toot/__init__.py @@ -1,3 +1,7 @@ +import os +import sys + +from os.path import join, expanduser from collections import namedtuple __version__ = '0.37.0' @@ -9,3 +13,22 @@ DEFAULT_INSTANCE = 'https://mastodon.social' CLIENT_NAME = 'toot - a Mastodon CLI client' CLIENT_WEBSITE = 'https://github.com/ihabunek/toot' + +TOOT_CONFIG_DIR_NAME = "toot" + + +def get_config_dir(): + """Returns the path to toot config directory""" + + # On Windows, store the config in roaming appdata + if sys.platform == "win32" and "APPDATA" in os.environ: + return join(os.getenv("APPDATA"), TOOT_CONFIG_DIR_NAME) + + # Respect XDG_CONFIG_HOME env variable if set + # https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html + if "XDG_CONFIG_HOME" in os.environ: + config_home = expanduser(os.environ["XDG_CONFIG_HOME"]) + return join(config_home, TOOT_CONFIG_DIR_NAME) + + # Default to ~/.config/toot/ + return join(expanduser("~"), ".config", TOOT_CONFIG_DIR_NAME) diff --git a/toot/config.py b/toot/config.py index cff9856..077e098 100644 --- a/toot/config.py +++ b/toot/config.py @@ -1,44 +1,22 @@ import json import os -import sys from functools import wraps -from os.path import dirname, join, expanduser +from os.path import dirname, join -from toot import User, App +from toot import User, App, get_config_dir from toot.exceptions import ConsoleError from toot.output import print_out -TOOT_CONFIG_DIR_NAME = "toot" TOOT_CONFIG_FILE_NAME = "config.json" -def get_config_dir(): - """Returns the path to toot config directory""" - - # On Windows, store the config in roaming appdata - if sys.platform == "win32" and "APPDATA" in os.environ: - return join(os.getenv("APPDATA"), TOOT_CONFIG_DIR_NAME) - - # Respect XDG_CONFIG_HOME env variable if set - # https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html - if "XDG_CONFIG_HOME" in os.environ: - config_home = expanduser(os.environ["XDG_CONFIG_HOME"]) - return join(config_home, TOOT_CONFIG_DIR_NAME) - - # Default to ~/.config/toot/ - return join(expanduser("~"), ".config", TOOT_CONFIG_DIR_NAME) - - def get_config_file_path(): """Returns the path to toot config file.""" return join(get_config_dir(), TOOT_CONFIG_FILE_NAME) -CONFIG_FILE = get_config_file_path() - - def user_id(user): return "{}@{}".format(user.username, user.instance) @@ -63,15 +41,18 @@ def make_config(path): def load_config(): - if not os.path.exists(CONFIG_FILE): - make_config(CONFIG_FILE) + path = get_config_file_path() - with open(CONFIG_FILE) as f: + if not os.path.exists(path): + make_config(path) + + with open(path) as f: return json.load(f) def save_config(config): - with open(CONFIG_FILE, 'w') as f: + path = get_config_file_path() + with open(path, "w") as f: return json.dump(config, f, indent=True, sort_keys=True) diff --git a/toot/output.py b/toot/output.py index c1d89c6..6fd59a2 100644 --- a/toot/output.py +++ b/toot/output.py @@ -4,6 +4,7 @@ import sys import textwrap from functools import lru_cache +from toot import settings from toot.entities import Instance, Notification, Poll, Status from toot.utils import get_text, parse_html from toot.wcstring import wc_wrap @@ -118,8 +119,7 @@ def use_ansi_color(): return False # Check in settings - from toot.settings import get_setting - color = get_setting("common.color", bool) + color = settings.get_setting("common.color", bool) if color is not None: return color @@ -128,7 +128,6 @@ def use_ansi_color(): def print_out(*args, **kwargs): - from toot import settings if not settings.get_quiet(): args = [colorize(a) if use_ansi_color() else strip_tags(a) for a in args] print(*args, **kwargs) diff --git a/toot/settings.py b/toot/settings.py index 990fcc1..408b1ae 100644 --- a/toot/settings.py +++ b/toot/settings.py @@ -4,7 +4,7 @@ import sys from functools import lru_cache from os.path import exists, join from tomlkit import parse -from toot.config import get_config_dir +from toot import get_config_dir from typing import Optional, Type @@ -15,14 +15,13 @@ def get_settings_path(): return join(get_config_dir(), TOOT_SETTINGS_FILE_NAME) -SETTINGS_FILE = get_settings_path() - - def load_settings() -> dict: - if not exists(SETTINGS_FILE): + path = get_settings_path() + + if not exists(path): return {} - with open(SETTINGS_FILE) as f: + with open(path) as f: return parse(f.read())