From dc50d6e9418cd7e18806cb0ca93f8d437b3ed0c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sybren=20A=2E=20St=C3=BCvel?= Date: Fri, 15 Sep 2017 11:02:31 +0200 Subject: [PATCH] Add more logging to find cause of KeyError There can be a KeyError accessing permission['methods'], but our current logging doesn't provide enough information as to determine when this happens. Rather than bluntly fixing the issue, I added logging to try and find out how we get a 'methods'-less permission dict in the first place. --- pillar/api/utils/authorization.py | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/pillar/api/utils/authorization.py b/pillar/api/utils/authorization.py index 73bd8c3f..f7a4d031 100644 --- a/pillar/api/utils/authorization.py +++ b/pillar/api/utils/authorization.py @@ -216,6 +216,8 @@ def merge_permissions(*args): :returns: combined list of permissions. """ + from pillar.auth import current_user + if not args: return {} @@ -237,8 +239,18 @@ def merge_permissions(*args): from0 = args[0].get(plural_name, []) from1 = args[1].get(plural_name, []) - asdict0 = {permission[field_name]: permission['methods'] for permission in from0} - asdict1 = {permission[field_name]: permission['methods'] for permission in from1} + try: + asdict0 = {permission[field_name]: permission['methods'] for permission in from0} + except KeyError: + log.exception('KeyError creating asdict0 for %r permissions; user=%s; args[0]=%r', + field_name, current_user.user_id, args[0]) + asdict0 = {} + try: + asdict1 = {permission[field_name]: permission['methods'] for permission in from1} + except KeyError: + log.exception('KeyError creating asdict1 for %r permissions; user=%s; args[1]=%r', + field_name, current_user.user_id, args[1]) + asdict1 = {} keys = set(asdict0.keys()).union(set(asdict1.keys())) for key in maybe_sorted(keys):