Skip to content

Commit 064f59f

Browse files
committed
chore: directory_prompt() improve not a file check, prompt earlier, make dest_dir more prominent
1 parent 9ea53a9 commit 064f59f

File tree

2 files changed

+23
-9
lines changed

2 files changed

+23
-9
lines changed

shiny/_main.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -592,6 +592,7 @@ def test(
592592
@click.option(
593593
"--dir",
594594
"-d",
595+
type=str,
595596
help="The destination directory, you will be prompted if this is not provided.",
596597
)
597598
@click.option(
@@ -605,12 +606,14 @@ def create(
605606
template: Optional[str] = None,
606607
mode: Optional[str] = None,
607608
github: Optional[str] = None,
608-
dir: Optional[Path] = None,
609+
dir: Optional[Path | str] = None,
609610
package_name: Optional[str] = None,
610611
) -> None:
611612
from ._template_utils import use_template_github, use_template_internal
612613

613-
if isinstance(dir, str):
614+
print(f"dir is {dir}")
615+
616+
if dir is not None:
614617
dir = Path(dir)
615618

616619
if github is not None:

shiny/_template_utils.py

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -317,6 +317,8 @@ def app_template_questions(
317317
if mode == "express" and not express_available:
318318
raise Exception("Express mode not available for that template.")
319319

320+
dest_dir = directory_prompt(dest_dir, template_dir.name)
321+
320322
if mode is None and express_available:
321323
mode = questionary.select(
322324
"Would you like to use Shiny Express?",
@@ -334,8 +336,6 @@ def app_template_questions(
334336
use_template_internal()
335337
return
336338

337-
dest_dir = directory_prompt(template_dir, dest_dir)
338-
339339
app_dir = copy_template_files(
340340
dest_dir,
341341
template_dir=template_dir,
@@ -404,7 +404,7 @@ def js_component_questions(
404404
Path(__file__).parent / "templates/package-templates" / component_type
405405
)
406406

407-
dest_dir = directory_prompt(template_dir, dest_dir)
407+
dest_dir = directory_prompt(dest_dir, package_name)
408408

409409
app_dir = copy_template_files(
410410
dest_dir,
@@ -437,21 +437,32 @@ def js_component_questions(
437437

438438

439439
def directory_prompt(
440-
template_dir: Path, dest_dir: Optional[Path | str | None] = None
440+
dest_dir: Optional[Path | str | None] = None,
441+
default_dir: Optional[str | None] = None,
441442
) -> Path:
442443
if dest_dir is not None:
443-
return Path(dest_dir)
444+
dest_dir = Path(dest_dir)
445+
446+
if dest_dir.exists() and dest_dir.is_file():
447+
click.echo(
448+
cli_danger(
449+
f"Error: Destination directory {cli_field(str(dest_dir))} is a file, not a directory."
450+
)
451+
)
452+
sys.exit(1)
453+
return dest_dir
444454

445455
app_dir = questionary.path(
446456
"Enter destination directory:",
447-
default=path_rel_wd(template_dir.name),
457+
default=path_rel_wd(default_dir) if default_dir is not None else "./",
448458
only_directories=True,
449459
).ask()
450460

451461
if app_dir is None:
452462
sys.exit(1)
453463

454-
return Path(app_dir)
464+
# Perform not-a-file check on the selected `app_dir`
465+
return directory_prompt(dest_dir=app_dir)
455466

456467

457468
def path_rel_wd(*path: str):

0 commit comments

Comments
 (0)