fastapi-cli 0.0.31__tar.gz → 0.0.32__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.
- {fastapi_cli-0.0.31 → fastapi_cli-0.0.32}/PKG-INFO +5 -1
- {fastapi_cli-0.0.31 → fastapi_cli-0.0.32}/README.md +4 -0
- {fastapi_cli-0.0.31 → fastapi_cli-0.0.32}/pyproject.toml +1 -1
- fastapi_cli-0.0.32/src/fastapi_cli/__init__.py +1 -0
- {fastapi_cli-0.0.31 → fastapi_cli-0.0.32}/src/fastapi_cli/cli.py +2 -0
- fastapi_cli-0.0.32/tests/assets/environment_app.py +12 -0
- {fastapi_cli-0.0.31 → fastapi_cli-0.0.32}/tests/test_cli.py +48 -1
- fastapi_cli-0.0.31/src/fastapi_cli/__init__.py +0 -1
- {fastapi_cli-0.0.31 → fastapi_cli-0.0.32}/LICENSE +0 -0
- {fastapi_cli-0.0.31 → fastapi_cli-0.0.32}/scripts/add_latest_release_date.py +0 -0
- {fastapi_cli-0.0.31 → fastapi_cli-0.0.32}/scripts/format.sh +0 -0
- {fastapi_cli-0.0.31 → fastapi_cli-0.0.32}/scripts/lint.sh +0 -0
- {fastapi_cli-0.0.31 → fastapi_cli-0.0.32}/scripts/prepare_release.py +0 -0
- {fastapi_cli-0.0.31 → fastapi_cli-0.0.32}/scripts/test-cov-html.sh +0 -0
- {fastapi_cli-0.0.31 → fastapi_cli-0.0.32}/scripts/test.sh +0 -0
- {fastapi_cli-0.0.31 → fastapi_cli-0.0.32}/src/fastapi_cli/__main__.py +0 -0
- {fastapi_cli-0.0.31 → fastapi_cli-0.0.32}/src/fastapi_cli/config.py +0 -0
- {fastapi_cli-0.0.31 → fastapi_cli-0.0.32}/src/fastapi_cli/discover.py +0 -0
- {fastapi_cli-0.0.31 → fastapi_cli-0.0.32}/src/fastapi_cli/exceptions.py +0 -0
- {fastapi_cli-0.0.31 → fastapi_cli-0.0.32}/src/fastapi_cli/logging.py +0 -0
- {fastapi_cli-0.0.31 → fastapi_cli-0.0.32}/src/fastapi_cli/py.typed +0 -0
- {fastapi_cli-0.0.31 → fastapi_cli-0.0.32}/src/fastapi_cli/utils/__init__.py +0 -0
- {fastapi_cli-0.0.31 → fastapi_cli-0.0.32}/src/fastapi_cli/utils/cli.py +0 -0
- {fastapi_cli-0.0.31 → fastapi_cli-0.0.32}/tests/__init__.py +0 -0
- {fastapi_cli-0.0.31 → fastapi_cli-0.0.32}/tests/assets/broken_package/mod/__init__.py +0 -0
- {fastapi_cli-0.0.31 → fastapi_cli-0.0.32}/tests/assets/broken_package/mod/app.py +0 -0
- {fastapi_cli-0.0.31 → fastapi_cli-0.0.32}/tests/assets/broken_package/utils.py +0 -0
- {fastapi_cli-0.0.31 → fastapi_cli-0.0.32}/tests/assets/default_files/default_api/api.py +0 -0
- {fastapi_cli-0.0.31 → fastapi_cli-0.0.32}/tests/assets/default_files/default_app/api.py +0 -0
- {fastapi_cli-0.0.31 → fastapi_cli-0.0.32}/tests/assets/default_files/default_app/app.py +0 -0
- {fastapi_cli-0.0.31 → fastapi_cli-0.0.32}/tests/assets/default_files/default_app_dir_api/app/__init__.py +0 -0
- {fastapi_cli-0.0.31 → fastapi_cli-0.0.32}/tests/assets/default_files/default_app_dir_api/app/api.py +0 -0
- {fastapi_cli-0.0.31 → fastapi_cli-0.0.32}/tests/assets/default_files/default_app_dir_app/app/__init__.py +0 -0
- {fastapi_cli-0.0.31 → fastapi_cli-0.0.32}/tests/assets/default_files/default_app_dir_app/app/api.py +0 -0
- {fastapi_cli-0.0.31 → fastapi_cli-0.0.32}/tests/assets/default_files/default_app_dir_app/app/app.py +0 -0
- {fastapi_cli-0.0.31 → fastapi_cli-0.0.32}/tests/assets/default_files/default_app_dir_main/app/__init__.py +0 -0
- {fastapi_cli-0.0.31 → fastapi_cli-0.0.32}/tests/assets/default_files/default_app_dir_main/app/api.py +0 -0
- {fastapi_cli-0.0.31 → fastapi_cli-0.0.32}/tests/assets/default_files/default_app_dir_main/app/app.py +0 -0
- {fastapi_cli-0.0.31 → fastapi_cli-0.0.32}/tests/assets/default_files/default_app_dir_main/app/main.py +0 -0
- {fastapi_cli-0.0.31 → fastapi_cli-0.0.32}/tests/assets/default_files/default_app_dir_non_default/app/__init__.py +0 -0
- {fastapi_cli-0.0.31 → fastapi_cli-0.0.32}/tests/assets/default_files/default_app_dir_non_default/app/nondefault.py +0 -0
- {fastapi_cli-0.0.31 → fastapi_cli-0.0.32}/tests/assets/default_files/default_main/api.py +0 -0
- {fastapi_cli-0.0.31 → fastapi_cli-0.0.32}/tests/assets/default_files/default_main/app.py +0 -0
- {fastapi_cli-0.0.31 → fastapi_cli-0.0.32}/tests/assets/default_files/default_main/main.py +0 -0
- {fastapi_cli-0.0.31 → fastapi_cli-0.0.32}/tests/assets/default_files/non_default/nonstandard.py +0 -0
- {fastapi_cli-0.0.31 → fastapi_cli-0.0.32}/tests/assets/nested_package/__init__.py +0 -0
- {fastapi_cli-0.0.31 → fastapi_cli-0.0.32}/tests/assets/nested_package/package/__init__.py +0 -0
- {fastapi_cli-0.0.31 → fastapi_cli-0.0.32}/tests/assets/nested_package/package/core/__init__.py +0 -0
- {fastapi_cli-0.0.31 → fastapi_cli-0.0.32}/tests/assets/nested_package/package/core/utils.py +0 -0
- {fastapi_cli-0.0.31 → fastapi_cli-0.0.32}/tests/assets/nested_package/package/mod/__init__.py +0 -0
- {fastapi_cli-0.0.31 → fastapi_cli-0.0.32}/tests/assets/nested_package/package/mod/api.py +0 -0
- {fastapi_cli-0.0.31 → fastapi_cli-0.0.32}/tests/assets/nested_package/package/mod/app.py +0 -0
- {fastapi_cli-0.0.31 → fastapi_cli-0.0.32}/tests/assets/nested_package/package/mod/other.py +0 -0
- {fastapi_cli-0.0.31 → fastapi_cli-0.0.32}/tests/assets/package/__init__.py +0 -0
- {fastapi_cli-0.0.31 → fastapi_cli-0.0.32}/tests/assets/package/core/__init__.py +0 -0
- {fastapi_cli-0.0.31 → fastapi_cli-0.0.32}/tests/assets/package/core/utils.py +0 -0
- {fastapi_cli-0.0.31 → fastapi_cli-0.0.32}/tests/assets/package/mod/__init__.py +0 -0
- {fastapi_cli-0.0.31 → fastapi_cli-0.0.32}/tests/assets/package/mod/api.py +0 -0
- {fastapi_cli-0.0.31 → fastapi_cli-0.0.32}/tests/assets/package/mod/app.py +0 -0
- {fastapi_cli-0.0.31 → fastapi_cli-0.0.32}/tests/assets/package/mod/other.py +0 -0
- {fastapi_cli-0.0.31 → fastapi_cli-0.0.32}/tests/assets/pyproject_config/another_module.py +0 -0
- {fastapi_cli-0.0.31 → fastapi_cli-0.0.32}/tests/assets/pyproject_config/my_module.py +0 -0
- {fastapi_cli-0.0.31 → fastapi_cli-0.0.32}/tests/assets/pyproject_config/pyproject.toml +0 -0
- {fastapi_cli-0.0.31 → fastapi_cli-0.0.32}/tests/assets/single_file_api.py +0 -0
- {fastapi_cli-0.0.31 → fastapi_cli-0.0.32}/tests/assets/single_file_app.py +0 -0
- {fastapi_cli-0.0.31 → fastapi_cli-0.0.32}/tests/assets/single_file_other.py +0 -0
- {fastapi_cli-0.0.31 → fastapi_cli-0.0.32}/tests/conftest.py +0 -0
- {fastapi_cli-0.0.31 → fastapi_cli-0.0.32}/tests/test_cli_pyproject.py +0 -0
- {fastapi_cli-0.0.31 → fastapi_cli-0.0.32}/tests/test_discover.py +0 -0
- {fastapi_cli-0.0.31 → fastapi_cli-0.0.32}/tests/test_prepare_release.py +0 -0
- {fastapi_cli-0.0.31 → fastapi_cli-0.0.32}/tests/test_requirements.py +0 -0
- {fastapi_cli-0.0.31 → fastapi_cli-0.0.32}/tests/test_utils_cli.py +0 -0
- {fastapi_cli-0.0.31 → fastapi_cli-0.0.32}/tests/test_utils_default_dir.py +0 -0
- {fastapi_cli-0.0.31 → fastapi_cli-0.0.32}/tests/test_utils_default_file.py +0 -0
- {fastapi_cli-0.0.31 → fastapi_cli-0.0.32}/tests/test_utils_package.py +0 -0
- {fastapi_cli-0.0.31 → fastapi_cli-0.0.32}/tests/test_utils_single_file.py +0 -0
- {fastapi_cli-0.0.31 → fastapi_cli-0.0.32}/tests/utils.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: fastapi-cli
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.32
|
|
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
|
|
@@ -121,6 +121,10 @@ By default, it will have **auto-reload** enabled, so it will automatically reloa
|
|
|
121
121
|
|
|
122
122
|
By default it will listen on the IP address `127.0.0.1`, which is the IP for your machine to communicate with itself alone (`localhost`).
|
|
123
123
|
|
|
124
|
+
Before importing your app, `fastapi dev` sets the `FASTAPI_ENV` environment variable to `development`. If `FASTAPI_ENV` is already set, its existing value is preserved. This lets app startup code choose development-friendly behavior while allowing you to provide an app-specific environment such as `staging`.
|
|
125
|
+
|
|
126
|
+
The conventional `FASTAPI_ENV` values are `development` and `production`. `fastapi run` currently leaves `FASTAPI_ENV` unchanged, so set it explicitly if your app needs to detect production mode.
|
|
127
|
+
|
|
124
128
|
## `fastapi run`
|
|
125
129
|
|
|
126
130
|
When you run `fastapi run`, it will run on production mode by default.
|
|
@@ -76,6 +76,10 @@ By default, it will have **auto-reload** enabled, so it will automatically reloa
|
|
|
76
76
|
|
|
77
77
|
By default it will listen on the IP address `127.0.0.1`, which is the IP for your machine to communicate with itself alone (`localhost`).
|
|
78
78
|
|
|
79
|
+
Before importing your app, `fastapi dev` sets the `FASTAPI_ENV` environment variable to `development`. If `FASTAPI_ENV` is already set, its existing value is preserved. This lets app startup code choose development-friendly behavior while allowing you to provide an app-specific environment such as `staging`.
|
|
80
|
+
|
|
81
|
+
The conventional `FASTAPI_ENV` values are `development` and `production`. `fastapi run` currently leaves `FASTAPI_ENV` unchanged, so set it explicitly if your app needs to detect production mode.
|
|
82
|
+
|
|
79
83
|
## `fastapi run`
|
|
80
84
|
|
|
81
85
|
When you run `fastapi run`, it will run on production mode by default.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "0.0.32"
|
|
@@ -6,7 +6,10 @@ from unittest.mock import patch
|
|
|
6
6
|
|
|
7
7
|
import pytest
|
|
8
8
|
import uvicorn
|
|
9
|
+
from fastapi.testclient import TestClient
|
|
10
|
+
from httpx import Response
|
|
9
11
|
from typer.testing import CliRunner
|
|
12
|
+
from uvicorn.importer import import_from_string
|
|
10
13
|
|
|
11
14
|
from fastapi_cli.cli import app
|
|
12
15
|
from fastapi_cli.utils.cli import get_uvicorn_log_config
|
|
@@ -18,7 +21,8 @@ assets_path = Path(__file__).parent / "assets"
|
|
|
18
21
|
|
|
19
22
|
|
|
20
23
|
@pytest.fixture(autouse=True)
|
|
21
|
-
def
|
|
24
|
+
def isolate_cli_environment(monkeypatch: pytest.MonkeyPatch) -> None:
|
|
25
|
+
monkeypatch.delenv("FASTAPI_ENV", raising=False)
|
|
22
26
|
monkeypatch.setattr("fastapi_cli.cli.should_use_rich_logs", lambda: True)
|
|
23
27
|
|
|
24
28
|
|
|
@@ -53,6 +57,49 @@ def test_dev() -> None:
|
|
|
53
57
|
assert "Configuration sources:" not in result.output
|
|
54
58
|
|
|
55
59
|
|
|
60
|
+
def _get_fastapi_env_response(*, command: str, fastapi_env: str | None) -> Response:
|
|
61
|
+
module_name = "environment_app"
|
|
62
|
+
sys.modules.pop(module_name, None)
|
|
63
|
+
|
|
64
|
+
try:
|
|
65
|
+
with changing_dir(assets_path):
|
|
66
|
+
with patch.object(uvicorn, "run") as mock_run:
|
|
67
|
+
result = runner.invoke(
|
|
68
|
+
app,
|
|
69
|
+
[command, f"{module_name}.py"],
|
|
70
|
+
env={"FASTAPI_ENV": fastapi_env},
|
|
71
|
+
)
|
|
72
|
+
|
|
73
|
+
assert result.exit_code == 0, result.output
|
|
74
|
+
assert mock_run.call_args
|
|
75
|
+
imported_app = import_from_string(mock_run.call_args.kwargs["app"])
|
|
76
|
+
with TestClient(imported_app) as test_client:
|
|
77
|
+
return test_client.get("/fastapi-env")
|
|
78
|
+
finally:
|
|
79
|
+
sys.modules.pop(module_name, None)
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
def test_dev_sets_fastapi_env_before_app_import() -> None:
|
|
83
|
+
response = _get_fastapi_env_response(command="dev", fastapi_env=None)
|
|
84
|
+
|
|
85
|
+
assert response.status_code == 200
|
|
86
|
+
assert response.json() == {"fastapi_env": "development"}
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
def test_dev_does_not_override_existing_fastapi_env() -> None:
|
|
90
|
+
response = _get_fastapi_env_response(command="dev", fastapi_env="chicken")
|
|
91
|
+
|
|
92
|
+
assert response.status_code == 200
|
|
93
|
+
assert response.json() == {"fastapi_env": "chicken"}
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
def test_run_does_not_set_fastapi_env() -> None:
|
|
97
|
+
response = _get_fastapi_env_response(command="run", fastapi_env=None)
|
|
98
|
+
|
|
99
|
+
assert response.status_code == 200
|
|
100
|
+
assert response.json() == {"fastapi_env": None}
|
|
101
|
+
|
|
102
|
+
|
|
56
103
|
def test_run_uses_uvicorn_default_log_config_without_rich_logs(
|
|
57
104
|
monkeypatch: pytest.MonkeyPatch,
|
|
58
105
|
) -> None:
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = "0.0.31"
|
|
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
|
|
File without changes
|
|
File without changes
|
{fastapi_cli-0.0.31 → fastapi_cli-0.0.32}/tests/assets/default_files/default_app_dir_api/app/api.py
RENAMED
|
File without changes
|
|
File without changes
|
{fastapi_cli-0.0.31 → fastapi_cli-0.0.32}/tests/assets/default_files/default_app_dir_app/app/api.py
RENAMED
|
File without changes
|
{fastapi_cli-0.0.31 → fastapi_cli-0.0.32}/tests/assets/default_files/default_app_dir_app/app/app.py
RENAMED
|
File without changes
|
|
File without changes
|
{fastapi_cli-0.0.31 → fastapi_cli-0.0.32}/tests/assets/default_files/default_app_dir_main/app/api.py
RENAMED
|
File without changes
|
{fastapi_cli-0.0.31 → fastapi_cli-0.0.32}/tests/assets/default_files/default_app_dir_main/app/app.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastapi_cli-0.0.31 → fastapi_cli-0.0.32}/tests/assets/default_files/non_default/nonstandard.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastapi_cli-0.0.31 → fastapi_cli-0.0.32}/tests/assets/nested_package/package/core/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{fastapi_cli-0.0.31 → fastapi_cli-0.0.32}/tests/assets/nested_package/package/mod/__init__.py
RENAMED
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|