From d6ecddac6723c3b1f02d8a032724eef4aeb6cffa Mon Sep 17 00:00:00 2001 From: Khaleel Al-Adhami Date: Thu, 13 Feb 2025 15:33:22 -0800 Subject: [PATCH 1/3] relax reload_dirs to allow files, and stop adding cwd when reload_dirs is set --- uvicorn/config.py | 2 +- uvicorn/supervisors/watchfilesreload.py | 5 +---- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/uvicorn/config.py b/uvicorn/config.py index 2d2570e8a..b2d5ec9f4 100644 --- a/uvicorn/config.py +++ b/uvicorn/config.py @@ -150,7 +150,7 @@ def resolve_reload_patterns(patterns_list: list[str], directories_list: list[str directories = list(set(directories)) directories = list(map(Path, directories)) directories = list(map(lambda x: x.resolve(), directories)) - directories = list({reload_path for reload_path in directories if is_dir(reload_path)}) + directories = list(set(directories)) children = [] for j in range(len(directories)): diff --git a/uvicorn/supervisors/watchfilesreload.py b/uvicorn/supervisors/watchfilesreload.py index 0d3b9b77e..c13dc745a 100644 --- a/uvicorn/supervisors/watchfilesreload.py +++ b/uvicorn/supervisors/watchfilesreload.py @@ -63,10 +63,7 @@ def __init__( self.reloader_name = "WatchFiles" self.reload_dirs = [] for directory in config.reload_dirs: - if Path.cwd() not in directory.parents: - self.reload_dirs.append(directory) - if Path.cwd() not in self.reload_dirs: - self.reload_dirs.append(Path.cwd()) + self.reload_dirs.append(directory) self.watch_filter = FileFilter(config) self.watcher = watch( From 6b6316f4b40a804690ddc7d5ffbc0a7452b24db6 Mon Sep 17 00:00:00 2001 From: Khaleel Al-Adhami Date: Thu, 13 Feb 2025 16:20:29 -0800 Subject: [PATCH 2/3] add filter to path exists --- uvicorn/config.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/uvicorn/config.py b/uvicorn/config.py index b2d5ec9f4..af12f24c2 100644 --- a/uvicorn/config.py +++ b/uvicorn/config.py @@ -150,7 +150,7 @@ def resolve_reload_patterns(patterns_list: list[str], directories_list: list[str directories = list(set(directories)) directories = list(map(Path, directories)) directories = list(map(lambda x: x.resolve(), directories)) - directories = list(set(directories)) + directories = list(set(filter(Path.exists, directories))) children = [] for j in range(len(directories)): From 16d9000ec24932482d9c452092d1a72481270789 Mon Sep 17 00:00:00 2001 From: Khaleel Al-Adhami Date: Thu, 13 Feb 2025 17:05:19 -0800 Subject: [PATCH 3/3] adjust tests to new behavior --- tests/supervisors/test_reload.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/tests/supervisors/test_reload.py b/tests/supervisors/test_reload.py index 44eb9970b..74318b374 100644 --- a/tests/supervisors/test_reload.py +++ b/tests/supervisors/test_reload.py @@ -315,7 +315,10 @@ def test_should_watch_one_dir_cwd(mocker: MockerFixture, reload_directory_struct ) WatchFilesReload(config, target=run, sockets=[]) mock_watch.assert_called_once() - assert mock_watch.call_args[0] == (Path.cwd(),) + assert set(mock_watch.call_args[0]) == { + app_first_dir, + app_dir, + } @pytest.mark.skipif(WatchFilesReload is None, reason="watchfiles not available") @@ -333,7 +336,6 @@ def test_should_watch_separate_dirs_outside_cwd(mocker: MockerFixture, reload_di assert set(mock_watch.call_args[0]) == { app_dir, app_first_dir, - Path.cwd(), }