From ee777ea18f371705eb1ebe29676c9a4cb8b81f0e Mon Sep 17 00:00:00 2001 From: DUDHAT HEMIL PRAVINKUMAR <138382078+Hemil36@users.noreply.github.com> Date: Mon, 22 Sep 2025 12:01:42 +0530 Subject: [PATCH 1/3] Improves folder change detection and streamlines logging Enhances logic to better identify and handle deletions of watched folders, ensuring that image deletions within these folders also trigger appropriate sync actions. --- sync-microservice/app/utils/watcher.py | 37 ++++++++++---------------- 1 file changed, 14 insertions(+), 23 deletions(-) diff --git a/sync-microservice/app/utils/watcher.py b/sync-microservice/app/utils/watcher.py index b71b53755..a7e521bc6 100644 --- a/sync-microservice/app/utils/watcher.py +++ b/sync-microservice/app/utils/watcher.py @@ -49,17 +49,19 @@ def watcher_util_handle_file_changes(changes: set) -> None: for change, file_path in changes: print(f"File change detected: {change} - {file_path}") + # Check if this is a deleted folder that we're watching + is_deleted_watched_folder = False if change == Change.deleted: deleted_folder_id = watcher_util_get_folder_id_if_watched(file_path) if deleted_folder_id: - print( - f" Watched folder deleted: {file_path} (ID: {deleted_folder_id})" - ) + print(f" Watched folder deleted: {file_path} (ID: {deleted_folder_id})") deleted_folder_ids.append(deleted_folder_id) - else: - closest_folder = watcher_util_find_closest_parent_folder( - file_path, watched_folders - ) + is_deleted_watched_folder = True + + # Execute for additions, modifications, and also for deleted image files within watched folders + # (ensuring image deletions trigger a sync of their parent folders) + if not is_deleted_watched_folder: + closest_folder = watcher_util_find_closest_parent_folder(file_path, watched_folders) if closest_folder: folder_id, folder_path = closest_folder @@ -76,9 +78,7 @@ def watcher_util_handle_file_changes(changes: set) -> None: watcher_util_restart_folder_watcher() -def watcher_util_find_closest_parent_folder( - file_path: str, watched_folders: List[FolderIdPath] -) -> Optional[Tuple[str, str]]: +def watcher_util_find_closest_parent_folder(file_path: str, watched_folders: List[FolderIdPath]) -> Optional[Tuple[str, str]]: """ Find the closest parent folder for a given file path from the watched folders. @@ -130,9 +130,7 @@ def watcher_util_call_sync_folder_api(folder_id: str, folder_path: str) -> None: if response.status_code == 200: print(f"Successfully synced folder {folder_path} (ID: {folder_id})") else: - print( - f"Failed to sync folder {folder_path}. Status: {response.status_code}, Response: {response.text}" - ) + print(f"Failed to sync folder {folder_path}. Status: {response.status_code}, Response: {response.text}") except httpx.RequestError as e: print(f"Network error while syncing folder {folder_path}: {e}") @@ -157,9 +155,7 @@ def watcher_util_call_delete_folders_api(folder_ids: List[str]) -> None: if response.status_code == 200: print(f"Successfully deleted folders with IDs: {folder_ids}") else: - print( - f"Failed to delete folders. Status: {response.status_code}, Response: {response.text}" - ) + print(f"Failed to delete folders. Status: {response.status_code}, Response: {response.text}") except httpx.RequestError as e: print(f"Network error while deleting folders {folder_ids}: {e}") @@ -244,9 +240,7 @@ def watcher_util_start_folder_watcher() -> bool: return False watched_folders = existing_folders - folder_id_map = { - folder_path: folder_id for folder_id, folder_path in existing_folders - } + folder_id_map = {folder_path: folder_id for folder_id, folder_path in existing_folders} folder_paths = [folder_path for _, folder_path in existing_folders] @@ -321,10 +315,7 @@ def watcher_util_get_watcher_info() -> dict: "folders_count": len(watched_folders), "thread_alive": watcher_thread.is_alive() if watcher_thread else False, "thread_id": watcher_thread.ident if watcher_thread else None, - "watched_folders": [ - {"id": folder_id, "path": folder_path} - for folder_id, folder_path in watched_folders - ], + "watched_folders": [{"id": folder_id, "path": folder_path} for folder_id, folder_path in watched_folders], } From 105cf93361b88801359d0faff0d9c2d1a6b97014 Mon Sep 17 00:00:00 2001 From: DUDHAT HEMIL PRAVINKUMAR <138382078+Hemil36@users.noreply.github.com> Date: Mon, 22 Sep 2025 12:07:25 +0530 Subject: [PATCH 2/3] Linting Error Fixed --- sync-microservice/app/utils/watcher.py | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/sync-microservice/app/utils/watcher.py b/sync-microservice/app/utils/watcher.py index a7e521bc6..916e442ad 100644 --- a/sync-microservice/app/utils/watcher.py +++ b/sync-microservice/app/utils/watcher.py @@ -78,7 +78,9 @@ def watcher_util_handle_file_changes(changes: set) -> None: watcher_util_restart_folder_watcher() -def watcher_util_find_closest_parent_folder(file_path: str, watched_folders: List[FolderIdPath]) -> Optional[Tuple[str, str]]: +def watcher_util_find_closest_parent_folder( + file_path: str, watched_folders: List[FolderIdPath] +) -> Optional[Tuple[str, str]]: """ Find the closest parent folder for a given file path from the watched folders. @@ -130,7 +132,9 @@ def watcher_util_call_sync_folder_api(folder_id: str, folder_path: str) -> None: if response.status_code == 200: print(f"Successfully synced folder {folder_path} (ID: {folder_id})") else: - print(f"Failed to sync folder {folder_path}. Status: {response.status_code}, Response: {response.text}") + print( + f"Failed to sync folder {folder_path}. Status: {response.status_code}, Response: {response.text}" + ) except httpx.RequestError as e: print(f"Network error while syncing folder {folder_path}: {e}") @@ -155,7 +159,9 @@ def watcher_util_call_delete_folders_api(folder_ids: List[str]) -> None: if response.status_code == 200: print(f"Successfully deleted folders with IDs: {folder_ids}") else: - print(f"Failed to delete folders. Status: {response.status_code}, Response: {response.text}") + print( + f"Failed to delete folders. Status: {response.status_code}, Response: {response.text}" + ) except httpx.RequestError as e: print(f"Network error while deleting folders {folder_ids}: {e}") @@ -240,7 +246,9 @@ def watcher_util_start_folder_watcher() -> bool: return False watched_folders = existing_folders - folder_id_map = {folder_path: folder_id for folder_id, folder_path in existing_folders} + folder_id_map = { + folder_path: folder_id for folder_id, folder_path in existing_folders + } folder_paths = [folder_path for _, folder_path in existing_folders] @@ -315,7 +323,10 @@ def watcher_util_get_watcher_info() -> dict: "folders_count": len(watched_folders), "thread_alive": watcher_thread.is_alive() if watcher_thread else False, "thread_id": watcher_thread.ident if watcher_thread else None, - "watched_folders": [{"id": folder_id, "path": folder_path} for folder_id, folder_path in watched_folders], + "watched_folders": [ + {"id": folder_id, "path": folder_path} + for folder_id, folder_path in watched_folders + ], } @@ -350,4 +361,4 @@ def main(): else: print("Failed to start watcher") - print("Example finished") + print("Example finished") \ No newline at end of file From 837526f911f3f5c286ffd863e88fe76aa61094ea Mon Sep 17 00:00:00 2001 From: DUDHAT HEMIL PRAVINKUMAR <138382078+Hemil36@users.noreply.github.com> Date: Mon, 22 Sep 2025 12:53:02 +0530 Subject: [PATCH 3/3] Black Linting Error Fixed --- sync-microservice/app/utils/watcher.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/sync-microservice/app/utils/watcher.py b/sync-microservice/app/utils/watcher.py index 916e442ad..a4915d70c 100644 --- a/sync-microservice/app/utils/watcher.py +++ b/sync-microservice/app/utils/watcher.py @@ -54,14 +54,18 @@ def watcher_util_handle_file_changes(changes: set) -> None: if change == Change.deleted: deleted_folder_id = watcher_util_get_folder_id_if_watched(file_path) if deleted_folder_id: - print(f" Watched folder deleted: {file_path} (ID: {deleted_folder_id})") + print( + f" Watched folder deleted: {file_path} (ID: {deleted_folder_id})" + ) deleted_folder_ids.append(deleted_folder_id) is_deleted_watched_folder = True # Execute for additions, modifications, and also for deleted image files within watched folders # (ensuring image deletions trigger a sync of their parent folders) if not is_deleted_watched_folder: - closest_folder = watcher_util_find_closest_parent_folder(file_path, watched_folders) + closest_folder = watcher_util_find_closest_parent_folder( + file_path, watched_folders + ) if closest_folder: folder_id, folder_path = closest_folder @@ -361,4 +365,4 @@ def main(): else: print("Failed to start watcher") - print("Example finished") \ No newline at end of file + print("Example finished")