From e38f3ff56d9a0415eb6e7645f1932c91a1ff0a7c Mon Sep 17 00:00:00 2001 From: Johnny Date: Wed, 4 Dec 2019 19:50:05 +0000 Subject: [PATCH 1/2] Fixes ValueError where characters list is presumed to be iterable. --- evennia/accounts/accounts.py | 1 + 1 file changed, 1 insertion(+) diff --git a/evennia/accounts/accounts.py b/evennia/accounts/accounts.py index d6afe2ca2e..161073d86b 100644 --- a/evennia/accounts/accounts.py +++ b/evennia/accounts/accounts.py @@ -217,6 +217,7 @@ class DefaultAccount(AccountDB, metaclass=TypeclassBase): def characters(self): # Get playable characters list objs = self.db._playable_characters + if not objs: objs = () # Rebuild the list if legacy code left null values after deletion if None in objs: From 8785523c722bce550d3be7927fb5b37d07a54e2f Mon Sep 17 00:00:00 2001 From: Johnny Date: Wed, 4 Dec 2019 20:00:31 +0000 Subject: [PATCH 2/2] Adds try/catch block to allow method to fail open and log error. --- evennia/accounts/accounts.py | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/evennia/accounts/accounts.py b/evennia/accounts/accounts.py index 161073d86b..2a530fa93c 100644 --- a/evennia/accounts/accounts.py +++ b/evennia/accounts/accounts.py @@ -216,13 +216,16 @@ class DefaultAccount(AccountDB, metaclass=TypeclassBase): @property def characters(self): # Get playable characters list - objs = self.db._playable_characters - if not objs: objs = () + objs = self.db._playable_characters or [] # Rebuild the list if legacy code left null values after deletion - if None in objs: - objs = [x for x in self.db._playable_characters if x] - self.db._playable_characters = objs + try: + if None in objs: + objs = [x for x in self.db._playable_characters if x] + self.db._playable_characters = objs + except Exception as e: + logger.log_trace(e) + logger.log_err(e) return objs