fast-dev-cli 0.8.1__tar.gz → 0.8.3__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.
Files changed (29) hide show
  1. {fast_dev_cli-0.8.1 → fast_dev_cli-0.8.3}/PKG-INFO +2 -3
  2. fast_dev_cli-0.8.3/fast_dev_cli/__init__.py +1 -0
  3. fast_dev_cli-0.8.3/fast_dev_cli/__main__.py +3 -0
  4. {fast_dev_cli-0.8.1 → fast_dev_cli-0.8.3}/fast_dev_cli/cli.py +38 -18
  5. {fast_dev_cli-0.8.1 → fast_dev_cli-0.8.3}/pyproject.toml +6 -6
  6. {fast_dev_cli-0.8.1 → fast_dev_cli-0.8.3}/tests/test_bump.py +1 -1
  7. fast_dev_cli-0.8.3/tests/test_runserver.py +82 -0
  8. fast_dev_cli-0.8.1/fast_dev_cli/__init__.py +0 -31
  9. fast_dev_cli-0.8.1/fast_dev_cli/__main__.py +0 -3
  10. fast_dev_cli-0.8.1/tests/test_runserver.py +0 -46
  11. {fast_dev_cli-0.8.1 → fast_dev_cli-0.8.3}/LICENSE +0 -0
  12. {fast_dev_cli-0.8.1 → fast_dev_cli-0.8.3}/README.md +0 -0
  13. {fast_dev_cli-0.8.1 → fast_dev_cli-0.8.3}/fast_dev_cli/py.typed +0 -0
  14. {fast_dev_cli-0.8.1 → fast_dev_cli-0.8.3}/pdm_build.py +0 -0
  15. {fast_dev_cli-0.8.1 → fast_dev_cli-0.8.3}/scripts/check.sh +0 -0
  16. {fast_dev_cli-0.8.1 → fast_dev_cli-0.8.3}/scripts/format.sh +0 -0
  17. {fast_dev_cli-0.8.1 → fast_dev_cli-0.8.3}/scripts/test.sh +0 -0
  18. {fast_dev_cli-0.8.1 → fast_dev_cli-0.8.3}/tests/__init__.py +0 -0
  19. {fast_dev_cli-0.8.1 → fast_dev_cli-0.8.3}/tests/conftest.py +0 -0
  20. {fast_dev_cli-0.8.1 → fast_dev_cli-0.8.3}/tests/test_fast_test.py +0 -0
  21. {fast_dev_cli-0.8.1 → fast_dev_cli-0.8.3}/tests/test_functions.py +0 -0
  22. {fast_dev_cli-0.8.1 → fast_dev_cli-0.8.3}/tests/test_import.py +0 -0
  23. {fast_dev_cli-0.8.1 → fast_dev_cli-0.8.3}/tests/test_lint.py +0 -0
  24. {fast_dev_cli-0.8.1 → fast_dev_cli-0.8.3}/tests/test_sync.py +0 -0
  25. {fast_dev_cli-0.8.1 → fast_dev_cli-0.8.3}/tests/test_tag.py +0 -0
  26. {fast_dev_cli-0.8.1 → fast_dev_cli-0.8.3}/tests/test_upgrade.py +0 -0
  27. {fast_dev_cli-0.8.1 → fast_dev_cli-0.8.3}/tests/test_upload.py +0 -0
  28. {fast_dev_cli-0.8.1 → fast_dev_cli-0.8.3}/tests/test_version.py +0 -0
  29. {fast_dev_cli-0.8.1 → fast_dev_cli-0.8.3}/tests/utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: fast-dev-cli
3
- Version: 0.8.1
3
+ Version: 0.8.3
4
4
  Summary: Python project development tool.
5
5
  Author-Email: Waket Zheng <waketzheng@gmail.com>>
6
6
  Classifier: Development Status :: 4 - Beta
@@ -18,9 +18,8 @@ Classifier: Topic :: Software Development
18
18
  Classifier: Typing :: Typed
19
19
  Classifier: License :: OSI Approved :: MIT License
20
20
  Project-URL: Homepage, https://github.com/waketzheng/fast-dev-cli
21
- Requires-Python: <3.13,>=3.10
21
+ Requires-Python: <4,>=3.10
22
22
  Requires-Dist: typer<0.13,>=0.12.3
23
- Requires-Dist: typing-extensions>=4.8.0
24
23
  Requires-Dist: coverage<8,>=7.5.1
25
24
  Requires-Dist: ruff<0.5,>=0.4.4
26
25
  Requires-Dist: mypy<2,>=1.10.0
@@ -0,0 +1 @@
1
+ __version__ = "0.8.3"
@@ -0,0 +1,3 @@
1
+ from .cli import main
2
+
3
+ main()
@@ -8,28 +8,30 @@ import sys
8
8
  from functools import cached_property
9
9
  from pathlib import Path
10
10
  from subprocess import CompletedProcess
11
- from typing import TYPE_CHECKING, Literal, Optional, Type
11
+ from typing import 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
+ from typer.models import OptionInfo
16
+
17
+ try:
18
+ from . import __version__
19
+ except ImportError: # pragma: no cover
20
+ from fast_dev_cli import __version__
16
21
 
17
22
  if sys.version_info >= (3, 11):
18
23
  from enum import StrEnum
24
+ from typing import Annotated, Self
19
25
  else: # pragma: no cover
20
26
  from enum import Enum
21
27
 
28
+ from typing_extensions import Annotated, Self
29
+
22
30
  class StrEnum(str, Enum):
23
31
  __str__ = str.__str__
24
32
 
25
33
 
26
- if TYPE_CHECKING: # pragma: no cover
27
- from typer.models import OptionInfo
28
-
29
-
30
- __version__ = "0.8.1"
31
-
32
-
34
+ # TODO: use Optional Argument instead
33
35
  def parse_files(args: list[str] | tuple[str, ...]) -> list[str]:
34
36
  return [i for i in args if not i.startswith("-")]
35
37
 
@@ -96,7 +98,7 @@ def get_current_version(
96
98
  return capture_cmd_output(cmd)
97
99
 
98
100
 
99
- def _ensure_bool(value: bool | "OptionInfo") -> bool:
101
+ def _ensure_bool(value: bool | OptionInfo) -> bool:
100
102
  if not isinstance(value, bool):
101
103
  value = getattr(value, "default", False)
102
104
  return value
@@ -202,7 +204,7 @@ class BumpUp(DryRun):
202
204
  @cli.command()
203
205
  def version() -> None:
204
206
  """Show the version of this tool"""
205
- echo(__version__)
207
+ echo(f"Fast Dev Cli version: {__version__}")
206
208
 
207
209
 
208
210
  @cli.command(name="bump")
@@ -666,10 +668,23 @@ def upload(
666
668
 
667
669
 
668
670
  def dev(
669
- port: int | None | "OptionInfo", host: str | None | "OptionInfo", dry=False
671
+ port: int | None | OptionInfo,
672
+ host: str | None | OptionInfo,
673
+ file: Optional[str] = None,
674
+ dry=False,
670
675
  ) -> None:
671
676
  cmd = "fastapi dev"
672
- if (port := getattr(port, "default", port)) and port != 8000:
677
+ no_port_yet = True
678
+ if file is not None:
679
+ try:
680
+ port = int(file) # type:ignore[arg-type]
681
+ except ValueError:
682
+ cmd += f" {file}"
683
+ else:
684
+ if port != 8000:
685
+ cmd += f" --{port=}"
686
+ no_port_yet = False
687
+ if no_port_yet and (port := getattr(port, "default", port)) and str(port) != "8000":
673
688
  cmd += f" --port={port}"
674
689
  if (host := getattr(host, "default", host)) and host not in (
675
690
  "localhost",
@@ -681,16 +696,21 @@ def dev(
681
696
 
682
697
  @cli.command(name="dev")
683
698
  def runserver(
684
- serve_port: Annotated[Optional[int], typer.Argument()] = None,
699
+ file_or_port: Annotated[Optional[str], typer.Argument()] = None,
685
700
  port: Optional[int] = Option(None, "-p", "--port"),
686
701
  host: Optional[str] = Option(None, "-h", "--host"),
687
702
  dry: bool = Option(False, "--dry", help="Only print, not really run shell command"),
688
703
  ) -> None:
689
704
  """Start a fastapi server(only for fastapi>=0.111.0)"""
690
- if serve_port:
691
- port = serve_port
692
- dev(port, host, dry=dry)
705
+ if file_or_port:
706
+ dev(port, host, file=file_or_port, dry=dry)
707
+ else:
708
+ dev(port, host, dry=dry)
693
709
 
694
710
 
695
- if __name__ == "__main__": # pragma: no cover
711
+ def main() -> None:
696
712
  cli()
713
+
714
+
715
+ if __name__ == "__main__": # pragma: no cover
716
+ main()
@@ -12,7 +12,7 @@ authors = [
12
12
  { name = "Waket Zheng", email = "waketzheng@gmail.com>" },
13
13
  ]
14
14
  readme = "README.md"
15
- requires-python = ">=3.10,<3.13"
15
+ requires-python = ">=3.10,<4"
16
16
  classifiers = [
17
17
  "Development Status :: 4 - Beta",
18
18
  "Intended Audience :: Developers",
@@ -31,14 +31,13 @@ classifiers = [
31
31
  ]
32
32
  dependencies = [
33
33
  "typer>=0.12.3,<0.13",
34
- "typing-extensions>=4.8.0",
35
34
  "coverage >=7.5.1,<8",
36
35
  "ruff >=0.4.4,<0.5",
37
36
  "mypy >=1.10.0,<2",
38
37
  "bumpversion >=0.6.0,<0.7",
39
38
  "pytest >=8.2.0,<9",
40
39
  ]
41
- version = "0.8.1"
40
+ version = "0.8.3"
42
41
 
43
42
  [project.urls]
44
43
  Homepage = "https://github.com/waketzheng/fast-dev-cli"
@@ -50,14 +49,14 @@ all = [
50
49
  ]
51
50
 
52
51
  [project.scripts]
53
- fast = "fast_dev_cli:cli.cli"
52
+ fast = "fast_dev_cli:cli.main"
54
53
 
55
54
  [tool.pdm]
56
55
  distribution = true
57
56
 
58
57
  [tool.pdm.version]
59
58
  source = "file"
60
- path = "fast_dev_cli/cli.py"
59
+ path = "fast_dev_cli/__init__.py"
61
60
 
62
61
  [tool.pdm.build]
63
62
  source-includes = [
@@ -84,7 +83,7 @@ all = [
84
83
  ]
85
84
 
86
85
  [tool.waketzheng._internal-slim-build.packages.fast-dev-cli.project.scripts]
87
- fast = "fast_dev_cli:cli.cli"
86
+ fast = "fast_dev_cli:cli.main"
88
87
 
89
88
  [tool.pytest.ini_options]
90
89
  testpaths = [
@@ -112,6 +111,7 @@ exclude_lines = [
112
111
  ]
113
112
  omit = [
114
113
  "tests/*",
114
+ "fast_dev_cli/__main__.py",
115
115
  ]
116
116
 
117
117
  [tool.mypy]
@@ -62,7 +62,7 @@ def test_bump(
62
62
  ):
63
63
  version = get_current_version()
64
64
  patch_without_commit, patch_with_commit, minor_with_commit = _bump_commands(
65
- version, "fast_dev_cli/cli.py"
65
+ version, "fast_dev_cli/__init__.py"
66
66
  )
67
67
  stream = StringIO()
68
68
  with redirect_stdout(stream):
@@ -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,31 +0,0 @@
1
- from .cli import (
2
- __version__,
3
- bump,
4
- bump_version,
5
- check,
6
- lint,
7
- make_style,
8
- only_check,
9
- sync,
10
- tag,
11
- test,
12
- upgrade,
13
- upload,
14
- version,
15
- )
16
-
17
- __all__ = (
18
- "__version__",
19
- "version",
20
- "bump_version",
21
- "bump",
22
- "lint",
23
- "check",
24
- "upload",
25
- "test",
26
- "sync",
27
- "tag",
28
- "upgrade",
29
- "make_style",
30
- "only_check",
31
- )
@@ -1,3 +0,0 @@
1
- from .cli import cli
2
-
3
- cli()
@@ -1,46 +0,0 @@
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
-
42
-
43
- def test_fast_dev(tmp_path):
44
- out = tmp_path / "a.txt"
45
- run_and_echo(f"fast dev 9000 --dry > {out}", verbose=False)
46
- assert "fastapi dev --port=9000" in out.read_text()
File without changes
File without changes
File without changes