Skip to content

Commit e654d8c

Browse files
committed
command runner
1 parent dadb35e commit e654d8c

File tree

1 file changed

+34
-4
lines changed

1 file changed

+34
-4
lines changed

src/textual_dev/cli.py

Lines changed: 34 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
from importlib.metadata import version
99
from textual.constants import DEVTOOLS_HOST, DEVTOOLS_PORT
1010

11-
from .tools.run import exec_command, run_app
11+
from .tools.run import _is_python_path, exec_command, run_app
1212

1313
WINDOWS = platform.system() == "Windows"
1414
"""True if we're running on Windows."""
@@ -228,7 +228,7 @@ def _run_app(
228228

229229

230230
@run.command("serve")
231-
@click.argument("command")
231+
@click.argument("import_name", metavar="FILE or FILE:APP")
232232
@click.option("-h", "--host", type=str, default="localhost", help="Host to serve on")
233233
@click.option("-p", "--port", type=int, default=8000, help="Port of server")
234234
@click.option(
@@ -240,8 +240,25 @@ def _run_app(
240240
)
241241
@click.option("-u", "--url", type=str, default=None, help="Public URL")
242242
@click.option("--dev", type=bool, default=False, is_flag=True, help="Enable debug mode")
243+
@click.option(
244+
"-c",
245+
"--command",
246+
"command",
247+
type=bool,
248+
default=False,
249+
help="Run as command rather that a file / module.",
250+
is_flag=True,
251+
)
252+
@click.argument("extra_args", nargs=-1, type=click.UNPROCESSED)
243253
def serve(
244-
command: str, host: str, port: int, title: str, url: str | None, dev: bool
254+
import_name: str,
255+
host: str,
256+
port: int,
257+
title: str,
258+
url: str | None,
259+
dev: bool,
260+
extra_args: tuple[str],
261+
command: bool = False,
245262
) -> None:
246263
"""Run a local web server to serve the application.
247264
@@ -257,7 +274,20 @@ def serve(
257274
"""
258275
from textual_serve.server import Server
259276

260-
server = Server(command, host, port, title=title, public_url=url)
277+
import_name, *args = [*shlex.split(import_name, posix=not WINDOWS), *extra_args]
278+
279+
if command:
280+
run_args = shlex.join(args)
281+
run_command = f"{import_name} {run_args}"
282+
server = Server(run_command, host, port, title=title, public_url=url)
283+
else:
284+
if _is_python_path(import_name):
285+
run_command = f"python {import_name}"
286+
else:
287+
run_args = shlex.join(args)
288+
run_command = f"{import_name} {run_args}"
289+
server = Server(run_command, host, port, title=title, public_url=url)
290+
261291
server.serve(debug=dev)
262292

263293

0 commit comments

Comments
 (0)