Remove BASE_*_TYPECLASS from flat API, break circular imports of cmdhandler in accounts/objects. Resolve #2330.

This commit is contained in:
Griatch 2021-03-07 10:31:16 +01:00
parent 12cbe69c1f
commit cd579fb649
3 changed files with 13 additions and 19 deletions

View file

@ -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

View file

@ -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
)

View file

@ -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
)