Formatting/style updates to new tasks command

This commit is contained in:
Griatch 2021-06-19 13:51:28 +02:00
parent 11bfd96cdd
commit d12dce8959
3 changed files with 27 additions and 31 deletions

View file

@ -68,6 +68,7 @@ Up requirements to Django 3.2+
- Update and fix dummyrunner with cleaner code and setup. - Update and fix dummyrunner with cleaner code and setup.
- Made `iter_to_str` format prettier strings, using Oxford comma. - Made `iter_to_str` format prettier strings, using Oxford comma.
- Added an MXP anchor tag to also support clickable web links. - Added an MXP anchor tag to also support clickable web links.
- New `tasks` command for managing tasks started with `utils.delay` (PR by davewiththenicehat)
### Evennia 0.9.5 (2019-2020) ### Evennia 0.9.5 (2019-2020)
@ -151,6 +152,7 @@ without arguments starts a full interactive Python console.
- Include more Web-client info in `session.protocol_flags`. - Include more Web-client info in `session.protocol_flags`.
- Fixes in multi-match situations - don't allow finding/listing multimatches for 3-box when - Fixes in multi-match situations - don't allow finding/listing multimatches for 3-box when
only two boxes in location. only two boxes in location.
- Fix for TaskHandler with proper deferred returns/ability to cancel etc (PR by davewiththenicehat)
## Evennia 0.9 (2018-2019) ## Evennia 0.9 (2018-2019)

View file

@ -25,7 +25,7 @@ from evennia.utils.eveditor import EvEditor
from evennia.utils.evtable import EvTable from evennia.utils.evtable import EvTable
from evennia.utils.evmore import EvMore from evennia.utils.evmore import EvMore
from evennia.utils.evmenu import ask_yes_no from evennia.utils.evmenu import ask_yes_no
from evennia.utils.utils import crop, class_from_module from evennia.utils.utils import crop, class_from_module, iter_to_str
from evennia.scripts.taskhandler import TaskHandlerTask from evennia.scripts.taskhandler import TaskHandlerTask
COMMAND_DEFAULT_CLASS = class_from_module(settings.COMMAND_DEFAULT_CLASS) COMMAND_DEFAULT_CLASS = class_from_module(settings.COMMAND_DEFAULT_CLASS)
@ -1213,13 +1213,7 @@ class CmdTasks(COMMAND_DEFAULT_CLASS):
Display or terminate active tasks (delays). Display or terminate active tasks (delays).
Usage: Usage:
tasks tasks[/switch] [task_id or function_name]
show all current active taks.
tasks[/switch] [function name]
Process the action in the switch to all tasks that are deferring a specific function name.
This would match the name of the callback you passed to a delay or the task handler.
tasks[/switch] [task id]
Process the action in the switch to a specific task.
Switches: Switches:
pause - Pause the callback of a task. pause - Pause the callback of a task.
@ -1230,29 +1224,22 @@ class CmdTasks(COMMAND_DEFAULT_CLASS):
cancel - Stop a task from automatically executing. cancel - Stop a task from automatically executing.
Notes: Notes:
A task is a single use method of delaying the call of a function. A task is a single use method of delaying the call of a function. Calls are created
in code, using `evennia.utils.delay`.
See |luhttps://www.evennia.com/docs/latest/Command-Duration.html|ltthe docs|le for help.
Tasks can be created using utils.delay. By default, tasks that are canceled and never called are cleaned up after one minute.
Reference: https://evennia.readthedocs.io/en/latest/Command-Duration.html
Only the action requested on the first switch will be processed. All other switches will Examples:
be ignored. - `tasks/cancel move_callback` - Cancels all movement delays from the slow_exit contrib.
In this example slow exits creates it's tasks with
By default, tasks that are canceled and never called are automatically removed after `utils.delay(move_delay, move_callback)`
one minute. - `tasks/cancel 2` - Cancel task id 2.
Example:
tasks/cancel move_callback
Cancel all movement delays from the slow_exit contrib.
In this example slow exits creates it's tasks with:
utils.delay(move_delay, move_callback)
tasks/cancel 2
Cancel task id 2.
""" """
key = "tasks" key = "tasks"
aliases = ["delays"] aliases = ["delays", "task"]
switch_options = ("pause", "unpause", "do_task", "call", "remove", "cancel") switch_options = ("pause", "unpause", "do_task", "call", "remove", "cancel")
locks = "perm(Developer)" locks = "perm(Developer)"
help_category = "System" help_category = "System"
@ -1260,7 +1247,7 @@ class CmdTasks(COMMAND_DEFAULT_CLASS):
@staticmethod @staticmethod
def coll_date_func(task): def coll_date_func(task):
"""Replace regex characters in date string and collect deferred function name.""" """Replace regex characters in date string and collect deferred function name."""
t_comp_date = str(task[0]).replace('-', '/').replace('.', ' ms:') t_comp_date = str(task[0]).replace('-', '/')
t_func_name = str(task[1]).split(' ') t_func_name = str(task[1]).split(' ')
t_func_mem_ref = t_func_name[3] if len(t_func_name) >= 4 else None t_func_mem_ref = t_func_name[3] if len(t_func_name) >= 4 else None
return t_comp_date, t_func_mem_ref return t_comp_date, t_func_mem_ref
@ -1355,8 +1342,8 @@ class CmdTasks(COMMAND_DEFAULT_CLASS):
t_func_name = t_func_name[1] if len(t_func_name) >= 2 else None t_func_name = t_func_name[1] if len(t_func_name) >= 2 else None
if task.exists(): # make certain the task has not been called yet. if task.exists(): # make certain the task has not been called yet.
prompt = f'Yes or No, {action_request} task {task_id}? With completion date ' \ prompt = (f'{action_request.capitalize()} task {task_id} with completion date '
f'{t_comp_date}. Deferring function {t_func_name}.' f'{t_comp_date} ({t_func_name}) {{options}}?')
no_msg = f'No {action_request} processed.' no_msg = f'No {action_request} processed.'
# record variables for use in do_task_action method # record variables for use in do_task_action method
self.task_id = task_id self.task_id = task_id
@ -1364,7 +1351,12 @@ class CmdTasks(COMMAND_DEFAULT_CLASS):
self.t_func_mem_ref = t_func_mem_ref self.t_func_mem_ref = t_func_mem_ref
self.task_action = switch_action self.task_action = switch_action
self.action_request = action_request self.action_request = action_request
ask_yes_no(self.caller, prompt, self.do_task_action, no_msg, no_msg, True) ask_yes_no(self.caller,
prompt=prompt,
yes_action=self.do_task_action,
no_action=no_msg,
default="Y",
allow_abort=True)
return True return True
else: else:
self.msg(task_comp_msg) self.msg(task_comp_msg)
@ -1432,4 +1424,6 @@ class CmdTasks(COMMAND_DEFAULT_CLASS):
# create and display the table # create and display the table
tasks_table = EvTable(*tasks_header, table=tasks_list, maxwidth=width, border='cells', tasks_table = EvTable(*tasks_header, table=tasks_list, maxwidth=width, border='cells',
align='center') align='center')
self.msg(tasks_table) actions = (f'/{switch}' for switch in self.switch_options)
helptxt = f"\nActions: {iter_to_str(actions)}"
self.msg(str(tasks_table) + helptxt)

View file

@ -427,7 +427,7 @@ class ANSIParser(object):
""" """
string = self.mxp_sub.sub(r"\2", string) string = self.mxp_sub.sub(r"\2", string)
string = self.mxp_url_sub.sub(r"\2", string) string = self.mxp_url_sub.sub(r"\1", string) # replace with url verbatim
return string return string
def parse_ansi(self, string, strip_ansi=False, xterm256=False, mxp=False): def parse_ansi(self, string, strip_ansi=False, xterm256=False, mxp=False):