fastapi-cli 0.0.6__tar.gz → 0.0.8__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 (71) hide show
  1. {fastapi_cli-0.0.6 → fastapi_cli-0.0.8}/PKG-INFO +6 -3
  2. {fastapi_cli-0.0.6 → fastapi_cli-0.0.8}/pyproject.toml +7 -3
  3. {fastapi_cli-0.0.6 → fastapi_cli-0.0.8}/requirements-tests.txt +3 -3
  4. fastapi_cli-0.0.8/src/fastapi_cli/__init__.py +1 -0
  5. {fastapi_cli-0.0.6 → fastapi_cli-0.0.8}/src/fastapi_cli/cli.py +10 -0
  6. {fastapi_cli-0.0.6 → fastapi_cli-0.0.8}/src/fastapi_cli/utils/cli.py +1 -0
  7. {fastapi_cli-0.0.6 → fastapi_cli-0.0.8}/tests/conftest.py +2 -1
  8. {fastapi_cli-0.0.6 → fastapi_cli-0.0.8}/tests/test_requirements.py +6 -3
  9. {fastapi_cli-0.0.6 → fastapi_cli-0.0.8}/tests/test_utils_cli.py +21 -0
  10. {fastapi_cli-0.0.6 → fastapi_cli-0.0.8}/tests/test_utils_default_dir.py +1 -0
  11. {fastapi_cli-0.0.6 → fastapi_cli-0.0.8}/tests/test_utils_default_file.py +2 -1
  12. {fastapi_cli-0.0.6 → fastapi_cli-0.0.8}/tests/test_utils_single_file.py +2 -1
  13. fastapi_cli-0.0.6/src/fastapi_cli/__init__.py +0 -1
  14. {fastapi_cli-0.0.6 → fastapi_cli-0.0.8}/LICENSE +0 -0
  15. {fastapi_cli-0.0.6 → fastapi_cli-0.0.8}/README.md +0 -0
  16. {fastapi_cli-0.0.6 → fastapi_cli-0.0.8}/pdm_build.py +0 -0
  17. {fastapi_cli-0.0.6 → fastapi_cli-0.0.8}/requirements-github-actions.txt +0 -0
  18. {fastapi_cli-0.0.6 → fastapi_cli-0.0.8}/requirements.txt +0 -0
  19. {fastapi_cli-0.0.6 → fastapi_cli-0.0.8}/scripts/format.sh +0 -0
  20. {fastapi_cli-0.0.6 → fastapi_cli-0.0.8}/scripts/lint.sh +0 -0
  21. {fastapi_cli-0.0.6 → fastapi_cli-0.0.8}/scripts/test-cov-html.sh +0 -0
  22. {fastapi_cli-0.0.6 → fastapi_cli-0.0.8}/scripts/test.sh +0 -0
  23. {fastapi_cli-0.0.6 → fastapi_cli-0.0.8}/src/fastapi_cli/__main__.py +0 -0
  24. {fastapi_cli-0.0.6 → fastapi_cli-0.0.8}/src/fastapi_cli/discover.py +0 -0
  25. {fastapi_cli-0.0.6 → fastapi_cli-0.0.8}/src/fastapi_cli/exceptions.py +0 -0
  26. {fastapi_cli-0.0.6 → fastapi_cli-0.0.8}/src/fastapi_cli/logging.py +0 -0
  27. {fastapi_cli-0.0.6 → fastapi_cli-0.0.8}/src/fastapi_cli/py.typed +0 -0
  28. {fastapi_cli-0.0.6 → fastapi_cli-0.0.8}/src/fastapi_cli/utils/__init__.py +0 -0
  29. {fastapi_cli-0.0.6 → fastapi_cli-0.0.8}/tests/__init__.py +0 -0
  30. {fastapi_cli-0.0.6 → fastapi_cli-0.0.8}/tests/assets/broken_package/mod/__init__.py +0 -0
  31. {fastapi_cli-0.0.6 → fastapi_cli-0.0.8}/tests/assets/broken_package/mod/app.py +0 -0
  32. {fastapi_cli-0.0.6 → fastapi_cli-0.0.8}/tests/assets/broken_package/utils.py +0 -0
  33. {fastapi_cli-0.0.6 → fastapi_cli-0.0.8}/tests/assets/default_files/default_api/api.py +0 -0
  34. {fastapi_cli-0.0.6 → fastapi_cli-0.0.8}/tests/assets/default_files/default_app/api.py +0 -0
  35. {fastapi_cli-0.0.6 → fastapi_cli-0.0.8}/tests/assets/default_files/default_app/app.py +0 -0
  36. {fastapi_cli-0.0.6 → fastapi_cli-0.0.8}/tests/assets/default_files/default_app_dir_api/app/__init__.py +0 -0
  37. {fastapi_cli-0.0.6 → fastapi_cli-0.0.8}/tests/assets/default_files/default_app_dir_api/app/api.py +0 -0
  38. {fastapi_cli-0.0.6 → fastapi_cli-0.0.8}/tests/assets/default_files/default_app_dir_app/app/__init__.py +0 -0
  39. {fastapi_cli-0.0.6 → fastapi_cli-0.0.8}/tests/assets/default_files/default_app_dir_app/app/api.py +0 -0
  40. {fastapi_cli-0.0.6 → fastapi_cli-0.0.8}/tests/assets/default_files/default_app_dir_app/app/app.py +0 -0
  41. {fastapi_cli-0.0.6 → fastapi_cli-0.0.8}/tests/assets/default_files/default_app_dir_main/app/__init__.py +0 -0
  42. {fastapi_cli-0.0.6 → fastapi_cli-0.0.8}/tests/assets/default_files/default_app_dir_main/app/api.py +0 -0
  43. {fastapi_cli-0.0.6 → fastapi_cli-0.0.8}/tests/assets/default_files/default_app_dir_main/app/app.py +0 -0
  44. {fastapi_cli-0.0.6 → fastapi_cli-0.0.8}/tests/assets/default_files/default_app_dir_main/app/main.py +0 -0
  45. {fastapi_cli-0.0.6 → fastapi_cli-0.0.8}/tests/assets/default_files/default_app_dir_non_default/app/__init__.py +0 -0
  46. {fastapi_cli-0.0.6 → fastapi_cli-0.0.8}/tests/assets/default_files/default_app_dir_non_default/app/nondefault.py +0 -0
  47. {fastapi_cli-0.0.6 → fastapi_cli-0.0.8}/tests/assets/default_files/default_main/api.py +0 -0
  48. {fastapi_cli-0.0.6 → fastapi_cli-0.0.8}/tests/assets/default_files/default_main/app.py +0 -0
  49. {fastapi_cli-0.0.6 → fastapi_cli-0.0.8}/tests/assets/default_files/default_main/main.py +0 -0
  50. {fastapi_cli-0.0.6 → fastapi_cli-0.0.8}/tests/assets/default_files/non_default/nonstandard.py +0 -0
  51. {fastapi_cli-0.0.6 → fastapi_cli-0.0.8}/tests/assets/nested_package/__init__.py +0 -0
  52. {fastapi_cli-0.0.6 → fastapi_cli-0.0.8}/tests/assets/nested_package/package/__init__.py +0 -0
  53. {fastapi_cli-0.0.6 → fastapi_cli-0.0.8}/tests/assets/nested_package/package/core/__init__.py +0 -0
  54. {fastapi_cli-0.0.6 → fastapi_cli-0.0.8}/tests/assets/nested_package/package/core/utils.py +0 -0
  55. {fastapi_cli-0.0.6 → fastapi_cli-0.0.8}/tests/assets/nested_package/package/mod/__init__.py +0 -0
  56. {fastapi_cli-0.0.6 → fastapi_cli-0.0.8}/tests/assets/nested_package/package/mod/api.py +0 -0
  57. {fastapi_cli-0.0.6 → fastapi_cli-0.0.8}/tests/assets/nested_package/package/mod/app.py +0 -0
  58. {fastapi_cli-0.0.6 → fastapi_cli-0.0.8}/tests/assets/nested_package/package/mod/other.py +0 -0
  59. {fastapi_cli-0.0.6 → fastapi_cli-0.0.8}/tests/assets/package/__init__.py +0 -0
  60. {fastapi_cli-0.0.6 → fastapi_cli-0.0.8}/tests/assets/package/core/__init__.py +0 -0
  61. {fastapi_cli-0.0.6 → fastapi_cli-0.0.8}/tests/assets/package/core/utils.py +0 -0
  62. {fastapi_cli-0.0.6 → fastapi_cli-0.0.8}/tests/assets/package/mod/__init__.py +0 -0
  63. {fastapi_cli-0.0.6 → fastapi_cli-0.0.8}/tests/assets/package/mod/api.py +0 -0
  64. {fastapi_cli-0.0.6 → fastapi_cli-0.0.8}/tests/assets/package/mod/app.py +0 -0
  65. {fastapi_cli-0.0.6 → fastapi_cli-0.0.8}/tests/assets/package/mod/other.py +0 -0
  66. {fastapi_cli-0.0.6 → fastapi_cli-0.0.8}/tests/assets/single_file_api.py +0 -0
  67. {fastapi_cli-0.0.6 → fastapi_cli-0.0.8}/tests/assets/single_file_app.py +0 -0
  68. {fastapi_cli-0.0.6 → fastapi_cli-0.0.8}/tests/assets/single_file_other.py +0 -0
  69. {fastapi_cli-0.0.6 → fastapi_cli-0.0.8}/tests/test_cli.py +2 -2
  70. {fastapi_cli-0.0.6 → fastapi_cli-0.0.8}/tests/test_utils_package.py +2 -2
  71. {fastapi_cli-0.0.6 → fastapi_cli-0.0.8}/tests/utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: fastapi-cli
3
- Version: 0.0.6
3
+ Version: 0.0.8
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: MIT
@@ -31,11 +31,14 @@ Project-URL: Repository, https://github.com/fastapi/fastapi-cli
31
31
  Project-URL: Issues, https://github.com/fastapi/fastapi-cli/issues
32
32
  Project-URL: Changelog, https://github.com/fastapi/fastapi-cli/blob/main/release-notes.md
33
33
  Requires-Python: >=3.8
34
- Requires-Dist: typer>=0.12.3
34
+ Requires-Dist: typer>=0.15.1
35
35
  Requires-Dist: uvicorn[standard]>=0.15.0
36
- Requires-Dist: rich-toolkit>=0.11.1
36
+ Requires-Dist: rich-toolkit>=0.14.8
37
37
  Provides-Extra: standard
38
38
  Requires-Dist: uvicorn[standard]>=0.15.0; extra == "standard"
39
+ Requires-Dist: fastapi-cloud-cli>=0.1.1; extra == "standard"
40
+ Provides-Extra: standard-no-fastapi-cloud-cli
41
+ Requires-Dist: uvicorn[standard]>=0.15.0; extra == "standard-no-fastapi-cloud-cli"
39
42
  Description-Content-Type: text/markdown
40
43
 
41
44
  # FastAPI CLI
@@ -31,11 +31,11 @@ classifiers = [
31
31
  "License :: OSI Approved :: MIT License",
32
32
  ]
33
33
  dependencies = [
34
- "typer >= 0.12.3",
34
+ "typer >= 0.15.1",
35
35
  "uvicorn[standard] >= 0.15.0",
36
- "rich-toolkit >= 0.11.1",
36
+ "rich-toolkit >= 0.14.8",
37
37
  ]
38
- version = "0.0.6"
38
+ version = "0.0.8"
39
39
 
40
40
  [project.license]
41
41
  text = "MIT"
@@ -43,6 +43,10 @@ text = "MIT"
43
43
  [project.optional-dependencies]
44
44
  standard = [
45
45
  "uvicorn[standard] >= 0.15.0",
46
+ "fastapi-cloud-cli >= 0.1.1",
47
+ ]
48
+ standard-no-fastapi-cloud-cli = [
49
+ "uvicorn[standard] >= 0.15.0",
46
50
  ]
47
51
 
48
52
  [project.urls]
@@ -1,9 +1,9 @@
1
- -e .
1
+ -e .[standard]
2
2
 
3
3
  pytest >=4.4.0,<9.0.0
4
4
  coverage[toml] >=6.2,<8.0
5
- mypy ==1.13.0
6
- ruff ==0.5.5
5
+ mypy ==1.14.0
6
+ ruff ==0.11.2
7
7
  # Needed explicitly by fastapi-cli-slim
8
8
  fastapi-slim
9
9
  uvicorn
@@ -0,0 +1 @@
1
+ __version__ = "0.0.8"
@@ -25,6 +25,16 @@ except ImportError: # pragma: no cover
25
25
  uvicorn = None # type: ignore[assignment]
26
26
 
27
27
 
28
+ try:
29
+ from fastapi_cloud_cli.cli import (
30
+ app as fastapi_cloud_cli,
31
+ )
32
+
33
+ app.add_typer(fastapi_cloud_cli)
34
+ except ImportError: # pragma: no cover
35
+ pass
36
+
37
+
28
38
  def version_callback(value: bool) -> None:
29
39
  if value:
30
40
  print(f"FastAPI CLI version: [green]{__version__}[/green]")
@@ -18,6 +18,7 @@ class CustomFormatter(DefaultFormatter):
18
18
  def get_uvicorn_log_config() -> Dict[str, Any]:
19
19
  return {
20
20
  "version": 1,
21
+ "disable_existing_loggers": False,
21
22
  "formatters": {
22
23
  "default": {
23
24
  "()": CustomFormatter,
@@ -2,9 +2,10 @@ import sys
2
2
  from typing import Generator
3
3
 
4
4
  import pytest
5
- from fastapi_cli.logging import setup_logging
6
5
  from typer import rich_utils
7
6
 
7
+ from fastapi_cli.logging import setup_logging
8
+
8
9
 
9
10
  @pytest.fixture(autouse=True)
10
11
  def reset_syspath() -> Generator[None, None, None]:
@@ -1,9 +1,10 @@
1
1
  from pathlib import Path
2
2
 
3
3
  import pytest
4
+ from typer.testing import CliRunner
5
+
4
6
  from fastapi_cli.discover import get_import_data
5
7
  from fastapi_cli.exceptions import FastAPICLIException
6
- from typer.testing import CliRunner
7
8
 
8
9
  from .utils import changing_dir
9
10
 
@@ -13,9 +14,10 @@ assets_path = Path(__file__).parent / "assets"
13
14
 
14
15
 
15
16
  def test_no_uvicorn() -> None:
16
- import fastapi_cli.cli
17
17
  import uvicorn
18
18
 
19
+ import fastapi_cli.cli
20
+
19
21
  fastapi_cli.cli.uvicorn = None # type: ignore[attr-defined, assignment]
20
22
 
21
23
  with changing_dir(assets_path):
@@ -31,9 +33,10 @@ def test_no_uvicorn() -> None:
31
33
 
32
34
 
33
35
  def test_no_fastapi() -> None:
34
- import fastapi_cli.discover
35
36
  from fastapi import FastAPI
36
37
 
38
+ import fastapi_cli.discover
39
+
37
40
  fastapi_cli.discover.FastAPI = None # type: ignore[attr-defined, assignment]
38
41
  with changing_dir(assets_path):
39
42
  with pytest.raises(FastAPICLIException) as exc_info:
@@ -1,5 +1,7 @@
1
1
  import logging
2
2
 
3
+ from pytest import LogCaptureFixture
4
+
3
5
  from fastapi_cli.utils.cli import CustomFormatter, get_uvicorn_log_config
4
6
 
5
7
 
@@ -33,3 +35,22 @@ def test_custom_formatter() -> None:
33
35
  assert "127.0.0.1" in formatted
34
36
  assert "GET / HTTP/1.1" in formatted
35
37
  assert "200" in formatted
38
+
39
+
40
+ def test_log_config_does_not_disable_existing_loggers(
41
+ caplog: LogCaptureFixture,
42
+ ) -> None:
43
+ logger1 = logging.getLogger(__name__)
44
+ logger1.setLevel(logging.INFO)
45
+ logger1.info("Message before configuration")
46
+
47
+ logging.config.dictConfig(get_uvicorn_log_config())
48
+
49
+ logger2 = logging.getLogger(__name__)
50
+
51
+ logger1.info("Message after configuration from logger1") # Should not appear
52
+ logger2.info("Message from logger2")
53
+
54
+ assert "Message before configuration" in caplog.text
55
+ assert "Message after configuration from logger1" in caplog.text
56
+ assert "Message from logger2" in caplog.text
@@ -1,6 +1,7 @@
1
1
  from pathlib import Path
2
2
 
3
3
  import pytest
4
+
4
5
  from fastapi_cli.discover import get_import_data
5
6
  from fastapi_cli.exceptions import FastAPICLIException
6
7
 
@@ -3,9 +3,10 @@ import sys
3
3
  from pathlib import Path
4
4
 
5
5
  import pytest
6
+ from pytest import CaptureFixture
7
+
6
8
  from fastapi_cli.discover import get_import_data
7
9
  from fastapi_cli.exceptions import FastAPICLIException
8
- from pytest import CaptureFixture
9
10
 
10
11
  from .utils import changing_dir
11
12
 
@@ -1,9 +1,10 @@
1
1
  from pathlib import Path
2
2
 
3
3
  import pytest
4
+ from pytest import CaptureFixture
5
+
4
6
  from fastapi_cli.discover import get_import_data
5
7
  from fastapi_cli.exceptions import FastAPICLIException
6
- from pytest import CaptureFixture
7
8
 
8
9
  from .utils import changing_dir
9
10
 
@@ -1 +0,0 @@
1
- __version__ = "0.0.6"
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -4,10 +4,10 @@ from pathlib import Path
4
4
  from unittest.mock import patch
5
5
 
6
6
  import uvicorn
7
- from fastapi_cli.cli import app
8
- from fastapi_cli.utils.cli import get_uvicorn_log_config
9
7
  from typer.testing import CliRunner
10
8
 
9
+ from fastapi_cli.cli import app
10
+ from fastapi_cli.utils.cli import get_uvicorn_log_config
11
11
  from tests.utils import changing_dir
12
12
 
13
13
  runner = CliRunner()
@@ -1,10 +1,10 @@
1
1
  from pathlib import Path
2
2
 
3
3
  import pytest
4
- from fastapi_cli.discover import get_import_data
5
- from fastapi_cli.exceptions import FastAPICLIException
6
4
  from pytest import CaptureFixture
7
5
 
6
+ from fastapi_cli.discover import get_import_data
7
+ from fastapi_cli.exceptions import FastAPICLIException
8
8
  from tests.utils import changing_dir
9
9
 
10
10
  assets_path = Path(__file__).parent / "assets"
File without changes