diff --git a/toot/config.py b/toot/config.py index 8817e7f..1dd2d6f 100644 --- a/toot/config.py +++ b/toot/config.py @@ -17,11 +17,11 @@ def get_config_file_path(): return join(get_config_dir(), TOOT_CONFIG_FILE_NAME) -def user_id(user): +def user_id(user: User): return "{}@{}".format(user.username, user.instance) -def make_config(path): +def make_config(path: str): """Creates an empty toot configuration file.""" config = { "apps": {}, @@ -58,7 +58,7 @@ def save_config(config): return json.dump(config, f, indent=True, sort_keys=True) -def extract_user_app(config, user_id): +def extract_user_app(config, user_id: str): if user_id not in config['users']: return None, None @@ -82,7 +82,7 @@ def get_active_user_app(): return None, None -def get_user_app(user_id): +def get_user_app(user_id: str): """Returns (User, App) for given user ID or (None, None) if user is not logged in.""" return extract_user_app(load_config(), user_id) @@ -93,7 +93,7 @@ def load_app(instance: str) -> Optional[App]: return App(**config['apps'][instance]) -def load_user(user_id, throw=False): +def load_user(user_id: str, throw=False): config = load_config() if user_id in config['users']: @@ -120,7 +120,7 @@ def save_app(app: App): config['apps'][app.instance] = app._asdict() -def delete_app(config, app): +def delete_app(config, app: App): with edit_config() as config: config['apps'].pop(app.instance, None) diff --git a/toot/utils/__init__.py b/toot/utils/__init__.py index a367ddb..f21d425 100644 --- a/toot/utils/__init__.py +++ b/toot/utils/__init__.py @@ -1,26 +1,22 @@ +import click import os import re -import socket import subprocess import tempfile import unicodedata import warnings from bs4 import BeautifulSoup -from typing import Any, Dict, List - -import click - -from toot.exceptions import ConsoleError +from typing import Any, Dict, Generator, List, Optional from urllib.parse import urlparse, urlencode, quote, unquote -def str_bool(b): +def str_bool(b: bool) -> str: """Convert boolean to string, in the way expected by the API.""" return "true" if b else "false" -def str_bool_nullable(b): +def str_bool_nullable(b: Optional[bool]) -> Optional[str]: """Similar to str_bool, but leave None as None""" return None if b is None else str_bool(b) @@ -34,7 +30,7 @@ def parse_html(html: str) -> BeautifulSoup: return BeautifulSoup(html.replace("'", "'"), "html.parser") -def get_text(html): +def get_text(html: str) -> str: """Converts html to text, strips all tags.""" text = parse_html(html).get_text() return unicodedata.normalize("NFKC", text) @@ -53,7 +49,7 @@ def html_to_paragraphs(html: str) -> List[List[str]]: return [[get_text(line) for line in p] for p in paragraphs] -def format_content(content): +def format_content(content: str) -> Generator[str, None, None]: """Given a Status contents in HTML, converts it into lines of plain text. Returns a generator yielding lines of content. @@ -76,9 +72,9 @@ def format_content(content): EOF_KEY = "Ctrl-Z" if os.name == 'nt' else "Ctrl-D" -def multiline_input(): +def multiline_input() -> str: """Lets user input multiple lines of text, terminated by EOF.""" - lines = [] + lines: List[str] = [] while True: try: lines.append(input()) diff --git a/toot/utils/datetime.py b/toot/utils/datetime.py index 2a214a0..e54ac80 100644 --- a/toot/utils/datetime.py +++ b/toot/utils/datetime.py @@ -4,7 +4,7 @@ import os from datetime import datetime, timezone -def parse_datetime(value): +def parse_datetime(value: str) -> datetime: """Returns an aware datetime in local timezone""" dttm = datetime.strptime(value, "%Y-%m-%dT%H:%M:%S.%f%z")