More typing
This commit is contained in:
parent
878a67e501
commit
f1e4cdc2a8
1 changed files with 33 additions and 30 deletions
|
@ -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)
|
||||
|
|
Loading…
Reference in a new issue