diff --git a/evennia/__init__.py b/evennia/__init__.py index 3b7c37f83f..703d0bcafc 100644 --- a/evennia/__init__.py +++ b/evennia/__init__.py @@ -101,17 +101,6 @@ CHANNEL_HANDLER = None GLOBAL_SCRIPTS = None OPTION_CLASSES = None -# typeclasses -BASE_ACCOUNT_TYPECLASS = None -BASE_OBJECT_TYPECLASS = None -BASE_CHARACTER_TYPECLASS = None -BASE_ROOM_TYPECLASS = None -BASE_EXIT_TYPECLASS = None -BASE_CHANNEL_TYPECLASS = None -BASE_SCRIPT_TYPECLASS = None -BASE_GUEST_TYPECLASS = None - - def _create_version(): """ Helper function for building the version string @@ -165,10 +154,6 @@ def _init(): global EvMenu, EvTable, EvForm, EvMore, EvEditor global ANSIString - global BASE_ACCOUNT_TYPECLASS, BASE_OBJECT_TYPECLASS, BASE_CHARACTER_TYPECLASS - global BASE_ROOM_TYPECLASS, BASE_EXIT_TYPECLASS, BASE_CHANNEL_TYPECLASS - global BASE_SCRIPT_TYPECLASS, BASE_GUEST_TYPECLASS - # Parent typeclasses from .accounts.accounts import DefaultAccount from .accounts.accounts import DefaultGuest diff --git a/evennia/accounts/accounts.py b/evennia/accounts/accounts.py index 5bb704cdde..6f071e4d2f 100644 --- a/evennia/accounts/accounts.py +++ b/evennia/accounts/accounts.py @@ -22,7 +22,6 @@ from evennia.accounts.manager import AccountManager from evennia.accounts.models import AccountDB from evennia.objects.models import ObjectDB from evennia.comms.models import ChannelDB -from evennia.commands import cmdhandler from evennia.server.models import ServerConfig from evennia.server.throttle import Throttle from evennia.utils import class_from_module, create, logger @@ -49,6 +48,7 @@ _MULTISESSION_MODE = settings.MULTISESSION_MODE _MAX_NR_CHARACTERS = settings.MAX_NR_CHARACTERS _CMDSET_ACCOUNT = settings.CMDSET_ACCOUNT _MUDINFO_CHANNEL = None +_CMDHANDLER = None # Create throttles for too many account-creations and login attempts CREATION_THROTTLE = Throttle( @@ -931,6 +931,10 @@ class DefaultAccount(AccountDB, metaclass=TypeclassBase): commands at run-time. """ + # break circular import issues + global _CMDHANDLER + if not _CMDHANDLER: + from evennia.commands.cmdhandler import cmdhandler as _CMDHANDLER raw_string = self.nicks.nickreplace( raw_string, categories=("inputline", "channel"), include_account=False ) @@ -939,7 +943,7 @@ class DefaultAccount(AccountDB, metaclass=TypeclassBase): sessions = self.sessions.get() session = sessions[0] if sessions else None - return cmdhandler.cmdhandler( + return _CMDHANDLER( self, raw_string, callertype="account", session=session, **kwargs ) diff --git a/evennia/objects/objects.py b/evennia/objects/objects.py index b5dc05fb33..d4a0d1d03a 100644 --- a/evennia/objects/objects.py +++ b/evennia/objects/objects.py @@ -20,7 +20,6 @@ from evennia.objects.models import ObjectDB from evennia.scripts.scripthandler import ScriptHandler from evennia.commands import cmdset, command from evennia.commands.cmdsethandler import CmdSetHandler -from evennia.commands import cmdhandler from evennia.utils import create from evennia.utils import search from evennia.utils import logger @@ -41,6 +40,7 @@ _MULTISESSION_MODE = settings.MULTISESSION_MODE _ScriptDB = None _SESSIONS = None +_CMDHANDLER = None _AT_SEARCH_RESULT = variable_from_module(*settings.SEARCH_AT_RESULT.rsplit(".", 1)) _COMMAND_DEFAULT_CLASS = class_from_module(settings.COMMAND_DEFAULT_CLASS) @@ -615,12 +615,17 @@ class DefaultObject(ObjectDB, metaclass=TypeclassBase): command structure. """ + # break circular import issues + global _CMDHANDLER + if not _CMDHANDLER: + from evennia.commands.cmdhandler import cmdhandler as _CMDHANDLER + # nick replacement - we require full-word matching. # do text encoding conversion raw_string = self.nicks.nickreplace( raw_string, categories=("inputline", "channel"), include_account=True ) - return cmdhandler.cmdhandler( + return _CMDHANDLER( self, raw_string, callertype="object", session=session, **kwargs )