fastapi-cli 0.0.11__tar.gz → 0.0.13__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.11 → fastapi_cli-0.0.13}/PKG-INFO +1 -1
- {fastapi_cli-0.0.11 → fastapi_cli-0.0.13}/pyproject.toml +1 -1
- {fastapi_cli-0.0.11 → fastapi_cli-0.0.13}/requirements-tests.txt +2 -2
- fastapi_cli-0.0.13/src/fastapi_cli/__init__.py +1 -0
- {fastapi_cli-0.0.11 → fastapi_cli-0.0.13}/src/fastapi_cli/cli.py +7 -3
- {fastapi_cli-0.0.11 → fastapi_cli-0.0.13}/tests/test_cli.py +126 -0
- fastapi_cli-0.0.11/src/fastapi_cli/__init__.py +0 -1
- {fastapi_cli-0.0.11 → fastapi_cli-0.0.13}/LICENSE +0 -0
- {fastapi_cli-0.0.11 → fastapi_cli-0.0.13}/README.md +0 -0
- {fastapi_cli-0.0.11 → fastapi_cli-0.0.13}/pdm_build.py +0 -0
- {fastapi_cli-0.0.11 → fastapi_cli-0.0.13}/requirements-github-actions.txt +0 -0
- {fastapi_cli-0.0.11 → fastapi_cli-0.0.13}/requirements.txt +0 -0
- {fastapi_cli-0.0.11 → fastapi_cli-0.0.13}/scripts/format.sh +0 -0
- {fastapi_cli-0.0.11 → fastapi_cli-0.0.13}/scripts/lint.sh +0 -0
- {fastapi_cli-0.0.11 → fastapi_cli-0.0.13}/scripts/test-cov-html.sh +0 -0
- {fastapi_cli-0.0.11 → fastapi_cli-0.0.13}/scripts/test.sh +0 -0
- {fastapi_cli-0.0.11 → fastapi_cli-0.0.13}/src/fastapi_cli/__main__.py +0 -0
- {fastapi_cli-0.0.11 → fastapi_cli-0.0.13}/src/fastapi_cli/discover.py +0 -0
- {fastapi_cli-0.0.11 → fastapi_cli-0.0.13}/src/fastapi_cli/exceptions.py +0 -0
- {fastapi_cli-0.0.11 → fastapi_cli-0.0.13}/src/fastapi_cli/logging.py +0 -0
- {fastapi_cli-0.0.11 → fastapi_cli-0.0.13}/src/fastapi_cli/py.typed +0 -0
- {fastapi_cli-0.0.11 → fastapi_cli-0.0.13}/src/fastapi_cli/utils/__init__.py +0 -0
- {fastapi_cli-0.0.11 → fastapi_cli-0.0.13}/src/fastapi_cli/utils/cli.py +0 -0
- {fastapi_cli-0.0.11 → fastapi_cli-0.0.13}/tests/__init__.py +0 -0
- {fastapi_cli-0.0.11 → fastapi_cli-0.0.13}/tests/assets/broken_package/mod/__init__.py +0 -0
- {fastapi_cli-0.0.11 → fastapi_cli-0.0.13}/tests/assets/broken_package/mod/app.py +0 -0
- {fastapi_cli-0.0.11 → fastapi_cli-0.0.13}/tests/assets/broken_package/utils.py +0 -0
- {fastapi_cli-0.0.11 → fastapi_cli-0.0.13}/tests/assets/default_files/default_api/api.py +0 -0
- {fastapi_cli-0.0.11 → fastapi_cli-0.0.13}/tests/assets/default_files/default_app/api.py +0 -0
- {fastapi_cli-0.0.11 → fastapi_cli-0.0.13}/tests/assets/default_files/default_app/app.py +0 -0
- {fastapi_cli-0.0.11 → fastapi_cli-0.0.13}/tests/assets/default_files/default_app_dir_api/app/__init__.py +0 -0
- {fastapi_cli-0.0.11 → fastapi_cli-0.0.13}/tests/assets/default_files/default_app_dir_api/app/api.py +0 -0
- {fastapi_cli-0.0.11 → fastapi_cli-0.0.13}/tests/assets/default_files/default_app_dir_app/app/__init__.py +0 -0
- {fastapi_cli-0.0.11 → fastapi_cli-0.0.13}/tests/assets/default_files/default_app_dir_app/app/api.py +0 -0
- {fastapi_cli-0.0.11 → fastapi_cli-0.0.13}/tests/assets/default_files/default_app_dir_app/app/app.py +0 -0
- {fastapi_cli-0.0.11 → fastapi_cli-0.0.13}/tests/assets/default_files/default_app_dir_main/app/__init__.py +0 -0
- {fastapi_cli-0.0.11 → fastapi_cli-0.0.13}/tests/assets/default_files/default_app_dir_main/app/api.py +0 -0
- {fastapi_cli-0.0.11 → fastapi_cli-0.0.13}/tests/assets/default_files/default_app_dir_main/app/app.py +0 -0
- {fastapi_cli-0.0.11 → fastapi_cli-0.0.13}/tests/assets/default_files/default_app_dir_main/app/main.py +0 -0
- {fastapi_cli-0.0.11 → fastapi_cli-0.0.13}/tests/assets/default_files/default_app_dir_non_default/app/__init__.py +0 -0
- {fastapi_cli-0.0.11 → fastapi_cli-0.0.13}/tests/assets/default_files/default_app_dir_non_default/app/nondefault.py +0 -0
- {fastapi_cli-0.0.11 → fastapi_cli-0.0.13}/tests/assets/default_files/default_main/api.py +0 -0
- {fastapi_cli-0.0.11 → fastapi_cli-0.0.13}/tests/assets/default_files/default_main/app.py +0 -0
- {fastapi_cli-0.0.11 → fastapi_cli-0.0.13}/tests/assets/default_files/default_main/main.py +0 -0
- {fastapi_cli-0.0.11 → fastapi_cli-0.0.13}/tests/assets/default_files/non_default/nonstandard.py +0 -0
- {fastapi_cli-0.0.11 → fastapi_cli-0.0.13}/tests/assets/nested_package/__init__.py +0 -0
- {fastapi_cli-0.0.11 → fastapi_cli-0.0.13}/tests/assets/nested_package/package/__init__.py +0 -0
- {fastapi_cli-0.0.11 → fastapi_cli-0.0.13}/tests/assets/nested_package/package/core/__init__.py +0 -0
- {fastapi_cli-0.0.11 → fastapi_cli-0.0.13}/tests/assets/nested_package/package/core/utils.py +0 -0
- {fastapi_cli-0.0.11 → fastapi_cli-0.0.13}/tests/assets/nested_package/package/mod/__init__.py +0 -0
- {fastapi_cli-0.0.11 → fastapi_cli-0.0.13}/tests/assets/nested_package/package/mod/api.py +0 -0
- {fastapi_cli-0.0.11 → fastapi_cli-0.0.13}/tests/assets/nested_package/package/mod/app.py +0 -0
- {fastapi_cli-0.0.11 → fastapi_cli-0.0.13}/tests/assets/nested_package/package/mod/other.py +0 -0
- {fastapi_cli-0.0.11 → fastapi_cli-0.0.13}/tests/assets/package/__init__.py +0 -0
- {fastapi_cli-0.0.11 → fastapi_cli-0.0.13}/tests/assets/package/core/__init__.py +0 -0
- {fastapi_cli-0.0.11 → fastapi_cli-0.0.13}/tests/assets/package/core/utils.py +0 -0
- {fastapi_cli-0.0.11 → fastapi_cli-0.0.13}/tests/assets/package/mod/__init__.py +0 -0
- {fastapi_cli-0.0.11 → fastapi_cli-0.0.13}/tests/assets/package/mod/api.py +0 -0
- {fastapi_cli-0.0.11 → fastapi_cli-0.0.13}/tests/assets/package/mod/app.py +0 -0
- {fastapi_cli-0.0.11 → fastapi_cli-0.0.13}/tests/assets/package/mod/other.py +0 -0
- {fastapi_cli-0.0.11 → fastapi_cli-0.0.13}/tests/assets/single_file_api.py +0 -0
- {fastapi_cli-0.0.11 → fastapi_cli-0.0.13}/tests/assets/single_file_app.py +0 -0
- {fastapi_cli-0.0.11 → fastapi_cli-0.0.13}/tests/assets/single_file_other.py +0 -0
- {fastapi_cli-0.0.11 → fastapi_cli-0.0.13}/tests/conftest.py +0 -0
- {fastapi_cli-0.0.11 → fastapi_cli-0.0.13}/tests/test_discover.py +0 -0
- {fastapi_cli-0.0.11 → fastapi_cli-0.0.13}/tests/test_requirements.py +0 -0
- {fastapi_cli-0.0.11 → fastapi_cli-0.0.13}/tests/test_utils_cli.py +0 -0
- {fastapi_cli-0.0.11 → fastapi_cli-0.0.13}/tests/test_utils_default_dir.py +0 -0
- {fastapi_cli-0.0.11 → fastapi_cli-0.0.13}/tests/test_utils_default_file.py +0 -0
- {fastapi_cli-0.0.11 → fastapi_cli-0.0.13}/tests/test_utils_package.py +0 -0
- {fastapi_cli-0.0.11 → fastapi_cli-0.0.13}/tests/test_utils_single_file.py +0 -0
- {fastapi_cli-0.0.11 → fastapi_cli-0.0.13}/tests/utils.py +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "0.0.13"
|
|
@@ -14,7 +14,9 @@ from . import __version__
|
|
|
14
14
|
from .logging import setup_logging
|
|
15
15
|
from .utils.cli import get_rich_toolkit, get_uvicorn_log_config
|
|
16
16
|
|
|
17
|
-
app = typer.Typer(
|
|
17
|
+
app = typer.Typer(
|
|
18
|
+
rich_markup_mode="rich", context_settings={"help_option_names": ["-h", "--help"]}
|
|
19
|
+
)
|
|
18
20
|
|
|
19
21
|
logger = logging.getLogger(__name__)
|
|
20
22
|
|
|
@@ -206,7 +208,8 @@ def dev(
|
|
|
206
208
|
port: Annotated[
|
|
207
209
|
int,
|
|
208
210
|
typer.Option(
|
|
209
|
-
help="The port to serve on. You would normally have a termination proxy on top (another program) handling HTTPS on port [blue]443[/blue] and HTTP on port [blue]80[/blue], transferring the communication to your app."
|
|
211
|
+
help="The port to serve on. You would normally have a termination proxy on top (another program) handling HTTPS on port [blue]443[/blue] and HTTP on port [blue]80[/blue], transferring the communication to your app.",
|
|
212
|
+
envvar="PORT",
|
|
210
213
|
),
|
|
211
214
|
] = 8000,
|
|
212
215
|
reload: Annotated[
|
|
@@ -305,7 +308,8 @@ def run(
|
|
|
305
308
|
port: Annotated[
|
|
306
309
|
int,
|
|
307
310
|
typer.Option(
|
|
308
|
-
help="The port to serve on. You would normally have a termination proxy on top (another program) handling HTTPS on port [blue]443[/blue] and HTTP on port [blue]80[/blue], transferring the communication to your app."
|
|
311
|
+
help="The port to serve on. You would normally have a termination proxy on top (another program) handling HTTPS on port [blue]443[/blue] and HTTP on port [blue]80[/blue], transferring the communication to your app.",
|
|
312
|
+
envvar="PORT",
|
|
309
313
|
),
|
|
310
314
|
] = 8000,
|
|
311
315
|
reload: Annotated[
|
|
@@ -122,6 +122,73 @@ def test_dev_args() -> None:
|
|
|
122
122
|
)
|
|
123
123
|
|
|
124
124
|
|
|
125
|
+
def test_dev_env_vars() -> None:
|
|
126
|
+
with changing_dir(assets_path):
|
|
127
|
+
with patch.object(uvicorn, "run") as mock_run:
|
|
128
|
+
result = runner.invoke(
|
|
129
|
+
app, ["dev", "single_file_app.py"], env={"PORT": "8111"}
|
|
130
|
+
)
|
|
131
|
+
assert result.exit_code == 0, result.output
|
|
132
|
+
assert mock_run.called
|
|
133
|
+
assert mock_run.call_args
|
|
134
|
+
assert mock_run.call_args.kwargs == {
|
|
135
|
+
"app": "single_file_app:app",
|
|
136
|
+
"host": "127.0.0.1",
|
|
137
|
+
"port": 8111,
|
|
138
|
+
"reload": True,
|
|
139
|
+
"workers": None,
|
|
140
|
+
"root_path": "",
|
|
141
|
+
"proxy_headers": True,
|
|
142
|
+
"forwarded_allow_ips": None,
|
|
143
|
+
"log_config": get_uvicorn_log_config(),
|
|
144
|
+
}
|
|
145
|
+
assert "Using import string: single_file_app:app" in result.output
|
|
146
|
+
assert "Starting development server 🚀" in result.output
|
|
147
|
+
assert "Server started at http://127.0.0.1:8111" in result.output
|
|
148
|
+
assert "Documentation at http://127.0.0.1:8111/docs" in result.output
|
|
149
|
+
assert (
|
|
150
|
+
"Running in development mode, for production use: fastapi run"
|
|
151
|
+
in result.output
|
|
152
|
+
)
|
|
153
|
+
|
|
154
|
+
|
|
155
|
+
def test_dev_env_vars_and_args() -> None:
|
|
156
|
+
with changing_dir(assets_path):
|
|
157
|
+
with patch.object(uvicorn, "run") as mock_run:
|
|
158
|
+
result = runner.invoke(
|
|
159
|
+
app,
|
|
160
|
+
[
|
|
161
|
+
"dev",
|
|
162
|
+
"single_file_app.py",
|
|
163
|
+
"--port",
|
|
164
|
+
"8080",
|
|
165
|
+
],
|
|
166
|
+
env={"PORT": "8111"},
|
|
167
|
+
)
|
|
168
|
+
assert result.exit_code == 0, result.output
|
|
169
|
+
assert mock_run.called
|
|
170
|
+
assert mock_run.call_args
|
|
171
|
+
assert mock_run.call_args.kwargs == {
|
|
172
|
+
"app": "single_file_app:app",
|
|
173
|
+
"host": "127.0.0.1",
|
|
174
|
+
"port": 8080,
|
|
175
|
+
"reload": True,
|
|
176
|
+
"workers": None,
|
|
177
|
+
"root_path": "",
|
|
178
|
+
"proxy_headers": True,
|
|
179
|
+
"forwarded_allow_ips": None,
|
|
180
|
+
"log_config": get_uvicorn_log_config(),
|
|
181
|
+
}
|
|
182
|
+
assert "Using import string: single_file_app:app" in result.output
|
|
183
|
+
assert "Starting development server 🚀" in result.output
|
|
184
|
+
assert "Server started at http://127.0.0.1:8080" in result.output
|
|
185
|
+
assert "Documentation at http://127.0.0.1:8080/docs" in result.output
|
|
186
|
+
assert (
|
|
187
|
+
"Running in development mode, for production use: fastapi run"
|
|
188
|
+
in result.output
|
|
189
|
+
)
|
|
190
|
+
|
|
191
|
+
|
|
125
192
|
def test_run() -> None:
|
|
126
193
|
with changing_dir(assets_path):
|
|
127
194
|
with patch.object(uvicorn, "run") as mock_run:
|
|
@@ -223,6 +290,65 @@ def test_run_args() -> None:
|
|
|
223
290
|
)
|
|
224
291
|
|
|
225
292
|
|
|
293
|
+
def test_run_env_vars() -> None:
|
|
294
|
+
with changing_dir(assets_path):
|
|
295
|
+
with patch.object(uvicorn, "run") as mock_run:
|
|
296
|
+
result = runner.invoke(
|
|
297
|
+
app, ["run", "single_file_app.py"], env={"PORT": "8111"}
|
|
298
|
+
)
|
|
299
|
+
assert result.exit_code == 0, result.output
|
|
300
|
+
assert mock_run.called
|
|
301
|
+
assert mock_run.call_args
|
|
302
|
+
assert mock_run.call_args.kwargs == {
|
|
303
|
+
"app": "single_file_app:app",
|
|
304
|
+
"host": "0.0.0.0",
|
|
305
|
+
"port": 8111,
|
|
306
|
+
"reload": False,
|
|
307
|
+
"workers": None,
|
|
308
|
+
"root_path": "",
|
|
309
|
+
"proxy_headers": True,
|
|
310
|
+
"forwarded_allow_ips": None,
|
|
311
|
+
"log_config": get_uvicorn_log_config(),
|
|
312
|
+
}
|
|
313
|
+
assert "Using import string: single_file_app:app" in result.output
|
|
314
|
+
assert "Starting production server 🚀" in result.output
|
|
315
|
+
assert "Server started at http://0.0.0.0:8111" in result.output
|
|
316
|
+
assert "Documentation at http://0.0.0.0:8111/docs" in result.output
|
|
317
|
+
|
|
318
|
+
|
|
319
|
+
def test_run_env_vars_and_args() -> None:
|
|
320
|
+
with changing_dir(assets_path):
|
|
321
|
+
with patch.object(uvicorn, "run") as mock_run:
|
|
322
|
+
result = runner.invoke(
|
|
323
|
+
app,
|
|
324
|
+
[
|
|
325
|
+
"run",
|
|
326
|
+
"single_file_app.py",
|
|
327
|
+
"--port",
|
|
328
|
+
"8080",
|
|
329
|
+
],
|
|
330
|
+
env={"PORT": "8111"},
|
|
331
|
+
)
|
|
332
|
+
assert result.exit_code == 0, result.output
|
|
333
|
+
assert mock_run.called
|
|
334
|
+
assert mock_run.call_args
|
|
335
|
+
assert mock_run.call_args.kwargs == {
|
|
336
|
+
"app": "single_file_app:app",
|
|
337
|
+
"host": "0.0.0.0",
|
|
338
|
+
"port": 8080,
|
|
339
|
+
"reload": False,
|
|
340
|
+
"workers": None,
|
|
341
|
+
"root_path": "",
|
|
342
|
+
"proxy_headers": True,
|
|
343
|
+
"forwarded_allow_ips": None,
|
|
344
|
+
"log_config": get_uvicorn_log_config(),
|
|
345
|
+
}
|
|
346
|
+
assert "Using import string: single_file_app:app" in result.output
|
|
347
|
+
assert "Starting production server 🚀" in result.output
|
|
348
|
+
assert "Server started at http://0.0.0.0:8080" in result.output
|
|
349
|
+
assert "Documentation at http://0.0.0.0:8080/docs" in result.output
|
|
350
|
+
|
|
351
|
+
|
|
226
352
|
def test_run_error() -> None:
|
|
227
353
|
with changing_dir(assets_path):
|
|
228
354
|
result = runner.invoke(app, ["run", "non_existing_file.py"])
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = "0.0.11"
|
|
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
|
{fastapi_cli-0.0.11 → fastapi_cli-0.0.13}/tests/assets/default_files/default_app_dir_api/app/api.py
RENAMED
|
File without changes
|
|
File without changes
|
{fastapi_cli-0.0.11 → fastapi_cli-0.0.13}/tests/assets/default_files/default_app_dir_app/app/api.py
RENAMED
|
File without changes
|
{fastapi_cli-0.0.11 → fastapi_cli-0.0.13}/tests/assets/default_files/default_app_dir_app/app/app.py
RENAMED
|
File without changes
|
|
File without changes
|
{fastapi_cli-0.0.11 → fastapi_cli-0.0.13}/tests/assets/default_files/default_app_dir_main/app/api.py
RENAMED
|
File without changes
|
{fastapi_cli-0.0.11 → fastapi_cli-0.0.13}/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.11 → fastapi_cli-0.0.13}/tests/assets/default_files/non_default/nonstandard.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastapi_cli-0.0.11 → fastapi_cli-0.0.13}/tests/assets/nested_package/package/core/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{fastapi_cli-0.0.11 → fastapi_cli-0.0.13}/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
|