Skip to content

Commit 14141a8

Browse files
committed
PIM-6080
Refactor strict permission error handling This commit streamlines strict permission error detection by introducing helper functions for normalizing responses and mapping errors, improving maintainability and readability of the code.
1 parent 9477c7c commit 14141a8

1 file changed

Lines changed: 44 additions & 15 deletions

File tree

cterasdk/cio/core/commands.py

Lines changed: 44 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -30,23 +30,52 @@ def _is_permission_denied_message(message):
3030
)
3131

3232

33-
def _raise_strict_permission_denied(result, path):
34-
if result is None:
35-
raise exceptions.io.core.PrivilegeError(path)
36-
if isinstance(result, str) and not result.strip():
37-
raise exceptions.io.core.PrivilegeError(path)
33+
def _normalize_rc(rc):
34+
if isinstance(rc, str):
35+
return rc.strip()
36+
return rc
37+
3838

39+
def _normalize_msg(msg):
40+
if isinstance(msg, str):
41+
return msg.strip().lower()
42+
return msg
43+
44+
45+
def _extract_rc_msg(result):
46+
if result is None:
47+
return None, None
3948
if isinstance(result, str):
40-
if _is_permission_denied_message(result):
41-
raise exceptions.io.core.PrivilegeError(path)
42-
return
43-
44-
msg = getattr(result, 'msg', None)
45-
rc = getattr(result, 'rc', None)
46-
if msg and _is_permission_denied_message(msg):
47-
raise exceptions.io.core.PrivilegeError(path)
48-
if msg in (None, '') and rc in (0, '0', None):
49-
raise exceptions.io.core.PrivilegeError(path)
49+
return None, result
50+
return getattr(result, 'rc', None), getattr(result, 'msg', None)
51+
52+
53+
_STRICT_PERMISSION_ERROR_MAP = {
54+
(None, None): exceptions.io.core.PrivilegeError,
55+
(None, ''): exceptions.io.core.PrivilegeError,
56+
(0, None): exceptions.io.core.PrivilegeError,
57+
('0', None): exceptions.io.core.PrivilegeError,
58+
(None, 'permission denied'): exceptions.io.core.PrivilegeError,
59+
(None, 'access denied'): exceptions.io.core.PrivilegeError,
60+
(None, 'read only'): exceptions.io.core.PrivilegeError,
61+
(None, 'action is not allowed'): exceptions.io.core.PrivilegeError,
62+
('permissiondenied', None): exceptions.io.core.PrivilegeError,
63+
(None, 'permissiondenied'): exceptions.io.core.PrivilegeError,
64+
('permissiondenied', 'permissiondenied'): exceptions.io.core.PrivilegeError,
65+
}
66+
67+
68+
def _raise_strict_permission_denied(result, path):
69+
rc, msg = _extract_rc_msg(result)
70+
rc = _normalize_rc(rc)
71+
msg = _normalize_msg(msg)
72+
logger.debug(
73+
'strict_permission response for %s: rc=%r msg=%r',
74+
path, rc, msg
75+
)
76+
error_cls = _STRICT_PERMISSION_ERROR_MAP.get((rc, msg))
77+
if error_cls is not None:
78+
raise error_cls(path)
5079

5180

5281
def split_file_directory(listdir, receiver, destination):

0 commit comments

Comments
 (0)