fastapi-cli 0.0.19__tar.gz → 0.0.20__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.19 → fastapi_cli-0.0.20}/PKG-INFO +1 -1
- {fastapi_cli-0.0.19 → fastapi_cli-0.0.20}/pyproject.toml +1 -1
- fastapi_cli-0.0.20/src/fastapi_cli/__init__.py +1 -0
- {fastapi_cli-0.0.19 → fastapi_cli-0.0.20}/src/fastapi_cli/cli.py +13 -0
- {fastapi_cli-0.0.19 → fastapi_cli-0.0.20}/tests/test_cli.py +37 -0
- fastapi_cli-0.0.19/src/fastapi_cli/__init__.py +0 -1
- {fastapi_cli-0.0.19 → fastapi_cli-0.0.20}/LICENSE +0 -0
- {fastapi_cli-0.0.19 → fastapi_cli-0.0.20}/README.md +0 -0
- {fastapi_cli-0.0.19 → fastapi_cli-0.0.20}/pdm_build.py +0 -0
- {fastapi_cli-0.0.19 → fastapi_cli-0.0.20}/requirements-github-actions.txt +0 -0
- {fastapi_cli-0.0.19 → fastapi_cli-0.0.20}/requirements-tests.txt +0 -0
- {fastapi_cli-0.0.19 → fastapi_cli-0.0.20}/requirements.txt +0 -0
- {fastapi_cli-0.0.19 → fastapi_cli-0.0.20}/scripts/format.sh +0 -0
- {fastapi_cli-0.0.19 → fastapi_cli-0.0.20}/scripts/lint.sh +0 -0
- {fastapi_cli-0.0.19 → fastapi_cli-0.0.20}/scripts/test-cov-html.sh +0 -0
- {fastapi_cli-0.0.19 → fastapi_cli-0.0.20}/scripts/test.sh +0 -0
- {fastapi_cli-0.0.19 → fastapi_cli-0.0.20}/src/fastapi_cli/__main__.py +0 -0
- {fastapi_cli-0.0.19 → fastapi_cli-0.0.20}/src/fastapi_cli/config.py +0 -0
- {fastapi_cli-0.0.19 → fastapi_cli-0.0.20}/src/fastapi_cli/discover.py +0 -0
- {fastapi_cli-0.0.19 → fastapi_cli-0.0.20}/src/fastapi_cli/exceptions.py +0 -0
- {fastapi_cli-0.0.19 → fastapi_cli-0.0.20}/src/fastapi_cli/logging.py +0 -0
- {fastapi_cli-0.0.19 → fastapi_cli-0.0.20}/src/fastapi_cli/py.typed +0 -0
- {fastapi_cli-0.0.19 → fastapi_cli-0.0.20}/src/fastapi_cli/utils/__init__.py +0 -0
- {fastapi_cli-0.0.19 → fastapi_cli-0.0.20}/src/fastapi_cli/utils/cli.py +0 -0
- {fastapi_cli-0.0.19 → fastapi_cli-0.0.20}/tests/__init__.py +0 -0
- {fastapi_cli-0.0.19 → fastapi_cli-0.0.20}/tests/assets/broken_package/mod/__init__.py +0 -0
- {fastapi_cli-0.0.19 → fastapi_cli-0.0.20}/tests/assets/broken_package/mod/app.py +0 -0
- {fastapi_cli-0.0.19 → fastapi_cli-0.0.20}/tests/assets/broken_package/utils.py +0 -0
- {fastapi_cli-0.0.19 → fastapi_cli-0.0.20}/tests/assets/default_files/default_api/api.py +0 -0
- {fastapi_cli-0.0.19 → fastapi_cli-0.0.20}/tests/assets/default_files/default_app/api.py +0 -0
- {fastapi_cli-0.0.19 → fastapi_cli-0.0.20}/tests/assets/default_files/default_app/app.py +0 -0
- {fastapi_cli-0.0.19 → fastapi_cli-0.0.20}/tests/assets/default_files/default_app_dir_api/app/__init__.py +0 -0
- {fastapi_cli-0.0.19 → fastapi_cli-0.0.20}/tests/assets/default_files/default_app_dir_api/app/api.py +0 -0
- {fastapi_cli-0.0.19 → fastapi_cli-0.0.20}/tests/assets/default_files/default_app_dir_app/app/__init__.py +0 -0
- {fastapi_cli-0.0.19 → fastapi_cli-0.0.20}/tests/assets/default_files/default_app_dir_app/app/api.py +0 -0
- {fastapi_cli-0.0.19 → fastapi_cli-0.0.20}/tests/assets/default_files/default_app_dir_app/app/app.py +0 -0
- {fastapi_cli-0.0.19 → fastapi_cli-0.0.20}/tests/assets/default_files/default_app_dir_main/app/__init__.py +0 -0
- {fastapi_cli-0.0.19 → fastapi_cli-0.0.20}/tests/assets/default_files/default_app_dir_main/app/api.py +0 -0
- {fastapi_cli-0.0.19 → fastapi_cli-0.0.20}/tests/assets/default_files/default_app_dir_main/app/app.py +0 -0
- {fastapi_cli-0.0.19 → fastapi_cli-0.0.20}/tests/assets/default_files/default_app_dir_main/app/main.py +0 -0
- {fastapi_cli-0.0.19 → fastapi_cli-0.0.20}/tests/assets/default_files/default_app_dir_non_default/app/__init__.py +0 -0
- {fastapi_cli-0.0.19 → fastapi_cli-0.0.20}/tests/assets/default_files/default_app_dir_non_default/app/nondefault.py +0 -0
- {fastapi_cli-0.0.19 → fastapi_cli-0.0.20}/tests/assets/default_files/default_main/api.py +0 -0
- {fastapi_cli-0.0.19 → fastapi_cli-0.0.20}/tests/assets/default_files/default_main/app.py +0 -0
- {fastapi_cli-0.0.19 → fastapi_cli-0.0.20}/tests/assets/default_files/default_main/main.py +0 -0
- {fastapi_cli-0.0.19 → fastapi_cli-0.0.20}/tests/assets/default_files/non_default/nonstandard.py +0 -0
- {fastapi_cli-0.0.19 → fastapi_cli-0.0.20}/tests/assets/nested_package/__init__.py +0 -0
- {fastapi_cli-0.0.19 → fastapi_cli-0.0.20}/tests/assets/nested_package/package/__init__.py +0 -0
- {fastapi_cli-0.0.19 → fastapi_cli-0.0.20}/tests/assets/nested_package/package/core/__init__.py +0 -0
- {fastapi_cli-0.0.19 → fastapi_cli-0.0.20}/tests/assets/nested_package/package/core/utils.py +0 -0
- {fastapi_cli-0.0.19 → fastapi_cli-0.0.20}/tests/assets/nested_package/package/mod/__init__.py +0 -0
- {fastapi_cli-0.0.19 → fastapi_cli-0.0.20}/tests/assets/nested_package/package/mod/api.py +0 -0
- {fastapi_cli-0.0.19 → fastapi_cli-0.0.20}/tests/assets/nested_package/package/mod/app.py +0 -0
- {fastapi_cli-0.0.19 → fastapi_cli-0.0.20}/tests/assets/nested_package/package/mod/other.py +0 -0
- {fastapi_cli-0.0.19 → fastapi_cli-0.0.20}/tests/assets/package/__init__.py +0 -0
- {fastapi_cli-0.0.19 → fastapi_cli-0.0.20}/tests/assets/package/core/__init__.py +0 -0
- {fastapi_cli-0.0.19 → fastapi_cli-0.0.20}/tests/assets/package/core/utils.py +0 -0
- {fastapi_cli-0.0.19 → fastapi_cli-0.0.20}/tests/assets/package/mod/__init__.py +0 -0
- {fastapi_cli-0.0.19 → fastapi_cli-0.0.20}/tests/assets/package/mod/api.py +0 -0
- {fastapi_cli-0.0.19 → fastapi_cli-0.0.20}/tests/assets/package/mod/app.py +0 -0
- {fastapi_cli-0.0.19 → fastapi_cli-0.0.20}/tests/assets/package/mod/other.py +0 -0
- {fastapi_cli-0.0.19 → fastapi_cli-0.0.20}/tests/assets/pyproject_config/another_module.py +0 -0
- {fastapi_cli-0.0.19 → fastapi_cli-0.0.20}/tests/assets/pyproject_config/my_module.py +0 -0
- {fastapi_cli-0.0.19 → fastapi_cli-0.0.20}/tests/assets/pyproject_config/pyproject.toml +0 -0
- {fastapi_cli-0.0.19 → fastapi_cli-0.0.20}/tests/assets/single_file_api.py +0 -0
- {fastapi_cli-0.0.19 → fastapi_cli-0.0.20}/tests/assets/single_file_app.py +0 -0
- {fastapi_cli-0.0.19 → fastapi_cli-0.0.20}/tests/assets/single_file_other.py +0 -0
- {fastapi_cli-0.0.19 → fastapi_cli-0.0.20}/tests/conftest.py +0 -0
- {fastapi_cli-0.0.19 → fastapi_cli-0.0.20}/tests/test_cli_pyproject.py +0 -0
- {fastapi_cli-0.0.19 → fastapi_cli-0.0.20}/tests/test_discover.py +0 -0
- {fastapi_cli-0.0.19 → fastapi_cli-0.0.20}/tests/test_requirements.py +0 -0
- {fastapi_cli-0.0.19 → fastapi_cli-0.0.20}/tests/test_utils_cli.py +0 -0
- {fastapi_cli-0.0.19 → fastapi_cli-0.0.20}/tests/test_utils_default_dir.py +0 -0
- {fastapi_cli-0.0.19 → fastapi_cli-0.0.20}/tests/test_utils_default_file.py +0 -0
- {fastapi_cli-0.0.19 → fastapi_cli-0.0.20}/tests/test_utils_package.py +0 -0
- {fastapi_cli-0.0.19 → fastapi_cli-0.0.20}/tests/test_utils_single_file.py +0 -0
- {fastapi_cli-0.0.19 → fastapi_cli-0.0.20}/tests/utils.py +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "0.0.20"
|
|
@@ -104,6 +104,7 @@ def _run(
|
|
|
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,
|
|
107
108
|
workers: Union[int, None] = None,
|
|
108
109
|
root_path: str = "",
|
|
109
110
|
command: str,
|
|
@@ -219,6 +220,11 @@ def _run(
|
|
|
219
220
|
host=host,
|
|
220
221
|
port=port,
|
|
221
222
|
reload=reload,
|
|
223
|
+
reload_dirs=(
|
|
224
|
+
[str(directory.resolve()) for directory in reload_dirs]
|
|
225
|
+
if reload_dirs
|
|
226
|
+
else None
|
|
227
|
+
),
|
|
222
228
|
workers=workers,
|
|
223
229
|
root_path=root_path,
|
|
224
230
|
proxy_headers=proxy_headers,
|
|
@@ -255,6 +261,12 @@ def dev(
|
|
|
255
261
|
help="Enable auto-reload of the server when (code) files change. This is [bold]resource intensive[/bold], use it only during development."
|
|
256
262
|
),
|
|
257
263
|
] = True,
|
|
264
|
+
reload_dir: Annotated[
|
|
265
|
+
Union[list[Path], None],
|
|
266
|
+
typer.Option(
|
|
267
|
+
help="Set reload directories explicitly, instead of using the current working directory."
|
|
268
|
+
),
|
|
269
|
+
] = None,
|
|
258
270
|
root_path: Annotated[
|
|
259
271
|
str,
|
|
260
272
|
typer.Option(
|
|
@@ -318,6 +330,7 @@ def dev(
|
|
|
318
330
|
host=host,
|
|
319
331
|
port=port,
|
|
320
332
|
reload=reload,
|
|
333
|
+
reload_dirs=reload_dir,
|
|
321
334
|
root_path=root_path,
|
|
322
335
|
app=app,
|
|
323
336
|
entrypoint=entrypoint,
|
|
@@ -27,6 +27,7 @@ def test_dev() -> None:
|
|
|
27
27
|
"host": "127.0.0.1",
|
|
28
28
|
"port": 8000,
|
|
29
29
|
"reload": True,
|
|
30
|
+
"reload_dirs": None,
|
|
30
31
|
"workers": None,
|
|
31
32
|
"root_path": "",
|
|
32
33
|
"proxy_headers": True,
|
|
@@ -72,6 +73,7 @@ def test_dev_package() -> None:
|
|
|
72
73
|
"host": "127.0.0.1",
|
|
73
74
|
"port": 8000,
|
|
74
75
|
"reload": True,
|
|
76
|
+
"reload_dirs": None,
|
|
75
77
|
"workers": None,
|
|
76
78
|
"root_path": "",
|
|
77
79
|
"proxy_headers": True,
|
|
@@ -121,6 +123,7 @@ def test_dev_args() -> None:
|
|
|
121
123
|
"host": "192.168.0.2",
|
|
122
124
|
"port": 8080,
|
|
123
125
|
"reload": False,
|
|
126
|
+
"reload_dirs": None,
|
|
124
127
|
"workers": None,
|
|
125
128
|
"root_path": "/api",
|
|
126
129
|
"proxy_headers": False,
|
|
@@ -151,6 +154,7 @@ def test_dev_env_vars() -> None:
|
|
|
151
154
|
"host": "127.0.0.1",
|
|
152
155
|
"port": 8111,
|
|
153
156
|
"reload": True,
|
|
157
|
+
"reload_dirs": None,
|
|
154
158
|
"workers": None,
|
|
155
159
|
"root_path": "",
|
|
156
160
|
"proxy_headers": True,
|
|
@@ -188,6 +192,7 @@ def test_dev_env_vars_and_args() -> None:
|
|
|
188
192
|
"host": "127.0.0.1",
|
|
189
193
|
"port": 8080,
|
|
190
194
|
"reload": True,
|
|
195
|
+
"reload_dirs": None,
|
|
191
196
|
"workers": None,
|
|
192
197
|
"root_path": "",
|
|
193
198
|
"proxy_headers": True,
|
|
@@ -233,6 +238,7 @@ def test_run() -> None:
|
|
|
233
238
|
"host": "0.0.0.0",
|
|
234
239
|
"port": 8000,
|
|
235
240
|
"reload": False,
|
|
241
|
+
"reload_dirs": None,
|
|
236
242
|
"workers": None,
|
|
237
243
|
"root_path": "",
|
|
238
244
|
"proxy_headers": True,
|
|
@@ -259,6 +265,7 @@ def test_run_trust_proxy() -> None:
|
|
|
259
265
|
"host": "0.0.0.0",
|
|
260
266
|
"port": 8000,
|
|
261
267
|
"reload": False,
|
|
268
|
+
"reload_dirs": None,
|
|
262
269
|
"workers": None,
|
|
263
270
|
"root_path": "",
|
|
264
271
|
"proxy_headers": True,
|
|
@@ -305,6 +312,7 @@ def test_run_args() -> None:
|
|
|
305
312
|
"host": "192.168.0.2",
|
|
306
313
|
"port": 8080,
|
|
307
314
|
"reload": False,
|
|
315
|
+
"reload_dirs": None,
|
|
308
316
|
"workers": 2,
|
|
309
317
|
"root_path": "/api",
|
|
310
318
|
"proxy_headers": False,
|
|
@@ -336,6 +344,7 @@ def test_run_env_vars() -> None:
|
|
|
336
344
|
"host": "0.0.0.0",
|
|
337
345
|
"port": 8111,
|
|
338
346
|
"reload": False,
|
|
347
|
+
"reload_dirs": None,
|
|
339
348
|
"workers": None,
|
|
340
349
|
"root_path": "",
|
|
341
350
|
"proxy_headers": True,
|
|
@@ -369,6 +378,7 @@ def test_run_env_vars_and_args() -> None:
|
|
|
369
378
|
"host": "0.0.0.0",
|
|
370
379
|
"port": 8080,
|
|
371
380
|
"reload": False,
|
|
381
|
+
"reload_dirs": None,
|
|
372
382
|
"workers": None,
|
|
373
383
|
"root_path": "",
|
|
374
384
|
"proxy_headers": True,
|
|
@@ -404,6 +414,7 @@ def test_dev_help() -> None:
|
|
|
404
414
|
assert "The host to serve on." in result.output
|
|
405
415
|
assert "The port to serve on." in result.output
|
|
406
416
|
assert "Enable auto-reload of the server when (code) files change." in result.output
|
|
417
|
+
assert "Set reload directories explicitly" in result.output
|
|
407
418
|
assert "The root path is used to tell your app" in result.output
|
|
408
419
|
assert "The name of the variable that contains the FastAPI app" in result.output
|
|
409
420
|
assert "Use multiple worker processes." not in result.output
|
|
@@ -443,6 +454,30 @@ def test_version() -> None:
|
|
|
443
454
|
assert "FastAPI CLI version:" in result.output
|
|
444
455
|
|
|
445
456
|
|
|
457
|
+
def test_dev_reload_dir() -> None:
|
|
458
|
+
with changing_dir(assets_path):
|
|
459
|
+
with patch.object(uvicorn, "run") as mock_run:
|
|
460
|
+
result = runner.invoke(
|
|
461
|
+
app,
|
|
462
|
+
[
|
|
463
|
+
"dev",
|
|
464
|
+
"single_file_app.py",
|
|
465
|
+
"--reload-dir",
|
|
466
|
+
"src",
|
|
467
|
+
"--reload-dir",
|
|
468
|
+
"lib",
|
|
469
|
+
],
|
|
470
|
+
)
|
|
471
|
+
assert result.exit_code == 0, result.output
|
|
472
|
+
assert mock_run.called
|
|
473
|
+
assert mock_run.call_args
|
|
474
|
+
# Paths are resolved to absolute paths
|
|
475
|
+
reload_dirs = mock_run.call_args.kwargs["reload_dirs"]
|
|
476
|
+
assert len(reload_dirs) == 2
|
|
477
|
+
assert reload_dirs[0] == str((assets_path / "src").resolve())
|
|
478
|
+
assert reload_dirs[1] == str((assets_path / "lib").resolve())
|
|
479
|
+
|
|
480
|
+
|
|
446
481
|
def test_dev_with_import_string() -> None:
|
|
447
482
|
with changing_dir(assets_path):
|
|
448
483
|
with patch.object(uvicorn, "run") as mock_run:
|
|
@@ -456,6 +491,7 @@ def test_dev_with_import_string() -> None:
|
|
|
456
491
|
"host": "127.0.0.1",
|
|
457
492
|
"port": 8000,
|
|
458
493
|
"reload": True,
|
|
494
|
+
"reload_dirs": None,
|
|
459
495
|
"workers": None,
|
|
460
496
|
"root_path": "",
|
|
461
497
|
"proxy_headers": True,
|
|
@@ -477,6 +513,7 @@ def test_run_with_import_string() -> None:
|
|
|
477
513
|
"host": "0.0.0.0",
|
|
478
514
|
"port": 8000,
|
|
479
515
|
"reload": False,
|
|
516
|
+
"reload_dirs": None,
|
|
480
517
|
"workers": None,
|
|
481
518
|
"root_path": "",
|
|
482
519
|
"proxy_headers": True,
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = "0.0.19"
|
|
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
|
{fastapi_cli-0.0.19 → fastapi_cli-0.0.20}/tests/assets/default_files/default_app_dir_api/app/api.py
RENAMED
|
File without changes
|
|
File without changes
|
{fastapi_cli-0.0.19 → fastapi_cli-0.0.20}/tests/assets/default_files/default_app_dir_app/app/api.py
RENAMED
|
File without changes
|
{fastapi_cli-0.0.19 → fastapi_cli-0.0.20}/tests/assets/default_files/default_app_dir_app/app/app.py
RENAMED
|
File without changes
|
|
File without changes
|
{fastapi_cli-0.0.19 → fastapi_cli-0.0.20}/tests/assets/default_files/default_app_dir_main/app/api.py
RENAMED
|
File without changes
|
{fastapi_cli-0.0.19 → fastapi_cli-0.0.20}/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.19 → fastapi_cli-0.0.20}/tests/assets/default_files/non_default/nonstandard.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastapi_cli-0.0.19 → fastapi_cli-0.0.20}/tests/assets/nested_package/package/core/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{fastapi_cli-0.0.19 → fastapi_cli-0.0.20}/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
|