Skip to content

Commit 1ca6ec7

Browse files
committed
PIM-6080
Extend permission error mapping and refactor strict permission handling logic This commit adds a comprehensive task error mapping for strict permission validation, introduces a helper function for extracting task error details, and updates logging for improved debugging.
1 parent 14141a8 commit 1ca6ec7

1 file changed

Lines changed: 27 additions & 7 deletions

File tree

cterasdk/cio/core/commands.py

Lines changed: 27 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -64,19 +64,39 @@ def _extract_rc_msg(result):
6464
('permissiondenied', 'permissiondenied'): exceptions.io.core.PrivilegeError,
6565
}
6666

67+
_STRICT_PERMISSION_TASK_ERROR_MAP = {
68+
(None, None, 'permissiondenied'): exceptions.io.core.PrivilegeError,
69+
(None, None, 'permission denied'): exceptions.io.core.PrivilegeError,
70+
(None, None, 'access denied'): exceptions.io.core.PrivilegeError,
71+
(None, None, 'read only'): exceptions.io.core.PrivilegeError,
72+
(None, None, 'action is not allowed'): exceptions.io.core.PrivilegeError,
73+
(None, 'permission denied', None): exceptions.io.core.PrivilegeError,
74+
(None, 'access denied', None): exceptions.io.core.PrivilegeError,
75+
(None, 'read only', None): exceptions.io.core.PrivilegeError,
76+
(None, 'action is not allowed', None): exceptions.io.core.PrivilegeError,
77+
(0, None, 'permissiondenied'): exceptions.io.core.PrivilegeError,
78+
('0', None, 'permissiondenied'): exceptions.io.core.PrivilegeError,
79+
}
80+
6781

6882
def _raise_strict_permission_denied(result, path):
6983
rc, msg = _extract_rc_msg(result)
7084
rc = _normalize_rc(rc)
7185
msg = _normalize_msg(msg)
72-
logger.debug(
73-
'strict_permission response for %s: rc=%r msg=%r',
74-
path, rc, msg
86+
logger.info(
87+
'strict_permission response for %s: rc=%r msg=%r raw=%s',
88+
path, rc, msg, type(result).__name__
7589
)
7690
error_cls = _STRICT_PERMISSION_ERROR_MAP.get((rc, msg))
7791
if error_cls is not None:
7892
raise error_cls(path)
7993

94+
def _extract_task_error_tuple(result):
95+
rc = _normalize_rc(getattr(result, 'rc', None))
96+
msg = _normalize_msg(getattr(result, 'msg', None))
97+
error_type = _normalize_msg(getattr(result, 'error_type', None))
98+
return rc, msg, error_type
99+
80100

81101
def split_file_directory(listdir, receiver, destination):
82102
"""
@@ -1024,10 +1044,10 @@ async def _a_execute(self):
10241044

10251045
def _handle_response(self, r):
10261046
if self._strict_permission:
1027-
msg = getattr(r, 'msg', None)
1028-
error_type = getattr(r, 'error_type', None)
1029-
if _is_permission_denied_message(str(msg)) or _is_permission_denied_message(str(error_type)):
1030-
raise exceptions.io.core.PrivilegeError('')
1047+
rc, msg, error_type = _extract_task_error_tuple(r)
1048+
error_cls = _STRICT_PERMISSION_TASK_ERROR_MAP.get((rc, msg, error_type))
1049+
if error_cls is not None:
1050+
raise error_cls('')
10311051
if not self.block:
10321052
return r
10331053

0 commit comments

Comments
 (0)