11from __future__ import annotations
22
3+ import asyncio
34from typing import TYPE_CHECKING , Any , Callable
45
56import click
@@ -91,23 +92,7 @@ def execute_task(log: bool, **kwargs: Any) -> None:
9192def ls (ctx : click .Context ) -> None :
9293 """List all tasks with their schedules"""
9394 task_manager = ctx_task_manager (ctx )
94- table = Table (title = "Tasks" )
95- table .add_column ("Name" , style = "cyan" , no_wrap = True )
96- table .add_column ("Schedule" , style = "magenta" )
97- table .add_column ("CPU bound" , style = "magenta" )
98- table .add_column ("Timeout secs" , style = "green" )
99- table .add_column ("Priority" , style = "magenta" )
100- table .add_column ("Description" , style = "green" )
101- for name in sorted (task_manager .registry ):
102- task = task_manager .registry [name ]
103- table .add_row (
104- name ,
105- str (task .schedule ),
106- "yes" if task .cpu_bound else "no" ,
107- str (task .timeout_seconds ),
108- str (task .priority ),
109- task .short_description ,
110- )
95+ table = asyncio .run (tasks_table (task_manager ))
11196 console = Console ()
11297 console .print (table )
11398
@@ -148,9 +133,25 @@ def serve(ctx: click.Context, host: str, port: int, reload: bool) -> None:
148133 )
149134
150135
136+ @click .command ()
137+ @click .argument ("task" )
138+ @click .option (
139+ "--disable" ,
140+ is_flag = True ,
141+ default = False ,
142+ help = "Disable the task" ,
143+ show_default = True ,
144+ )
145+ @click .pass_context
146+ def enable (ctx : click .Context , task : str , disable : bool ) -> None :
147+ """Enable or disable a task"""
148+ task_manager = ctx_task_manager (ctx )
149+ asyncio .run (enable_task (task_manager , task , not disable ))
150+
151+
151152execute = ExecuteTasks (name = "exec" , help = "Execute a registered task" )
152153
153- DEFAULT_COMMANDS = (ls , execute , serve )
154+ DEFAULT_COMMANDS = (ls , execute , serve , enable )
154155
155156
156157def task_run_table (task_run : TaskRun ) -> Table :
@@ -168,3 +169,32 @@ def task_run_table(task_run: TaskRun) -> Table:
168169 table .add_row ("completed" , task_run .end .isoformat ())
169170 table .add_row ("duration ms" , str (task_run .duration_ms ))
170171 return table
172+
173+
174+ async def enable_task (task_manager : TaskManager , task : str , enable : bool ) -> None :
175+ await task_manager .broker .enable_task (task , enable = enable )
176+
177+
178+ async def tasks_table (task_manager : TaskManager ) -> Table :
179+ task_info = await task_manager .broker .get_tasks_info ()
180+ dynamic = {t .name : t for t in task_info }
181+ table = Table (title = "Tasks" )
182+ table .add_column ("Name" , style = "cyan" , no_wrap = True )
183+ table .add_column ("Enabled" )
184+ table .add_column ("Schedule" , style = "magenta" )
185+ table .add_column ("CPU bound" , style = "magenta" )
186+ table .add_column ("Timeout secs" , style = "green" )
187+ table .add_column ("Priority" , style = "magenta" )
188+ table .add_column ("Description" , style = "green" )
189+ for name in sorted (task_manager .registry ):
190+ task = task_manager .registry [name ]
191+ table .add_row (
192+ name ,
193+ ":white_check_mark:" if dynamic [name ].enabled else "[red]:x:" ,
194+ str (task .schedule ),
195+ ":white_check_mark:" if task .cpu_bound else "[red]:x:" ,
196+ str (task .timeout_seconds ),
197+ str (task .priority ),
198+ task .short_description ,
199+ )
200+ return table
0 commit comments