fastapi-cli 0.0.21__tar.gz → 0.0.23__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 (74) hide show
  1. {fastapi_cli-0.0.21 → fastapi_cli-0.0.23}/PKG-INFO +4 -5
  2. {fastapi_cli-0.0.21 → fastapi_cli-0.0.23}/pyproject.toml +7 -8
  3. fastapi_cli-0.0.23/src/fastapi_cli/__init__.py +1 -0
  4. {fastapi_cli-0.0.21 → fastapi_cli-0.0.23}/src/fastapi_cli/cli.py +18 -18
  5. {fastapi_cli-0.0.21 → fastapi_cli-0.0.23}/src/fastapi_cli/config.py +3 -3
  6. {fastapi_cli-0.0.21 → fastapi_cli-0.0.23}/src/fastapi_cli/discover.py +2 -3
  7. {fastapi_cli-0.0.21 → fastapi_cli-0.0.23}/src/fastapi_cli/logging.py +1 -4
  8. fastapi_cli-0.0.21/src/fastapi_cli/__init__.py +0 -1
  9. {fastapi_cli-0.0.21 → fastapi_cli-0.0.23}/LICENSE +0 -0
  10. {fastapi_cli-0.0.21 → fastapi_cli-0.0.23}/README.md +0 -0
  11. {fastapi_cli-0.0.21 → fastapi_cli-0.0.23}/pdm_build.py +0 -0
  12. {fastapi_cli-0.0.21 → fastapi_cli-0.0.23}/scripts/format.sh +0 -0
  13. {fastapi_cli-0.0.21 → fastapi_cli-0.0.23}/scripts/lint.sh +0 -0
  14. {fastapi_cli-0.0.21 → fastapi_cli-0.0.23}/scripts/test-cov-html.sh +0 -0
  15. {fastapi_cli-0.0.21 → fastapi_cli-0.0.23}/scripts/test.sh +0 -0
  16. {fastapi_cli-0.0.21 → fastapi_cli-0.0.23}/src/fastapi_cli/__main__.py +0 -0
  17. {fastapi_cli-0.0.21 → fastapi_cli-0.0.23}/src/fastapi_cli/exceptions.py +0 -0
  18. {fastapi_cli-0.0.21 → fastapi_cli-0.0.23}/src/fastapi_cli/py.typed +0 -0
  19. {fastapi_cli-0.0.21 → fastapi_cli-0.0.23}/src/fastapi_cli/utils/__init__.py +0 -0
  20. {fastapi_cli-0.0.21 → fastapi_cli-0.0.23}/src/fastapi_cli/utils/cli.py +0 -0
  21. {fastapi_cli-0.0.21 → fastapi_cli-0.0.23}/tests/__init__.py +0 -0
  22. {fastapi_cli-0.0.21 → fastapi_cli-0.0.23}/tests/assets/broken_package/mod/__init__.py +0 -0
  23. {fastapi_cli-0.0.21 → fastapi_cli-0.0.23}/tests/assets/broken_package/mod/app.py +0 -0
  24. {fastapi_cli-0.0.21 → fastapi_cli-0.0.23}/tests/assets/broken_package/utils.py +0 -0
  25. {fastapi_cli-0.0.21 → fastapi_cli-0.0.23}/tests/assets/default_files/default_api/api.py +0 -0
  26. {fastapi_cli-0.0.21 → fastapi_cli-0.0.23}/tests/assets/default_files/default_app/api.py +0 -0
  27. {fastapi_cli-0.0.21 → fastapi_cli-0.0.23}/tests/assets/default_files/default_app/app.py +0 -0
  28. {fastapi_cli-0.0.21 → fastapi_cli-0.0.23}/tests/assets/default_files/default_app_dir_api/app/__init__.py +0 -0
  29. {fastapi_cli-0.0.21 → fastapi_cli-0.0.23}/tests/assets/default_files/default_app_dir_api/app/api.py +0 -0
  30. {fastapi_cli-0.0.21 → fastapi_cli-0.0.23}/tests/assets/default_files/default_app_dir_app/app/__init__.py +0 -0
  31. {fastapi_cli-0.0.21 → fastapi_cli-0.0.23}/tests/assets/default_files/default_app_dir_app/app/api.py +0 -0
  32. {fastapi_cli-0.0.21 → fastapi_cli-0.0.23}/tests/assets/default_files/default_app_dir_app/app/app.py +0 -0
  33. {fastapi_cli-0.0.21 → fastapi_cli-0.0.23}/tests/assets/default_files/default_app_dir_main/app/__init__.py +0 -0
  34. {fastapi_cli-0.0.21 → fastapi_cli-0.0.23}/tests/assets/default_files/default_app_dir_main/app/api.py +0 -0
  35. {fastapi_cli-0.0.21 → fastapi_cli-0.0.23}/tests/assets/default_files/default_app_dir_main/app/app.py +0 -0
  36. {fastapi_cli-0.0.21 → fastapi_cli-0.0.23}/tests/assets/default_files/default_app_dir_main/app/main.py +0 -0
  37. {fastapi_cli-0.0.21 → fastapi_cli-0.0.23}/tests/assets/default_files/default_app_dir_non_default/app/__init__.py +0 -0
  38. {fastapi_cli-0.0.21 → fastapi_cli-0.0.23}/tests/assets/default_files/default_app_dir_non_default/app/nondefault.py +0 -0
  39. {fastapi_cli-0.0.21 → fastapi_cli-0.0.23}/tests/assets/default_files/default_main/api.py +0 -0
  40. {fastapi_cli-0.0.21 → fastapi_cli-0.0.23}/tests/assets/default_files/default_main/app.py +0 -0
  41. {fastapi_cli-0.0.21 → fastapi_cli-0.0.23}/tests/assets/default_files/default_main/main.py +0 -0
  42. {fastapi_cli-0.0.21 → fastapi_cli-0.0.23}/tests/assets/default_files/non_default/nonstandard.py +0 -0
  43. {fastapi_cli-0.0.21 → fastapi_cli-0.0.23}/tests/assets/nested_package/__init__.py +0 -0
  44. {fastapi_cli-0.0.21 → fastapi_cli-0.0.23}/tests/assets/nested_package/package/__init__.py +0 -0
  45. {fastapi_cli-0.0.21 → fastapi_cli-0.0.23}/tests/assets/nested_package/package/core/__init__.py +0 -0
  46. {fastapi_cli-0.0.21 → fastapi_cli-0.0.23}/tests/assets/nested_package/package/core/utils.py +0 -0
  47. {fastapi_cli-0.0.21 → fastapi_cli-0.0.23}/tests/assets/nested_package/package/mod/__init__.py +0 -0
  48. {fastapi_cli-0.0.21 → fastapi_cli-0.0.23}/tests/assets/nested_package/package/mod/api.py +0 -0
  49. {fastapi_cli-0.0.21 → fastapi_cli-0.0.23}/tests/assets/nested_package/package/mod/app.py +0 -0
  50. {fastapi_cli-0.0.21 → fastapi_cli-0.0.23}/tests/assets/nested_package/package/mod/other.py +0 -0
  51. {fastapi_cli-0.0.21 → fastapi_cli-0.0.23}/tests/assets/package/__init__.py +0 -0
  52. {fastapi_cli-0.0.21 → fastapi_cli-0.0.23}/tests/assets/package/core/__init__.py +0 -0
  53. {fastapi_cli-0.0.21 → fastapi_cli-0.0.23}/tests/assets/package/core/utils.py +0 -0
  54. {fastapi_cli-0.0.21 → fastapi_cli-0.0.23}/tests/assets/package/mod/__init__.py +0 -0
  55. {fastapi_cli-0.0.21 → fastapi_cli-0.0.23}/tests/assets/package/mod/api.py +0 -0
  56. {fastapi_cli-0.0.21 → fastapi_cli-0.0.23}/tests/assets/package/mod/app.py +0 -0
  57. {fastapi_cli-0.0.21 → fastapi_cli-0.0.23}/tests/assets/package/mod/other.py +0 -0
  58. {fastapi_cli-0.0.21 → fastapi_cli-0.0.23}/tests/assets/pyproject_config/another_module.py +0 -0
  59. {fastapi_cli-0.0.21 → fastapi_cli-0.0.23}/tests/assets/pyproject_config/my_module.py +0 -0
  60. {fastapi_cli-0.0.21 → fastapi_cli-0.0.23}/tests/assets/pyproject_config/pyproject.toml +0 -0
  61. {fastapi_cli-0.0.21 → fastapi_cli-0.0.23}/tests/assets/single_file_api.py +0 -0
  62. {fastapi_cli-0.0.21 → fastapi_cli-0.0.23}/tests/assets/single_file_app.py +0 -0
  63. {fastapi_cli-0.0.21 → fastapi_cli-0.0.23}/tests/assets/single_file_other.py +0 -0
  64. {fastapi_cli-0.0.21 → fastapi_cli-0.0.23}/tests/conftest.py +0 -0
  65. {fastapi_cli-0.0.21 → fastapi_cli-0.0.23}/tests/test_cli.py +0 -0
  66. {fastapi_cli-0.0.21 → fastapi_cli-0.0.23}/tests/test_cli_pyproject.py +0 -0
  67. {fastapi_cli-0.0.21 → fastapi_cli-0.0.23}/tests/test_discover.py +0 -0
  68. {fastapi_cli-0.0.21 → fastapi_cli-0.0.23}/tests/test_requirements.py +0 -0
  69. {fastapi_cli-0.0.21 → fastapi_cli-0.0.23}/tests/test_utils_cli.py +0 -0
  70. {fastapi_cli-0.0.21 → fastapi_cli-0.0.23}/tests/test_utils_default_dir.py +0 -0
  71. {fastapi_cli-0.0.21 → fastapi_cli-0.0.23}/tests/test_utils_default_file.py +0 -0
  72. {fastapi_cli-0.0.21 → fastapi_cli-0.0.23}/tests/test_utils_package.py +0 -0
  73. {fastapi_cli-0.0.21 → fastapi_cli-0.0.23}/tests/test_utils_single_file.py +0 -0
  74. {fastapi_cli-0.0.21 → fastapi_cli-0.0.23}/tests/utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fastapi-cli
3
- Version: 0.0.21
3
+ Version: 0.0.23
4
4
  Summary: Run and manage FastAPI apps from the command line with FastAPI CLI. 🚀
5
5
  Author-Email: =?utf-8?q?Sebasti=C3=A1n_Ram=C3=ADrez?= <tiangolo@gmail.com>
6
6
  License-Expression: MIT
@@ -19,7 +19,6 @@ Classifier: Development Status :: 4 - Beta
19
19
  Classifier: Framework :: FastAPI
20
20
  Classifier: Intended Audience :: Developers
21
21
  Classifier: Programming Language :: Python :: 3 :: Only
22
- Classifier: Programming Language :: Python :: 3.9
23
22
  Classifier: Programming Language :: Python :: 3.10
24
23
  Classifier: Programming Language :: Python :: 3.11
25
24
  Classifier: Programming Language :: Python :: 3.12
@@ -30,8 +29,8 @@ Project-URL: Documentation, https://fastapi.tiangolo.com/fastapi-cli/
30
29
  Project-URL: Repository, https://github.com/fastapi/fastapi-cli
31
30
  Project-URL: Issues, https://github.com/fastapi/fastapi-cli/issues
32
31
  Project-URL: Changelog, https://github.com/fastapi/fastapi-cli/blob/main/release-notes.md
33
- Requires-Python: >=3.9
34
- Requires-Dist: typer>=0.15.1
32
+ Requires-Python: >=3.10
33
+ Requires-Dist: typer>=0.16.0
35
34
  Requires-Dist: uvicorn[standard]>=0.15.0
36
35
  Requires-Dist: rich-toolkit>=0.14.8
37
36
  Requires-Dist: tomli>=2.0.0; python_version < "3.11"
@@ -41,7 +40,7 @@ Requires-Dist: fastapi-cloud-cli>=0.1.1; extra == "standard"
41
40
  Provides-Extra: standard-no-fastapi-cloud-cli
42
41
  Requires-Dist: uvicorn[standard]>=0.15.0; extra == "standard-no-fastapi-cloud-cli"
43
42
  Provides-Extra: new
44
- Requires-Dist: fastapi-new>=0.0.2; python_version >= "3.10" and extra == "new"
43
+ Requires-Dist: fastapi-new>=0.0.2; extra == "new"
45
44
  Description-Content-Type: text/markdown
46
45
 
47
46
  # FastAPI CLI
@@ -5,7 +5,7 @@ description = "Run and manage FastAPI apps from the command line with FastAPI CL
5
5
  authors = [
6
6
  { name = "Sebastián Ramírez", email = "tiangolo@gmail.com" },
7
7
  ]
8
- requires-python = ">=3.9"
8
+ requires-python = ">=3.10"
9
9
  readme = "README.md"
10
10
  license = "MIT"
11
11
  license-files = [
@@ -26,7 +26,6 @@ classifiers = [
26
26
  "Framework :: FastAPI",
27
27
  "Intended Audience :: Developers",
28
28
  "Programming Language :: Python :: 3 :: Only",
29
- "Programming Language :: Python :: 3.9",
30
29
  "Programming Language :: Python :: 3.10",
31
30
  "Programming Language :: Python :: 3.11",
32
31
  "Programming Language :: Python :: 3.12",
@@ -34,12 +33,12 @@ classifiers = [
34
33
  "Programming Language :: Python :: 3.14",
35
34
  ]
36
35
  dependencies = [
37
- "typer >= 0.15.1",
36
+ "typer >= 0.16.0",
38
37
  "uvicorn[standard] >= 0.15.0",
39
38
  "rich-toolkit >= 0.14.8",
40
39
  "tomli >= 2.0.0; python_version < '3.11'",
41
40
  ]
42
- version = "0.0.21"
41
+ version = "0.0.23"
43
42
 
44
43
  [project.optional-dependencies]
45
44
  standard = [
@@ -50,7 +49,7 @@ standard-no-fastapi-cloud-cli = [
50
49
  "uvicorn[standard] >= 0.15.0",
51
50
  ]
52
51
  new = [
53
- "fastapi-new >= 0.0.2 ; python_version >= '3.10'",
52
+ "fastapi-new >= 0.0.2",
54
53
  ]
55
54
 
56
55
  [project.urls]
@@ -70,10 +69,10 @@ github-actions = [
70
69
  ]
71
70
  tests = [
72
71
  "coverage[toml]>=6.2,<8.0",
73
- "fastapi-slim>=0.128.0",
72
+ "fastapi>=0.128.0",
74
73
  "mypy==1.19.1",
75
- "pytest>=4.4.0,<10.0.0",
76
- "ruff==0.15.0",
74
+ "pytest>=7.4.0,<10.0.0",
75
+ "ruff==0.15.1",
77
76
  "uvicorn>=0.39.0",
78
77
  ]
79
78
 
@@ -0,0 +1 @@
1
+ __version__ = "0.0.23"
@@ -1,6 +1,6 @@
1
1
  import logging
2
2
  from pathlib import Path
3
- from typing import Annotated, Any, Union
3
+ from typing import Annotated, Any
4
4
 
5
5
  import typer
6
6
  from pydantic import ValidationError
@@ -57,7 +57,7 @@ def version_callback(value: bool) -> None:
57
57
  @app.callback()
58
58
  def callback(
59
59
  version: Annotated[
60
- Union[bool, None],
60
+ bool | None,
61
61
  typer.Option(
62
62
  "--version", help="Show the version and exit.", callback=version_callback
63
63
  ),
@@ -99,19 +99,19 @@ def _get_module_tree(module_paths: list[Path]) -> Tree:
99
99
 
100
100
 
101
101
  def _run(
102
- path: Union[Path, None] = None,
102
+ path: Path | None = None,
103
103
  *,
104
104
  host: str = "127.0.0.1",
105
105
  port: int = 8000,
106
106
  reload: bool = True,
107
- reload_dirs: Union[list[Path], None] = None,
108
- workers: Union[int, None] = None,
107
+ reload_dirs: list[Path] | None = None,
108
+ workers: int | None = None,
109
109
  root_path: str = "",
110
110
  command: str,
111
- app: Union[str, None] = None,
112
- entrypoint: Union[str, None] = None,
111
+ app: str | None = None,
112
+ entrypoint: str | None = None,
113
113
  proxy_headers: bool = False,
114
- forwarded_allow_ips: Union[str, None] = None,
114
+ forwarded_allow_ips: str | None = None,
115
115
  ) -> None:
116
116
  with get_rich_toolkit() as toolkit:
117
117
  server_type = "development" if command == "dev" else "production"
@@ -236,7 +236,7 @@ def _run(
236
236
  @app.command()
237
237
  def dev(
238
238
  path: Annotated[
239
- Union[Path, None],
239
+ Path | None,
240
240
  typer.Argument(
241
241
  help="A path to a Python file or package directory (with [blue]__init__.py[/blue] files) containing a [bold]FastAPI[/bold] app. If not provided, a default set of paths will be tried."
242
242
  ),
@@ -262,7 +262,7 @@ def dev(
262
262
  ),
263
263
  ] = True,
264
264
  reload_dir: Annotated[
265
- Union[list[Path], None],
265
+ list[Path] | None,
266
266
  typer.Option(
267
267
  help="Set reload directories explicitly, instead of using the current working directory."
268
268
  ),
@@ -274,13 +274,13 @@ def dev(
274
274
  ),
275
275
  ] = "",
276
276
  app: Annotated[
277
- Union[str, None],
277
+ str | None,
278
278
  typer.Option(
279
279
  help="The name of the variable that contains the [bold]FastAPI[/bold] app in the imported module or package. If not provided, it is detected automatically."
280
280
  ),
281
281
  ] = None,
282
282
  entrypoint: Annotated[
283
- Union[str, None],
283
+ str | None,
284
284
  typer.Option(
285
285
  "--entrypoint",
286
286
  "-e",
@@ -294,7 +294,7 @@ def dev(
294
294
  ),
295
295
  ] = True,
296
296
  forwarded_allow_ips: Annotated[
297
- Union[str, None],
297
+ str | None,
298
298
  typer.Option(
299
299
  help="Comma separated list of IP Addresses to trust with proxy headers. The literal '*' means trust everything."
300
300
  ),
@@ -343,7 +343,7 @@ def dev(
343
343
  @app.command()
344
344
  def run(
345
345
  path: Annotated[
346
- Union[Path, None],
346
+ Path | None,
347
347
  typer.Argument(
348
348
  help="A path to a Python file or package directory (with [blue]__init__.py[/blue] files) containing a [bold]FastAPI[/bold] app. If not provided, a default set of paths will be tried."
349
349
  ),
@@ -369,7 +369,7 @@ def run(
369
369
  ),
370
370
  ] = False,
371
371
  workers: Annotated[
372
- Union[int, None],
372
+ int | None,
373
373
  typer.Option(
374
374
  help="Use multiple worker processes. Mutually exclusive with the --reload flag."
375
375
  ),
@@ -381,13 +381,13 @@ def run(
381
381
  ),
382
382
  ] = "",
383
383
  app: Annotated[
384
- Union[str, None],
384
+ str | None,
385
385
  typer.Option(
386
386
  help="The name of the variable that contains the [bold]FastAPI[/bold] app in the imported module or package. If not provided, it is detected automatically."
387
387
  ),
388
388
  ] = None,
389
389
  entrypoint: Annotated[
390
- Union[str, None],
390
+ str | None,
391
391
  typer.Option(
392
392
  "--entrypoint",
393
393
  "-e",
@@ -401,7 +401,7 @@ def run(
401
401
  ),
402
402
  ] = True,
403
403
  forwarded_allow_ips: Annotated[
404
- Union[str, None],
404
+ str | None,
405
405
  typer.Option(
406
406
  help="Comma separated list of IP Addresses to trust with proxy headers. The literal '*' means trust everything."
407
407
  ),
@@ -1,6 +1,6 @@
1
1
  import logging
2
2
  from pathlib import Path
3
- from typing import Any, Optional
3
+ from typing import Any
4
4
 
5
5
  from pydantic import BaseModel, StrictStr
6
6
 
@@ -8,7 +8,7 @@ logger = logging.getLogger(__name__)
8
8
 
9
9
 
10
10
  class FastAPIConfig(BaseModel):
11
- entrypoint: Optional[StrictStr] = None
11
+ entrypoint: StrictStr | None = None
12
12
 
13
13
  @classmethod
14
14
  def _read_pyproject_toml(cls) -> dict[str, Any]:
@@ -33,7 +33,7 @@ class FastAPIConfig(BaseModel):
33
33
  return data.get("tool", {}).get("fastapi", {}) # type: ignore
34
34
 
35
35
  @classmethod
36
- def resolve(cls, entrypoint: Optional[str] = None) -> "FastAPIConfig":
36
+ def resolve(cls, entrypoint: str | None = None) -> "FastAPIConfig":
37
37
  config = cls._read_pyproject_toml()
38
38
 
39
39
  if entrypoint is not None:
@@ -3,7 +3,6 @@ import sys
3
3
  from dataclasses import dataclass
4
4
  from logging import getLogger
5
5
  from pathlib import Path
6
- from typing import Union
7
6
 
8
7
  from fastapi_cli.exceptions import FastAPICLIException
9
8
 
@@ -65,7 +64,7 @@ def get_module_data_from_path(path: Path) -> ModuleData:
65
64
  )
66
65
 
67
66
 
68
- def get_app_name(*, mod_data: ModuleData, app_name: Union[str, None] = None) -> str:
67
+ def get_app_name(*, mod_data: ModuleData, app_name: str | None = None) -> str:
69
68
  try:
70
69
  mod = importlib.import_module(mod_data.module_import_str)
71
70
  except (ImportError, ValueError) as e:
@@ -111,7 +110,7 @@ class ImportData:
111
110
 
112
111
 
113
112
  def get_import_data(
114
- *, path: Union[Path, None] = None, app_name: Union[str, None] = None
113
+ *, path: Path | None = None, app_name: str | None = None
115
114
  ) -> ImportData:
116
115
  if not path:
117
116
  path = get_default_path()
@@ -1,13 +1,10 @@
1
1
  import logging
2
- from typing import Union
3
2
 
4
3
  from rich.console import Console
5
4
  from rich.logging import RichHandler
6
5
 
7
6
 
8
- def setup_logging(
9
- terminal_width: Union[int, None] = None, level: int = logging.INFO
10
- ) -> None:
7
+ def setup_logging(terminal_width: int | None = None, level: int = logging.INFO) -> None:
11
8
  logger = logging.getLogger("fastapi_cli")
12
9
  console = Console(width=terminal_width) if terminal_width else None
13
10
  rich_handler = RichHandler(
@@ -1 +0,0 @@
1
- __version__ = "0.0.21"
File without changes
File without changes
File without changes