summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--poezio/tabs/basetabs.py63
1 files changed, 33 insertions, 30 deletions
diff --git a/poezio/tabs/basetabs.py b/poezio/tabs/basetabs.py
index 3584b4dd..cf230620 100644
--- a/poezio/tabs/basetabs.py
+++ b/poezio/tabs/basetabs.py
@@ -14,12 +14,13 @@ revolving around chats.
"""
import logging
-log = logging.getLogger(__name__)
-
import string
import time
from datetime import datetime
from xml.etree import cElementTree as ET
+from typing import Any, Callable, Dict, List, Optional
+
+from slixmpp import JID, Message
from poezio.core.structs import Command, Completion, Status
from poezio import timed_events
@@ -33,6 +34,9 @@ from poezio.text_buffer import TextBuffer
from poezio.theming import get_theme, dump_tuple
from poezio.decorators import command_args_parser
+log = logging.getLogger(__name__)
+
+
# getters for tab colors (lambdas, so that they are dynamic)
STATE_COLORS = {
'disconnected': lambda: get_theme().COLOR_TAB_DISCONNECTED,
@@ -88,7 +92,7 @@ SHOW_NAME = {
class Tab:
plugin_commands = {}
- plugin_keys = {}
+ plugin_keys = {} # type: Dict[str, Callable]
def __init__(self, core):
self.core = core
@@ -106,11 +110,11 @@ class Tab:
self.commands = {} # and their own commands
@property
- def size(self):
+ def size(self) -> int:
return self.core.size
@staticmethod
- def tab_win_height():
+ def tab_win_height() -> int:
"""
Returns 1 or 0, depending on if we are using the vertical tab list
or not.
@@ -132,11 +136,11 @@ class Tab:
return VERTICAL_STATE_COLORS[self._state]()
@property
- def state(self):
+ def state(self) -> str:
return self._state
@state.setter
- def state(self, value):
+ def state(self, value: str):
if value not in STATE_COLORS:
log.debug("Invalid value for tab state: %s", value)
elif STATE_PRIORITY[value] < STATE_PRIORITY[self._state] and \
@@ -154,7 +158,7 @@ class Tab:
if self._state == 'current':
self._prev_state = None
- def set_state(self, value):
+ def set_state(self, value: str):
self._state = value
def save_state(self):
@@ -181,7 +185,7 @@ class Tab:
"""
return False
- def register_commands_batch(self, commands):
+ def register_commands_batch(self, commands: List[Dict[str, Any]]):
"""
Add several commands in a row, using a list of dictionaries
"""
@@ -201,12 +205,12 @@ class Tab:
usage=usage)
def register_command(self,
- name,
- func,
+ name: str,
+ func: Callable,
*,
desc='',
shortdesc='',
- completion=None,
+ completion: Optional[Callable] = None,
usage=''):
"""
Add a command
@@ -217,7 +221,7 @@ class Tab:
desc = shortdesc
self.commands[name] = Command(func, desc, completion, shortdesc, usage)
- def complete_commands(self, the_input):
+ def complete_commands(self, the_input: windows.Input) -> bool:
"""
Does command completion on the specified input for both global and tab-specific
commands.
@@ -255,14 +259,13 @@ class Tab:
return False
if command.comp is None:
return False # There's no completion function
- else:
- comp = command.comp(the_input)
- if comp:
- return comp.run()
- return comp
+ comp = command.comp(the_input)
+ if comp:
+ return comp.run()
+ return comp
return False
- def execute_command(self, provided_text):
+ def execute_command(self, provided_text: str) -> bool:
"""
Execute the command in the input and return False if
the input didn't contain a command
@@ -327,19 +330,19 @@ class Tab:
"""
return self.name
- def get_nick(self):
+ def get_nick(self) -> str:
"""
Get the nick of the tab (defaults to its name)
"""
return self.name
- def get_text_window(self):
+ def get_text_window(self) -> Optional[windows.TextWin]:
"""
Returns the principal TextWin window, if there's one
"""
return None
- def on_input(self, key, raw):
+ def on_input(self, key: str, raw: bool):
"""
raw indicates if the key should activate the associated command or not.
"""
@@ -417,7 +420,7 @@ class Tab:
self.input.on_delete()
self.closed = True
- def matching_names(self):
+ def matching_names(self) -> List[str]:
"""
Returns a list of strings that are used to name a tab with the /win
command. For example you could switch to a tab that returns
@@ -505,18 +508,18 @@ class ChatTab(Tab):
self._text_buffer.add_message(**message)
@property
- def remote_wants_chatstates(self):
+ def remote_wants_chatstates(self) -> bool:
return True
@property
- def general_jid(self):
+ def general_jid(self) -> JID:
return NotImplementedError
- def load_logs(self, log_nb):
+ def load_logs(self, log_nb: int) -> Optional[List[Dict[str, Any]]]:
logs = logger.get_logs(safeJID(self.name).bare, log_nb)
return logs
- def log_message(self, txt, nickname, time=None, typ=1):
+ def log_message(self, txt: str, nickname: str, time: Optional[datetime] = None, typ=1):
"""
Log the messages in the archives.
"""
@@ -600,7 +603,7 @@ class ChatTab(Tab):
if message:
message.send()
- def generate_xhtml_message(self, arg):
+ def generate_xhtml_message(self, arg: str) -> Message:
if not arg:
return
try:
@@ -618,7 +621,7 @@ class ChatTab(Tab):
msg['html']['body'] = arg
return msg
- def get_dest_jid(self):
+ def get_dest_jid(self) -> JID:
return self.name
@refresh_wrapper.always
@@ -719,7 +722,7 @@ class ChatTab(Tab):
return True
@property
- def inactive(self):
+ def inactive(self) -> bool:
"""Whether we should send inactive or active as a chatstate"""
return self.core.status.show in ('xa', 'away') or\
(hasattr(self, 'directed_presence') and not self.directed_presence)