fix: suppress OneDrive 404 errors during delta scans as non-provisioned
Add M365DriveNotFound(M365Error) exception raised by _get() on HTTP 404.
Catch it explicitly in _scan_user_onedrive before the generic handler,
broadcasting a scan_phase ("not provisioned — skipped") instead of a red
scan_error card. Full-scan path is unaffected (bare except Exception: return
in _iter_drive_folder_for already silenced the same 404).
Root cause: _get() fell through to raise_for_status() on 404, caught by
the generic except Exception handler and broadcast as scan_error. The
asymmetry with full scans (which silently skipped 404s) was confusing.
Common causes of OneDrive 404: no licence assigned, service plan disabled,
drive never provisioned (account never signed in), account suspended.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
1 parent
1aaf400771
commit
4dfbae49a4
5 files changed
+38
-4
No files matched your search
@@ -54,6 +54,7 @@ def _get_scan_meta():
|
||||
try:
|
||||
from m365_connector import (
|
||||
M365Connector, M365Error, M365PermissionError, M365DeltaTokenExpired,
|
||||
M365DriveNotFound,
|
||||
MSAL_OK, REQUESTS_OK,
|
||||
)
|
||||
CONNECTOR_OK = True
|
||||
@@ -62,6 +63,7 @@ except ImportError:
|
||||
M365Error = Exception
|
||||
M365PermissionError = Exception
|
||||
M365DeltaTokenExpired = Exception
|
||||
M365DriveNotFound = Exception
|
||||
MSAL_OK = False
|
||||
REQUESTS_OK = False
|
||||
CONNECTOR_OK = False
|
||||
@@ -768,6 +770,10 @@ def run_scan(options: dict):
|
||||
work_items.append(("file", item, None))
|
||||
except M365PermissionError:
|
||||
broadcast("scan_error", {"file": f"OneDrive ({uname})", "error": _permission_msg("OneDrive", uname)})
|
||||
except M365DriveNotFound:
|
||||
# OneDrive not provisioned for this user (no licence, service plan
|
||||
# disabled, or drive never initialised). Not a scan error — skip silently.
|
||||
broadcast("scan_phase", {"phase": f"OneDrive ({uname}): not provisioned — skipped"})
|
||||
except Exception as e:
|
||||
broadcast("scan_error", {"file": f"OneDrive ({uname})", "error": str(e)})
|
||||
else:
|
||||
|
||||
Reference in new issue
Block a user