From 37e90c3494d6f97967fc9cc36e2bff3948288c48 Mon Sep 17 00:00:00 2001 From: Johnny Date: Tue, 2 Aug 2022 23:47:52 +0000 Subject: [PATCH 1/3] AttributeProperty tries spawning child instances of default value (#2697). --- evennia/typeclasses/attributes.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/evennia/typeclasses/attributes.py b/evennia/typeclasses/attributes.py index b8c68bb7ac..90492a13d2 100644 --- a/evennia/typeclasses/attributes.py +++ b/evennia/typeclasses/attributes.py @@ -202,6 +202,21 @@ class AttributeProperty: self._lockstring = lockstring self._autocreate = autocreate self._key = "" + + @property + def _default(self): + """ + Tries returning a new instance of default if callable. + + """ + try: + return self.__default() + except: + return self.__default + + @_default.setter + def _default(self, value): + self.__default = value def __set_name__(self, cls, name): """ From 4531f44ca03b2c2919f97a0484e71bb046f21755 Mon Sep 17 00:00:00 2001 From: Johnny Date: Fri, 5 Aug 2022 19:41:39 +0000 Subject: [PATCH 2/3] Changes bare try/except to callable check. --- evennia/typeclasses/attributes.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/evennia/typeclasses/attributes.py b/evennia/typeclasses/attributes.py index 90492a13d2..3a3d8c7281 100644 --- a/evennia/typeclasses/attributes.py +++ b/evennia/typeclasses/attributes.py @@ -176,7 +176,7 @@ class AttributeProperty: attrhandler_name = "attributes" - def __init__(self, default=None, category=None, strattr=False, lockstring="", autocreate=True): + def __init__(self, default=None, default_factory=None, category=None, strattr=False, lockstring="", autocreate=True): """ Initialize an Attribute as a property descriptor. @@ -209,10 +209,10 @@ class AttributeProperty: Tries returning a new instance of default if callable. """ - try: + if callable(self.__default): return self.__default() - except: - return self.__default + + return self.__default @_default.setter def _default(self, value): From 7a8d1da5a9cdb41477f3d9fbf80aea3a9da56a1d Mon Sep 17 00:00:00 2001 From: Johnny Date: Fri, 5 Aug 2022 19:51:33 +0000 Subject: [PATCH 3/3] Removes unused default_factory arg. --- evennia/typeclasses/attributes.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/evennia/typeclasses/attributes.py b/evennia/typeclasses/attributes.py index 3a3d8c7281..785d849e0f 100644 --- a/evennia/typeclasses/attributes.py +++ b/evennia/typeclasses/attributes.py @@ -176,7 +176,7 @@ class AttributeProperty: attrhandler_name = "attributes" - def __init__(self, default=None, default_factory=None, category=None, strattr=False, lockstring="", autocreate=True): + def __init__(self, default=None, category=None, strattr=False, lockstring="", autocreate=True): """ Initialize an Attribute as a property descriptor.