File tree Expand file tree Collapse file tree 3 files changed +31
-5
lines changed Expand file tree Collapse file tree 3 files changed +31
-5
lines changed Original file line number Diff line number Diff line change 21
21
22
22
23
23
class DevConsoleHeader :
24
- def __init__ (self , verbose : bool = False ) -> None :
24
+ """Renderable representing the header at the top of the console
25
+
26
+ Args:
27
+ port: The port the devtools server is running on.
28
+ verbose: Whether verbose logging is enabled
29
+ """
30
+
31
+ def __init__ (self , port : int | None = None , verbose : bool = False ) -> None :
32
+ self .port = port
25
33
self .verbose = verbose
26
34
27
35
def __rich_console__ (
28
36
self , console : Console , options : ConsoleOptions
29
37
) -> RenderResult :
30
38
preamble = Text .from_markup (
31
39
f"[bold]Textual Development Console [magenta]v{ version ('textual' )} \n "
32
- "[magenta]Run a Textual app with [reverse]textual run --dev my_app.py [/] to connect.\n "
40
+ f "[magenta]Run a Textual app with [reverse]{ self . _run_command () } [/] to connect.\n "
33
41
"[magenta]Press [reverse]Ctrl+C[/] to quit."
34
42
)
35
43
if self .verbose :
@@ -45,6 +53,17 @@ def __rich_console__(
45
53
yield from line
46
54
yield new_line
47
55
56
+ def _run_command (self ) -> str :
57
+ """Get help text for the user to connect to the console
58
+
59
+ Returns:
60
+ The command a user can run to connect a Textual app to the dev server
61
+ """
62
+ if self .port :
63
+ return f"textual run --port { self .port } --dev my_app.py"
64
+ else :
65
+ return "textual run --dev my_app.py"
66
+
48
67
49
68
class DevConsoleLog :
50
69
"""Renderable representing a single log message
Original file line number Diff line number Diff line change @@ -41,7 +41,7 @@ async def _on_startup(app: Application) -> None:
41
41
def _run_devtools (
42
42
verbose : bool , exclude : list [str ] | None = None , port : int | None = None
43
43
) -> None :
44
- app = _make_devtools_aiohttp_app (verbose = verbose , exclude = exclude )
44
+ app = _make_devtools_aiohttp_app (port = port , verbose = verbose , exclude = exclude )
45
45
46
46
def noop_print (_ : str ) -> None :
47
47
pass
@@ -68,6 +68,7 @@ def noop_print(_: str) -> None:
68
68
69
69
def _make_devtools_aiohttp_app (
70
70
size_change_poll_delay_secs : float = DEFAULT_SIZE_CHANGE_POLL_DELAY_SECONDS ,
71
+ port : int | None = None ,
71
72
verbose : bool = False ,
72
73
exclude : list [str ] | None = None ,
73
74
) -> Application :
@@ -78,7 +79,10 @@ def _make_devtools_aiohttp_app(
78
79
79
80
app ["verbose" ] = verbose
80
81
app ["service" ] = DevtoolsService (
81
- update_frequency = size_change_poll_delay_secs , verbose = verbose , exclude = exclude
82
+ update_frequency = size_change_poll_delay_secs ,
83
+ port = port ,
84
+ verbose = verbose ,
85
+ exclude = exclude ,
82
86
)
83
87
84
88
app .add_routes (
Original file line number Diff line number Diff line change @@ -30,17 +30,20 @@ class DevtoolsService:
30
30
def __init__ (
31
31
self ,
32
32
update_frequency : float ,
33
+ port : int | None = None ,
33
34
verbose : bool = False ,
34
35
exclude : list [str ] | None = None ,
35
36
) -> None :
36
37
"""
37
38
Args:
38
39
update_frequency: The number of seconds to wait between
39
40
sending updates of the console size to connected clients.
41
+ port: The port the devtools server is running on.
40
42
verbose: Enable verbose logging on client.
41
43
exclude: List of log groups to exclude from output.
42
44
"""
43
45
self .update_frequency = update_frequency
46
+ self .port = port
44
47
self .verbose = verbose
45
48
self .exclude = {name .upper () for name in exclude } if exclude else set ()
46
49
self .console = Console ()
@@ -50,7 +53,7 @@ def __init__(
50
53
async def start (self ) -> None :
51
54
"""Starts devtools tasks"""
52
55
self .size_poll_task = asyncio .create_task (self ._console_size_poller ())
53
- self .console .print (DevConsoleHeader (verbose = self .verbose ))
56
+ self .console .print (DevConsoleHeader (port = self . port , verbose = self .verbose ))
54
57
55
58
@property
56
59
def clients_connected (self ) -> bool :
You can’t perform that action at this time.
0 commit comments