From 7399b5f224251eec5d843a1c8f7bd256043d93ae Mon Sep 17 00:00:00 2001 From: ChrisLR Date: Tue, 18 Jan 2022 16:11:00 -0500 Subject: [PATCH 1/6] Added method call to load module prototypes when searching if not already loaded --- evennia/prototypes/prototypes.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/evennia/prototypes/prototypes.py b/evennia/prototypes/prototypes.py index 2e83d698a2..1f666d931a 100644 --- a/evennia/prototypes/prototypes.py +++ b/evennia/prototypes/prototypes.py @@ -31,7 +31,6 @@ from evennia.utils.funcparser import FuncParser from evennia.utils import dbserialize from evennia.utils.evtable import EvTable - _MODULE_PROTOTYPE_MODULES = {} _MODULE_PROTOTYPES = {} _PROTOTYPE_META_NAMES = ( @@ -516,6 +515,10 @@ def search_prototype(key=None, tags=None, require_single=False, return_iterators be found as a match. """ + # This will load the prototypes the first time they are searched + if not _MODULE_PROTOTYPE_MODULES: + load_module_prototypes() + # prototype keys are always in lowecase if key: key = key.lower() From 6dc9cc15ad7e476f617ade0b3adf0386f9c801b6 Mon Sep 17 00:00:00 2001 From: ChrisLR Date: Tue, 18 Jan 2022 16:11:30 -0500 Subject: [PATCH 2/6] Changed PROTOTYPE_MODULES override in test to use the appropriate decorator and type instead --- evennia/utils/test_resources.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/evennia/utils/test_resources.py b/evennia/utils/test_resources.py index 2f3967086e..abe6898f56 100644 --- a/evennia/utils/test_resources.py +++ b/evennia/utils/test_resources.py @@ -152,13 +152,13 @@ class EvenniaTestMixin: if hasattr(self, "account2"): self.account2.delete() + # Set up fake prototype module for allowing tests to use named prototypes. + @override_settings(PROTOTYPE_MODULES=["evennia.utils.tests.data.prototypes_example"]) def create_rooms(self): self.room1 = create.create_object(self.room_typeclass, key="Room", nohome=True) self.room1.db.desc = "room_desc" settings.DEFAULT_HOME = "#%i" % self.room1.id # we must have a default home - # Set up fake prototype module for allowing tests to use named prototypes. - settings.PROTOTYPE_MODULES = "evennia.utils.tests.data.prototypes_example" self.room2 = create.create_object(self.room_typeclass, key="Room2") self.exit = create.create_object( self.exit_typeclass, key="out", location=self.room1, destination=self.room2 From cde2f4efdfb3041bc10bf0bf33262416dd605b46 Mon Sep 17 00:00:00 2001 From: ChrisLR Date: Wed, 19 Jan 2022 12:25:04 -0500 Subject: [PATCH 3/6] Removed DEFAULT_HOME override --- evennia/contrib/game_systems/crafting/tests.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/evennia/contrib/game_systems/crafting/tests.py b/evennia/contrib/game_systems/crafting/tests.py index 32ac22c7c2..7386f190f0 100644 --- a/evennia/contrib/game_systems/crafting/tests.py +++ b/evennia/contrib/game_systems/crafting/tests.py @@ -654,7 +654,7 @@ class TestCraftSword(BaseEvenniaTestCase): @mock.patch("evennia.contrib.game_systems.crafting.crafting._load_recipes", new=mock.MagicMock()) @mock.patch("evennia.contrib.game_systems.crafting.crafting._RECIPE_CLASSES", new={"testrecipe": _MockRecipe}) -@override_settings(CRAFT_RECIPE_MODULES=[], DEFAULT_HOME="#999999") +@override_settings(CRAFT_RECIPE_MODULES=[]) class TestCraftCommand(EvenniaCommandTest): """Test the crafting command""" From 6e863f2bd74b7eeb169ce550f3b39cfc00ea7ddc Mon Sep 17 00:00:00 2001 From: ChrisLR Date: Wed, 19 Jan 2022 12:25:51 -0500 Subject: [PATCH 4/6] Refactored home/no-home usage and fixed exception catch --- evennia/objects/manager.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/evennia/objects/manager.py b/evennia/objects/manager.py index 724a8588a9..851a3da1d9 100644 --- a/evennia/objects/manager.py +++ b/evennia/objects/manager.py @@ -676,15 +676,19 @@ class ObjectDBManager(TypedObjectManager): location = dbid_to_obj(location, self.model) destination = dbid_to_obj(destination, self.model) - home = dbid_to_obj(home, self.model) - if not home: + if home: + home = dbid_to_obj(home, self.model) + + if not nohome and not home: try: - home = dbid_to_obj(settings.DEFAULT_HOME, self.model) if not nohome else None - except self.model_ObjectDB.DoesNotExist: + home = dbid_to_obj(settings.DEFAULT_HOME, self.model) + except self.model.DoesNotExist: raise self.model.DoesNotExist( "settings.DEFAULT_HOME (= '%s') does not exist, or the setting is malformed." % settings.DEFAULT_HOME ) + elif nohome and not home: + home = None # create new instance new_object = typeclass( From a1bbb18017ea066bd481fcf50660603f7f1a916a Mon Sep 17 00:00:00 2001 From: ChrisLR Date: Wed, 19 Jan 2022 12:26:12 -0500 Subject: [PATCH 5/6] Moved default home override to the override_settings decorator --- evennia/utils/test_resources.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/evennia/utils/test_resources.py b/evennia/utils/test_resources.py index abe6898f56..edf66e6668 100644 --- a/evennia/utils/test_resources.py +++ b/evennia/utils/test_resources.py @@ -153,11 +153,10 @@ class EvenniaTestMixin: self.account2.delete() # Set up fake prototype module for allowing tests to use named prototypes. - @override_settings(PROTOTYPE_MODULES=["evennia.utils.tests.data.prototypes_example"]) + @override_settings(PROTOTYPE_MODULES=["evennia.utils.tests.data.prototypes_example"], DEFAULT_HOME="#1") def create_rooms(self): self.room1 = create.create_object(self.room_typeclass, key="Room", nohome=True) self.room1.db.desc = "room_desc" - settings.DEFAULT_HOME = "#%i" % self.room1.id # we must have a default home self.room2 = create.create_object(self.room_typeclass, key="Room2") self.exit = create.create_object( From cd77ec034280f255e9de17f19d8ce1a08726bc28 Mon Sep 17 00:00:00 2001 From: ChrisLR Date: Wed, 19 Jan 2022 13:01:30 -0500 Subject: [PATCH 6/6] Enforce default_home again --- evennia/commands/default/tests.py | 1 + 1 file changed, 1 insertion(+) diff --git a/evennia/commands/default/tests.py b/evennia/commands/default/tests.py index 9b6ac7d1ab..c1166939c8 100644 --- a/evennia/commands/default/tests.py +++ b/evennia/commands/default/tests.py @@ -1405,6 +1405,7 @@ class TestBuilding(EvenniaCommandTest): "Could not find 'Obj'.| (Objects to destroy " "must either be local or specified with a unique #dbref.)", ) + settings.DEFAULT_HOME = f"#{self.room1.dbid}" self.call( building.CmdDestroy(), settings.DEFAULT_HOME, "You are trying to delete" ) # DEFAULT_HOME should not be deleted