fast-dev-cli 0.8.0__tar.gz → 0.8.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {fast_dev_cli-0.8.0 → fast_dev_cli-0.8.2}/PKG-INFO +1 -1
- {fast_dev_cli-0.8.0 → fast_dev_cli-0.8.2}/fast_dev_cli/cli.py +34 -13
- {fast_dev_cli-0.8.0 → fast_dev_cli-0.8.2}/pyproject.toml +2 -2
- fast_dev_cli-0.8.2/scripts/test.sh +6 -0
- fast_dev_cli-0.8.2/tests/test_runserver.py +82 -0
- fast_dev_cli-0.8.0/scripts/test.sh +0 -4
- fast_dev_cli-0.8.0/tests/test_runserver.py +0 -37
- {fast_dev_cli-0.8.0 → fast_dev_cli-0.8.2}/LICENSE +0 -0
- {fast_dev_cli-0.8.0 → fast_dev_cli-0.8.2}/README.md +0 -0
- {fast_dev_cli-0.8.0 → fast_dev_cli-0.8.2}/fast_dev_cli/__init__.py +0 -0
- {fast_dev_cli-0.8.0 → fast_dev_cli-0.8.2}/fast_dev_cli/__main__.py +0 -0
- {fast_dev_cli-0.8.0 → fast_dev_cli-0.8.2}/fast_dev_cli/py.typed +0 -0
- {fast_dev_cli-0.8.0 → fast_dev_cli-0.8.2}/pdm_build.py +0 -0
- {fast_dev_cli-0.8.0 → fast_dev_cli-0.8.2}/scripts/check.sh +0 -0
- {fast_dev_cli-0.8.0 → fast_dev_cli-0.8.2}/scripts/format.sh +0 -0
- {fast_dev_cli-0.8.0 → fast_dev_cli-0.8.2}/tests/__init__.py +0 -0
- {fast_dev_cli-0.8.0 → fast_dev_cli-0.8.2}/tests/conftest.py +0 -0
- {fast_dev_cli-0.8.0 → fast_dev_cli-0.8.2}/tests/test_bump.py +0 -0
- {fast_dev_cli-0.8.0 → fast_dev_cli-0.8.2}/tests/test_fast_test.py +0 -0
- {fast_dev_cli-0.8.0 → fast_dev_cli-0.8.2}/tests/test_functions.py +0 -0
- {fast_dev_cli-0.8.0 → fast_dev_cli-0.8.2}/tests/test_import.py +0 -0
- {fast_dev_cli-0.8.0 → fast_dev_cli-0.8.2}/tests/test_lint.py +0 -0
- {fast_dev_cli-0.8.0 → fast_dev_cli-0.8.2}/tests/test_sync.py +0 -0
- {fast_dev_cli-0.8.0 → fast_dev_cli-0.8.2}/tests/test_tag.py +0 -0
- {fast_dev_cli-0.8.0 → fast_dev_cli-0.8.2}/tests/test_upgrade.py +0 -0
- {fast_dev_cli-0.8.0 → fast_dev_cli-0.8.2}/tests/test_upload.py +0 -0
- {fast_dev_cli-0.8.0 → fast_dev_cli-0.8.2}/tests/test_version.py +0 -0
- {fast_dev_cli-0.8.0 → fast_dev_cli-0.8.2}/tests/utils.py +0 -0
|
@@ -12,15 +12,13 @@ from typing import TYPE_CHECKING, Literal, Optional, Type
|
|
|
12
12
|
|
|
13
13
|
import typer
|
|
14
14
|
from typer import Exit, Option, echo, secho
|
|
15
|
+
from typing_extensions import Annotated, Self
|
|
15
16
|
|
|
16
17
|
if sys.version_info >= (3, 11):
|
|
17
18
|
from enum import StrEnum
|
|
18
|
-
from typing import Self
|
|
19
19
|
else: # pragma: no cover
|
|
20
20
|
from enum import Enum
|
|
21
21
|
|
|
22
|
-
from typing_extensions import Self
|
|
23
|
-
|
|
24
22
|
class StrEnum(str, Enum):
|
|
25
23
|
__str__ = str.__str__
|
|
26
24
|
|
|
@@ -29,7 +27,7 @@ if TYPE_CHECKING: # pragma: no cover
|
|
|
29
27
|
from typer.models import OptionInfo
|
|
30
28
|
|
|
31
29
|
|
|
32
|
-
__version__ = "0.8.
|
|
30
|
+
__version__ = "0.8.2"
|
|
33
31
|
|
|
34
32
|
|
|
35
33
|
def parse_files(args: list[str] | tuple[str, ...]) -> list[str]:
|
|
@@ -239,27 +237,33 @@ class Project:
|
|
|
239
237
|
path_depth = 5
|
|
240
238
|
|
|
241
239
|
@staticmethod
|
|
242
|
-
def work_dir(name: str, parent: Path, depth: int) -> Path | None:
|
|
240
|
+
def work_dir(name: str, parent: Path, depth: int, be_file=False) -> Path | None:
|
|
243
241
|
for _ in range(depth):
|
|
244
|
-
if parent.joinpath(name).exists():
|
|
242
|
+
if (f := parent.joinpath(name)).exists():
|
|
243
|
+
if be_file:
|
|
244
|
+
return f
|
|
245
245
|
return parent
|
|
246
246
|
parent = parent.parent
|
|
247
247
|
return None
|
|
248
248
|
|
|
249
249
|
@classmethod
|
|
250
250
|
def get_work_dir(
|
|
251
|
-
cls: Type[Self],
|
|
251
|
+
cls: Type[Self],
|
|
252
|
+
name=TOML_FILE,
|
|
253
|
+
cwd: Path | None = None,
|
|
254
|
+
allow_cwd=False,
|
|
255
|
+
be_file=False,
|
|
252
256
|
) -> Path:
|
|
253
257
|
cwd = cwd or Path.cwd()
|
|
254
|
-
if d := cls.work_dir(name, cwd, cls.path_depth):
|
|
258
|
+
if d := cls.work_dir(name, cwd, cls.path_depth, be_file):
|
|
255
259
|
return d
|
|
256
260
|
if allow_cwd:
|
|
257
261
|
return cls.get_root_dir(cwd)
|
|
258
262
|
raise EnvError(f"{name} not found! Make sure this is a poetry project.")
|
|
259
263
|
|
|
260
264
|
@classmethod
|
|
261
|
-
def load_toml_text(cls: Type[Self]) -> str:
|
|
262
|
-
toml_file = cls.get_work_dir()
|
|
265
|
+
def load_toml_text(cls: Type[Self], name=TOML_FILE) -> str:
|
|
266
|
+
toml_file = cls.get_work_dir(name, be_file=True)
|
|
263
267
|
return toml_file.read_text("utf8")
|
|
264
268
|
|
|
265
269
|
@classmethod
|
|
@@ -662,10 +666,23 @@ def upload(
|
|
|
662
666
|
|
|
663
667
|
|
|
664
668
|
def dev(
|
|
665
|
-
port: int | None | "OptionInfo",
|
|
669
|
+
port: int | None | "OptionInfo",
|
|
670
|
+
host: str | None | "OptionInfo",
|
|
671
|
+
file: Optional[str] = None,
|
|
672
|
+
dry=False,
|
|
666
673
|
) -> None:
|
|
667
674
|
cmd = "fastapi dev"
|
|
668
|
-
|
|
675
|
+
no_port_yet = True
|
|
676
|
+
if file is not None:
|
|
677
|
+
try:
|
|
678
|
+
port = int(file) # type:ignore[arg-type]
|
|
679
|
+
except ValueError:
|
|
680
|
+
cmd += f" {file}"
|
|
681
|
+
else:
|
|
682
|
+
if port != 8000:
|
|
683
|
+
cmd += f" --{port=}"
|
|
684
|
+
no_port_yet = False
|
|
685
|
+
if no_port_yet and (port := getattr(port, "default", port)) and str(port) != "8000":
|
|
669
686
|
cmd += f" --port={port}"
|
|
670
687
|
if (host := getattr(host, "default", host)) and host not in (
|
|
671
688
|
"localhost",
|
|
@@ -677,12 +694,16 @@ def dev(
|
|
|
677
694
|
|
|
678
695
|
@cli.command(name="dev")
|
|
679
696
|
def runserver(
|
|
697
|
+
file_or_port: Annotated[Optional[str], typer.Argument()] = None,
|
|
680
698
|
port: Optional[int] = Option(None, "-p", "--port"),
|
|
681
699
|
host: Optional[str] = Option(None, "-h", "--host"),
|
|
682
700
|
dry: bool = Option(False, "--dry", help="Only print, not really run shell command"),
|
|
683
701
|
) -> None:
|
|
684
702
|
"""Start a fastapi server(only for fastapi>=0.111.0)"""
|
|
685
|
-
|
|
703
|
+
if file_or_port:
|
|
704
|
+
dev(port, host, file=file_or_port, dry=dry)
|
|
705
|
+
else:
|
|
706
|
+
dev(port, host, dry=dry)
|
|
686
707
|
|
|
687
708
|
|
|
688
709
|
if __name__ == "__main__": # pragma: no cover
|
|
@@ -38,7 +38,7 @@ dependencies = [
|
|
|
38
38
|
"bumpversion >=0.6.0,<0.7",
|
|
39
39
|
"pytest >=8.2.0,<9",
|
|
40
40
|
]
|
|
41
|
-
version = "0.8.
|
|
41
|
+
version = "0.8.2"
|
|
42
42
|
|
|
43
43
|
[project.urls]
|
|
44
44
|
Homepage = "https://github.com/waketzheng/fast-dev-cli"
|
|
@@ -66,7 +66,7 @@ source-includes = [
|
|
|
66
66
|
|
|
67
67
|
[tool.pdm.dev-dependencies]
|
|
68
68
|
dev = [
|
|
69
|
-
"-e file:///${PROJECT_ROOT}/#egg=fast-dev-cli[
|
|
69
|
+
"-e file:///${PROJECT_ROOT}/#egg=fast-dev-cli[all]",
|
|
70
70
|
]
|
|
71
71
|
|
|
72
72
|
[tool.waketzheng._internal-slim-build.packages.fastdevcli-slim.project]
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
from fast_dev_cli.cli import dev, run_and_echo, runserver
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
def test_runserver(capsys):
|
|
5
|
+
runserver(dry=True)
|
|
6
|
+
out = capsys.readouterr().out.strip()
|
|
7
|
+
assert "fastapi dev" == out.replace("--> ", "")
|
|
8
|
+
runserver(port=8000, dry=True)
|
|
9
|
+
out = capsys.readouterr().out.strip()
|
|
10
|
+
assert "fastapi dev" == out.replace("--> ", "")
|
|
11
|
+
runserver(port=9000, dry=True)
|
|
12
|
+
out = capsys.readouterr().out.strip()
|
|
13
|
+
assert "fastapi dev --port=9000" == out.replace("--> ", "")
|
|
14
|
+
runserver(host="0.0.0.0", dry=True)
|
|
15
|
+
out = capsys.readouterr().out.strip()
|
|
16
|
+
assert "fastapi dev --host=0.0.0.0" == out.replace("--> ", "")
|
|
17
|
+
runserver(port=9000, host="0.0.0.0", dry=True)
|
|
18
|
+
out = capsys.readouterr().out.strip()
|
|
19
|
+
assert "fastapi dev --port=9000 --host=0.0.0.0" == out.replace("--> ", "")
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def test_dev(capsys):
|
|
23
|
+
dev(None, None, dry=True)
|
|
24
|
+
out = capsys.readouterr().out.strip()
|
|
25
|
+
assert "fastapi dev" == out.replace("--> ", "")
|
|
26
|
+
dev(port=8000, host="", dry=True)
|
|
27
|
+
out = capsys.readouterr().out.strip()
|
|
28
|
+
assert "fastapi dev" == out.replace("--> ", "")
|
|
29
|
+
dev(port=9000, host=None, dry=True)
|
|
30
|
+
out = capsys.readouterr().out.strip()
|
|
31
|
+
assert "fastapi dev --port=9000" == out.replace("--> ", "")
|
|
32
|
+
dev(8000, host="0.0.0.0", dry=True)
|
|
33
|
+
out = capsys.readouterr().out.strip()
|
|
34
|
+
assert "fastapi dev --host=0.0.0.0" == out.replace("--> ", "")
|
|
35
|
+
dev(port=9000, host="0.0.0.0", dry=True)
|
|
36
|
+
out = capsys.readouterr().out.strip()
|
|
37
|
+
assert "fastapi dev --port=9000 --host=0.0.0.0" == out.replace("--> ", "")
|
|
38
|
+
dev(8001, host="0.0.0.0", dry=True)
|
|
39
|
+
out = capsys.readouterr().out.strip()
|
|
40
|
+
assert "fastapi dev --port=8001 --host=0.0.0.0" == out.replace("--> ", "")
|
|
41
|
+
dev(None, file="8001", host="0.0.0.0", dry=True)
|
|
42
|
+
out = capsys.readouterr().out.strip()
|
|
43
|
+
assert "fastapi dev --port=8001 --host=0.0.0.0" == out.replace("--> ", "")
|
|
44
|
+
dev(None, file="main.py", host="0.0.0.0", dry=True)
|
|
45
|
+
out = capsys.readouterr().out.strip()
|
|
46
|
+
assert "fastapi dev main.py --host=0.0.0.0" == out.replace("--> ", "")
|
|
47
|
+
dev(8001, file="main.py", host="0.0.0.0", dry=True)
|
|
48
|
+
out = capsys.readouterr().out.strip()
|
|
49
|
+
assert "fastapi dev main.py --port=8001 --host=0.0.0.0" == out.replace("--> ", "")
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
def test_fast_dev(tmp_path):
|
|
53
|
+
out = tmp_path / "a.txt"
|
|
54
|
+
run_and_echo(f"fast dev 9000 --dry > {out}", verbose=False)
|
|
55
|
+
assert "fastapi dev --port=9000" in out.read_text()
|
|
56
|
+
run_and_echo(f"fast dev main.py --dry > {out}", verbose=False)
|
|
57
|
+
assert "fastapi dev main.py" in out.read_text()
|
|
58
|
+
run_and_echo(f"fast dev main.py --port=9000 --dry > {out}", verbose=False)
|
|
59
|
+
assert "fastapi dev main.py --port=9000" in out.read_text()
|
|
60
|
+
run_and_echo(
|
|
61
|
+
f"fast dev main.py --port=9000 --host=0.0.0.0 --dry > {out}", verbose=False
|
|
62
|
+
)
|
|
63
|
+
assert "fastapi dev main.py --port=9000 --host=0.0.0.0" in out.read_text()
|
|
64
|
+
run_and_echo(f"fast dev 9000 --host=0.0.0.0 --dry > {out}", verbose=False)
|
|
65
|
+
assert "fastapi dev --port=9000 --host=0.0.0.0" in out.read_text()
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
def test_run_by_module(tmp_path):
|
|
69
|
+
out = tmp_path / "b.txt"
|
|
70
|
+
fast = "python -m fast_dev_cli"
|
|
71
|
+
run_and_echo(f"{fast} dev 9000 --dry > {out}", verbose=False)
|
|
72
|
+
assert "fastapi dev --port=9000" in out.read_text()
|
|
73
|
+
run_and_echo(f"{fast} dev main.py --dry > {out}", verbose=False)
|
|
74
|
+
assert "fastapi dev main.py" in out.read_text()
|
|
75
|
+
run_and_echo(f"{fast} dev main.py --port=9000 --dry > {out}", verbose=False)
|
|
76
|
+
assert "fastapi dev main.py --port=9000" in out.read_text()
|
|
77
|
+
run_and_echo(
|
|
78
|
+
f"{fast} dev main.py --port=9000 --host=0.0.0.0 --dry > {out}", verbose=False
|
|
79
|
+
)
|
|
80
|
+
assert "fastapi dev main.py --port=9000 --host=0.0.0.0" in out.read_text()
|
|
81
|
+
run_and_echo(f"{fast} dev 9000 --host=0.0.0.0 --dry > {out}", verbose=False)
|
|
82
|
+
assert "fastapi dev --port=9000 --host=0.0.0.0" in out.read_text()
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
from fast_dev_cli.cli import dev, runserver
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
def test_runserver(capsys):
|
|
5
|
-
runserver(dry=True)
|
|
6
|
-
out = capsys.readouterr().out.strip()
|
|
7
|
-
assert "fastapi dev" == out.replace("--> ", "")
|
|
8
|
-
runserver(port=8000, dry=True)
|
|
9
|
-
out = capsys.readouterr().out.strip()
|
|
10
|
-
assert "fastapi dev" == out.replace("--> ", "")
|
|
11
|
-
runserver(port=9000, dry=True)
|
|
12
|
-
out = capsys.readouterr().out.strip()
|
|
13
|
-
assert "fastapi dev --port=9000" == out.replace("--> ", "")
|
|
14
|
-
runserver(host="0.0.0.0", dry=True)
|
|
15
|
-
out = capsys.readouterr().out.strip()
|
|
16
|
-
assert "fastapi dev --host=0.0.0.0" == out.replace("--> ", "")
|
|
17
|
-
runserver(port=9000, host="0.0.0.0", dry=True)
|
|
18
|
-
out = capsys.readouterr().out.strip()
|
|
19
|
-
assert "fastapi dev --port=9000 --host=0.0.0.0" == out.replace("--> ", "")
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
def test_dev(capsys):
|
|
23
|
-
dev(None, None, dry=True)
|
|
24
|
-
out = capsys.readouterr().out.strip()
|
|
25
|
-
assert "fastapi dev" == out.replace("--> ", "")
|
|
26
|
-
dev(port=8000, host="", dry=True)
|
|
27
|
-
out = capsys.readouterr().out.strip()
|
|
28
|
-
assert "fastapi dev" == out.replace("--> ", "")
|
|
29
|
-
dev(port=9000, host=None, dry=True)
|
|
30
|
-
out = capsys.readouterr().out.strip()
|
|
31
|
-
assert "fastapi dev --port=9000" == out.replace("--> ", "")
|
|
32
|
-
dev(8000, host="0.0.0.0", dry=True)
|
|
33
|
-
out = capsys.readouterr().out.strip()
|
|
34
|
-
assert "fastapi dev --host=0.0.0.0" == out.replace("--> ", "")
|
|
35
|
-
dev(port=9000, host="0.0.0.0", dry=True)
|
|
36
|
-
out = capsys.readouterr().out.strip()
|
|
37
|
-
assert "fastapi dev --port=9000 --host=0.0.0.0" == out.replace("--> ", "")
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|