mirror of
https://github.com/evennia/evennia.git
synced 2026-03-23 08:16:30 +01:00
Changed importing of SESSION_HANDLER to avoid circular imports when extending Portal or Server SessionHandler.
This commit is contained in:
parent
3d3bd5e9d7
commit
53d963e14c
25 changed files with 118 additions and 152 deletions
|
|
@ -136,7 +136,7 @@ __version__ = _create_version()
|
|||
del _create_version
|
||||
|
||||
|
||||
def _init():
|
||||
def _init(portal_mode=False):
|
||||
"""
|
||||
This function is called automatically by the launcher only after
|
||||
Evennia has fully initialized all its models. It sets up the API
|
||||
|
|
@ -185,7 +185,6 @@ def _init():
|
|||
from .scripts.taskhandler import TASK_HANDLER
|
||||
from .scripts.tickerhandler import TICKER_HANDLER
|
||||
from .server import signals
|
||||
from .server.sessionhandler import SESSION_HANDLER
|
||||
from .typeclasses.attributes import AttributeProperty
|
||||
from .typeclasses.tags import TagProperty
|
||||
from .utils import ansi, gametime, logger
|
||||
|
|
@ -220,6 +219,21 @@ def _init():
|
|||
search_tag,
|
||||
)
|
||||
|
||||
from .utils.utils import class_from_module
|
||||
if portal_mode:
|
||||
# Set up the PortalSessionHandler
|
||||
from evennia.server.portal import portalsessionhandler
|
||||
portal_sess_handler_class = class_from_module(settings.PORTAL_SESSION_HANDLER_CLASS)
|
||||
portalsessionhandler.PORTAL_SESSIONS = portal_sess_handler_class()
|
||||
else:
|
||||
# Create the ServerSesssionHandler
|
||||
from evennia.server import sessionhandler
|
||||
sess_handler_class = class_from_module(settings.SERVER_SESSION_HANDLER_CLASS)
|
||||
sessionhandler.SESSIONS = sess_handler_class()
|
||||
sessionhandler.SESSION_HANDLER = sessionhandler.SESSIONS
|
||||
SESSION_HANDLER = sessionhandler.SESSIONS
|
||||
|
||||
|
||||
# API containers
|
||||
|
||||
class _EvContainer(object):
|
||||
|
|
|
|||
|
|
@ -20,6 +20,7 @@ from django.core.exceptions import ImproperlyConfigured, ValidationError
|
|||
from django.utils import timezone
|
||||
from django.utils.module_loading import import_string
|
||||
from django.utils.translation import gettext as _
|
||||
import evennia
|
||||
from evennia.accounts.manager import AccountManager
|
||||
from evennia.accounts.models import AccountDB
|
||||
from evennia.commands.cmdsethandler import CmdSetHandler
|
||||
|
|
@ -41,8 +42,6 @@ from evennia.utils.utils import is_iter, lazy_property, make_iter, to_str, varia
|
|||
|
||||
__all__ = ("DefaultAccount", "DefaultGuest")
|
||||
|
||||
_SESSIONS = None
|
||||
|
||||
_AT_SEARCH_RESULT = variable_from_module(*settings.SEARCH_AT_RESULT.rsplit(".", 1))
|
||||
_MULTISESSION_MODE = settings.MULTISESSION_MODE
|
||||
_AUTO_CREATE_CHARACTER_WITH_ACCOUNT = settings.AUTO_CREATE_CHARACTER_WITH_ACCOUNT
|
||||
|
|
@ -95,13 +94,10 @@ class AccountSessionHandler(object):
|
|||
is given, this is a list with one (or zero) elements.
|
||||
|
||||
"""
|
||||
global _SESSIONS
|
||||
if not _SESSIONS:
|
||||
from evennia.server.sessionhandler import SESSIONS as _SESSIONS
|
||||
if sessid:
|
||||
return make_iter(_SESSIONS.session_from_account(self.account, sessid))
|
||||
return make_iter(evennia.SESSION_HANDLER.session_from_account(self.account, sessid))
|
||||
else:
|
||||
return _SESSIONS.sessions_from_account(self.account)
|
||||
return evennia.SESSION_HANDLER.sessions_from_account(self.account)
|
||||
|
||||
def all(self):
|
||||
"""
|
||||
|
|
@ -284,10 +280,7 @@ class DefaultAccount(AccountDB, metaclass=TypeclassBase):
|
|||
reason (str, optional): Eventual reason for the disconnect.
|
||||
|
||||
"""
|
||||
global _SESSIONS
|
||||
if not _SESSIONS:
|
||||
from evennia.server.sessionhandler import SESSIONS as _SESSIONS
|
||||
_SESSIONS.disconnect(session, reason)
|
||||
evennia.SESSION_HANDLER.disconnect(session, reason)
|
||||
|
||||
# puppeting operations
|
||||
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@ import time
|
|||
from django.conf import settings
|
||||
from django.utils.translation import gettext as _
|
||||
|
||||
import evennia
|
||||
from evennia.accounts.accounts import DefaultAccount
|
||||
from evennia.scripts.scripts import DefaultScript
|
||||
from evennia.utils import logger, search, utils
|
||||
|
|
@ -21,8 +22,6 @@ _RSS_ENABLED = settings.RSS_ENABLED
|
|||
_GRAPEVINE_ENABLED = settings.GRAPEVINE_ENABLED
|
||||
_DISCORD_ENABLED = settings.DISCORD_ENABLED and hasattr(settings, "DISCORD_BOT_TOKEN")
|
||||
|
||||
_SESSIONS = None
|
||||
|
||||
|
||||
class BotStarter(DefaultScript):
|
||||
"""
|
||||
|
|
@ -61,10 +60,7 @@ class BotStarter(DefaultScript):
|
|||
instead. This keeps the bot getting hit by IDLE_TIMEOUT.
|
||||
|
||||
"""
|
||||
global _SESSIONS
|
||||
if not _SESSIONS:
|
||||
from evennia.server.sessionhandler import SESSIONS as _SESSIONS
|
||||
for session in _SESSIONS.sessions_from_account(self.account):
|
||||
for session in evennia.SESSION_HANDLER.sessions_from_account(self.account):
|
||||
session.update_session_counters(idle=True)
|
||||
|
||||
|
||||
|
|
@ -170,10 +166,6 @@ class IRCBot(Bot):
|
|||
self.delete()
|
||||
return
|
||||
|
||||
global _SESSIONS
|
||||
if not _SESSIONS:
|
||||
from evennia.server.sessionhandler import SESSIONS as _SESSIONS
|
||||
|
||||
# if keywords are given, store (the BotStarter script
|
||||
# will not give any keywords, so this should normally only
|
||||
# happen at initialization)
|
||||
|
|
@ -208,7 +200,7 @@ class IRCBot(Bot):
|
|||
"port": self.db.irc_port,
|
||||
"ssl": self.db.irc_ssl,
|
||||
}
|
||||
_SESSIONS.start_bot_session(self.factory_path, configdict)
|
||||
evennia.SESSION_HANDLER.start_bot_session(self.factory_path, configdict)
|
||||
|
||||
def at_msg_send(self, **kwargs):
|
||||
"Shortcut here or we can end up in infinite loop"
|
||||
|
|
@ -336,12 +328,9 @@ class IRCBot(Bot):
|
|||
|
||||
if txt.lower().startswith("who"):
|
||||
# return server WHO list (abbreviated for IRC)
|
||||
global _SESSIONS
|
||||
if not _SESSIONS:
|
||||
from evennia.server.sessionhandler import SESSIONS as _SESSIONS
|
||||
whos = []
|
||||
t0 = time.time()
|
||||
for sess in _SESSIONS.get_sessions():
|
||||
for sess in evennia.SESSION_HANDLER.get_sessions():
|
||||
delta_cmd = t0 - sess.cmd_last_visible
|
||||
delta_conn = t0 - session.conn_time
|
||||
account = sess.get_account()
|
||||
|
|
@ -407,10 +396,6 @@ class RSSBot(Bot):
|
|||
self.delete()
|
||||
return
|
||||
|
||||
global _SESSIONS
|
||||
if not _SESSIONS:
|
||||
from evennia.server.sessionhandler import SESSIONS as _SESSIONS
|
||||
|
||||
if ev_channel:
|
||||
# connect to Evennia channel
|
||||
channel = search.channel_search(ev_channel)
|
||||
|
|
@ -425,7 +410,7 @@ class RSSBot(Bot):
|
|||
# instruct the server and portal to create a new session with
|
||||
# the stored configuration
|
||||
configdict = {"uid": self.dbid, "url": self.db.rss_url, "rate": self.db.rss_rate}
|
||||
_SESSIONS.start_bot_session("evennia.server.portal.rss.RSSBotFactory", configdict)
|
||||
evennia.SESSION_HANDLER.start_bot_session("evennia.server.portal.rss.RSSBotFactory", configdict)
|
||||
|
||||
def execute_cmd(self, txt=None, session=None, **kwargs):
|
||||
"""
|
||||
|
|
@ -468,10 +453,6 @@ class GrapevineBot(Bot):
|
|||
self.delete()
|
||||
return
|
||||
|
||||
global _SESSIONS
|
||||
if not _SESSIONS:
|
||||
from evennia.server.sessionhandler import SESSIONS as _SESSIONS
|
||||
|
||||
# connect to Evennia channel
|
||||
if ev_channel:
|
||||
# connect to Evennia channel
|
||||
|
|
@ -488,7 +469,7 @@ class GrapevineBot(Bot):
|
|||
# these will be made available as properties on the protocol factory
|
||||
configdict = {"uid": self.dbid, "grapevine_channel": self.db.grapevine_channel}
|
||||
|
||||
_SESSIONS.start_bot_session(self.factory_path, configdict)
|
||||
evennia.SESSION_HANDLER.start_bot_session(self.factory_path, configdict)
|
||||
|
||||
def at_msg_send(self, **kwargs):
|
||||
"Shortcut here or we can end up in infinite loop"
|
||||
|
|
@ -619,12 +600,9 @@ class DiscordBot(Bot):
|
|||
channel.connect(self)
|
||||
|
||||
# connect
|
||||
global _SESSIONS
|
||||
if not _SESSIONS:
|
||||
from evennia.server.sessionhandler import SESSION_HANDLER as _SESSIONS
|
||||
# these will be made available as properties on the protocol factory
|
||||
configdict = {"uid": self.dbid}
|
||||
_SESSIONS.start_bot_session(self.factory_path, configdict)
|
||||
evennia.SESSION_HANDLER.start_bot_session(self.factory_path, configdict)
|
||||
|
||||
def at_pre_channel_msg(self, message, channel, senders=None, **kwargs):
|
||||
"""
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@ from unittest import TestCase
|
|||
from django.test import override_settings
|
||||
from mock import MagicMock, Mock, patch
|
||||
|
||||
import evennia
|
||||
from evennia.accounts.accounts import (
|
||||
AccountSessionHandler,
|
||||
DefaultAccount,
|
||||
|
|
@ -37,22 +38,20 @@ class TestAccountSessionHandler(TestCase):
|
|||
self.assertEqual(self.handler.get(), [])
|
||||
self.assertEqual(self.handler.get(100), [])
|
||||
|
||||
import evennia.server.sessionhandler
|
||||
|
||||
s1 = MagicMock()
|
||||
s1.logged_in = True
|
||||
s1.uid = self.account.uid
|
||||
evennia.server.sessionhandler.SESSIONS[s1.uid] = s1
|
||||
evennia.SESSION_HANDLER[s1.uid] = s1
|
||||
|
||||
s2 = MagicMock()
|
||||
s2.logged_in = True
|
||||
s2.uid = self.account.uid + 1
|
||||
evennia.server.sessionhandler.SESSIONS[s2.uid] = s2
|
||||
evennia.SESSION_HANDLER[s2.uid] = s2
|
||||
|
||||
s3 = MagicMock()
|
||||
s3.logged_in = False
|
||||
s3.uid = self.account.uid + 2
|
||||
evennia.server.sessionhandler.SESSIONS[s3.uid] = s3
|
||||
evennia.SESSION_HANDLER[s3.uid] = s3
|
||||
|
||||
self.assertEqual([s.uid for s in self.handler.get()], [s1.uid])
|
||||
self.assertEqual([s.uid for s in [self.handler.get(self.account.uid)]], [s1.uid])
|
||||
|
|
@ -251,8 +250,6 @@ class TestDefaultAccount(TestCase):
|
|||
def test_puppet_object_already_puppeting(self):
|
||||
"Check puppet_object method called, already puppeting this"
|
||||
|
||||
import evennia.server.sessionhandler
|
||||
|
||||
account = create.create_account(
|
||||
f"TestAccount{randint(0, 999999)}",
|
||||
email="test@test.com",
|
||||
|
|
@ -260,7 +257,7 @@ class TestDefaultAccount(TestCase):
|
|||
typeclass=DefaultAccount,
|
||||
)
|
||||
self.s1.uid = account.uid
|
||||
evennia.server.sessionhandler.SESSIONS[self.s1.uid] = self.s1
|
||||
evennia.SESSION_HANDLER[self.s1.uid] = self.s1
|
||||
|
||||
self.s1.logged_in = True
|
||||
self.s1.data_out = Mock(return_value=None)
|
||||
|
|
@ -276,8 +273,6 @@ class TestDefaultAccount(TestCase):
|
|||
def test_puppet_object_no_permission(self):
|
||||
"Check puppet_object method called, no permission"
|
||||
|
||||
import evennia.server.sessionhandler
|
||||
|
||||
account = create.create_account(
|
||||
f"TestAccount{randint(0, 999999)}",
|
||||
email="test@test.com",
|
||||
|
|
@ -285,7 +280,7 @@ class TestDefaultAccount(TestCase):
|
|||
typeclass=DefaultAccount,
|
||||
)
|
||||
self.s1.uid = account.uid
|
||||
evennia.server.sessionhandler.SESSIONS[self.s1.uid] = self.s1
|
||||
evennia.SESSION_HANDLER[self.s1.uid] = self.s1
|
||||
|
||||
self.s1.data_out = MagicMock()
|
||||
obj = Mock()
|
||||
|
|
@ -302,8 +297,6 @@ class TestDefaultAccount(TestCase):
|
|||
def test_puppet_object_joining_other_session(self):
|
||||
"Check puppet_object method called, joining other session"
|
||||
|
||||
import evennia.server.sessionhandler
|
||||
|
||||
account = create.create_account(
|
||||
f"TestAccount{randint(0, 999999)}",
|
||||
email="test@test.com",
|
||||
|
|
@ -311,7 +304,7 @@ class TestDefaultAccount(TestCase):
|
|||
typeclass=DefaultAccount,
|
||||
)
|
||||
self.s1.uid = account.uid
|
||||
evennia.server.sessionhandler.SESSIONS[self.s1.uid] = self.s1
|
||||
evennia.SESSION_HANDLER[self.s1.uid] = self.s1
|
||||
|
||||
self.s1.puppet = None
|
||||
self.s1.logged_in = True
|
||||
|
|
@ -332,8 +325,6 @@ class TestDefaultAccount(TestCase):
|
|||
def test_puppet_object_already_puppeted(self):
|
||||
"Check puppet_object method called, already puppeted"
|
||||
|
||||
import evennia.server.sessionhandler
|
||||
|
||||
account = create.create_account(
|
||||
f"TestAccount{randint(0, 999999)}",
|
||||
email="test@test.com",
|
||||
|
|
@ -342,7 +333,7 @@ class TestDefaultAccount(TestCase):
|
|||
)
|
||||
self.account = account
|
||||
self.s1.uid = account.uid
|
||||
evennia.server.sessionhandler.SESSIONS[self.s1.uid] = self.s1
|
||||
evennia.SESSION_HANDLER[self.s1.uid] = self.s1
|
||||
|
||||
self.s1.puppet = None
|
||||
self.s1.logged_in = True
|
||||
|
|
@ -410,7 +401,7 @@ class TestDefaultAccountEv(BaseEvenniaTest):
|
|||
|
||||
# test no sessions
|
||||
with patch(
|
||||
"evennia.accounts.accounts._SESSIONS.sessions_from_account", return_value=[]
|
||||
"evennia.SESSION_HANDLER.sessions_from_account", return_value=[]
|
||||
) as mock_sessh:
|
||||
idle = self.account.idle_time
|
||||
self.assertEqual(idle, None)
|
||||
|
|
@ -423,7 +414,7 @@ class TestDefaultAccountEv(BaseEvenniaTest):
|
|||
|
||||
# test no sessions
|
||||
with patch(
|
||||
"evennia.accounts.accounts._SESSIONS.sessions_from_account", return_value=[]
|
||||
"evennia.SESSION_HANDLER.sessions_from_account", return_value=[]
|
||||
) as mock_sessh:
|
||||
idle = self.account.connection_time
|
||||
self.assertEqual(idle, None)
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ import time
|
|||
from codecs import lookup as codecs_lookup
|
||||
|
||||
from django.conf import settings
|
||||
from evennia.server.sessionhandler import SESSIONS
|
||||
import evennia
|
||||
from evennia.utils import create, logger, search, utils
|
||||
|
||||
COMMAND_DEFAULT_CLASS = utils.class_from_module(settings.COMMAND_DEFAULT_CLASS)
|
||||
|
|
@ -495,9 +495,8 @@ class CmdWho(COMMAND_DEFAULT_CLASS):
|
|||
"""
|
||||
Get all connected accounts by polling session.
|
||||
"""
|
||||
|
||||
account = self.account
|
||||
session_list = SESSIONS.get_sessions()
|
||||
session_list = evennia.SESSION_HANDLER.get_sessions()
|
||||
|
||||
session_list = sorted(session_list, key=lambda o: o.account.key)
|
||||
|
||||
|
|
@ -508,7 +507,7 @@ class CmdWho(COMMAND_DEFAULT_CLASS):
|
|||
"Admins"
|
||||
)
|
||||
|
||||
naccounts = SESSIONS.account_count()
|
||||
naccounts = evennia.SESSION_HANDLER.account_count()
|
||||
if show_session_data:
|
||||
# privileged info
|
||||
table = self.styled_table(
|
||||
|
|
|
|||
|
|
@ -10,7 +10,8 @@ import time
|
|||
from django.conf import settings
|
||||
|
||||
from evennia.server.models import ServerConfig
|
||||
from evennia.server.sessionhandler import SESSIONS
|
||||
|
||||
import evennia
|
||||
from evennia.utils import class_from_module, evtable, logger, search
|
||||
|
||||
COMMAND_DEFAULT_CLASS = class_from_module(settings.COMMAND_DEFAULT_CLASS)
|
||||
|
|
@ -68,7 +69,7 @@ class CmdBoot(COMMAND_DEFAULT_CLASS):
|
|||
|
||||
if "sid" in self.switches:
|
||||
# Boot a particular session id.
|
||||
sessions = SESSIONS.get_sessions(True)
|
||||
sessions = evennia.SESSION_HANDLER.get_sessions(True)
|
||||
for sess in sessions:
|
||||
# Find the session with the matching session id.
|
||||
if sess.sessid == int(args):
|
||||
|
|
@ -85,7 +86,7 @@ class CmdBoot(COMMAND_DEFAULT_CLASS):
|
|||
caller.msg(f"You don't have the permission to boot {pobj.key}.")
|
||||
return
|
||||
# we have a bootable object with a connected user
|
||||
matches = SESSIONS.sessions_from_account(pobj)
|
||||
matches = evennia.SESSION_HANDLER.sessions_from_account(pobj)
|
||||
for match in matches:
|
||||
boot_list.append(match)
|
||||
|
||||
|
|
@ -564,7 +565,7 @@ class CmdWall(COMMAND_DEFAULT_CLASS):
|
|||
return
|
||||
message = f'{self.caller.name} shouts "{self.args}"'
|
||||
self.msg("Announcing to all connected sessions ...")
|
||||
SESSIONS.announce_all(message)
|
||||
evennia.SESSION_HANDLER.announce_all(message)
|
||||
|
||||
|
||||
class CmdForce(COMMAND_DEFAULT_CLASS):
|
||||
|
|
|
|||
|
|
@ -16,9 +16,9 @@ import django
|
|||
import twisted
|
||||
from django.conf import settings
|
||||
|
||||
import evennia
|
||||
from evennia.accounts.models import AccountDB
|
||||
from evennia.scripts.taskhandler import TaskHandlerTask
|
||||
from evennia.server.sessionhandler import SESSIONS
|
||||
from evennia.utils import gametime, logger, search, utils
|
||||
from evennia.utils.eveditor import EvEditor
|
||||
from evennia.utils.evmenu import ask_yes_no
|
||||
|
|
@ -74,8 +74,8 @@ class CmdReload(COMMAND_DEFAULT_CLASS):
|
|||
if self.args:
|
||||
reason = "(Reason: %s) " % self.args.rstrip(".")
|
||||
if _BROADCAST_SERVER_RESTART_MESSAGES:
|
||||
SESSIONS.announce_all(f" Server restart initiated {reason}...")
|
||||
SESSIONS.portal_restart_server()
|
||||
evennia.SESSION_HANDLER.announce_all(f" Server restart initiated {reason}...")
|
||||
evennia.SESSION_HANDLER.portal_restart_server()
|
||||
|
||||
|
||||
class CmdReset(COMMAND_DEFAULT_CLASS):
|
||||
|
|
@ -108,8 +108,8 @@ class CmdReset(COMMAND_DEFAULT_CLASS):
|
|||
"""
|
||||
Reload the system.
|
||||
"""
|
||||
SESSIONS.announce_all(" Server resetting/restarting ...")
|
||||
SESSIONS.portal_reset_server()
|
||||
evennia.SESSION_HANDLER.announce_all(" Server resetting/restarting ...")
|
||||
evennia.SESSION_HANDLER.portal_reset_server()
|
||||
|
||||
|
||||
class CmdShutdown(COMMAND_DEFAULT_CLASS):
|
||||
|
|
@ -137,8 +137,8 @@ class CmdShutdown(COMMAND_DEFAULT_CLASS):
|
|||
if self.args:
|
||||
announcement += "%s\n" % self.args
|
||||
logger.log_info(f"Server shutdown by {self.caller.name}.")
|
||||
SESSIONS.announce_all(announcement)
|
||||
SESSIONS.portal_shutdown()
|
||||
evennia.SESSION_HANDLER.announce_all(announcement)
|
||||
evennia.SESSION_HANDLER.portal_shutdown()
|
||||
|
||||
|
||||
def _py_load(caller):
|
||||
|
|
@ -562,7 +562,7 @@ class CmdService(COMMAND_DEFAULT_CLASS):
|
|||
return
|
||||
|
||||
# get all services
|
||||
service_collection = SESSIONS.server.services
|
||||
service_collection = evennia.SESSION_HANDLER.server.services
|
||||
|
||||
if not switches or switches[0] == "list":
|
||||
# Just display the list of installed services and their
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@ from unittest.mock import MagicMock, Mock, patch
|
|||
from anything import Anything
|
||||
from django.conf import settings
|
||||
from django.test import override_settings
|
||||
import evennia
|
||||
from evennia import (
|
||||
DefaultCharacter,
|
||||
DefaultExit,
|
||||
|
|
@ -34,7 +35,6 @@ from evennia.commands.default import syscommands, system, unloggedin
|
|||
from evennia.commands.default.cmdset_character import CharacterCmdSet
|
||||
from evennia.commands.default.muxcommand import MuxCommand
|
||||
from evennia.prototypes import prototypes as protlib
|
||||
from evennia.server.sessionhandler import SESSIONS
|
||||
from evennia.utils import create, gametime, utils
|
||||
from evennia.utils.test_resources import BaseEvenniaCommandTest # noqa
|
||||
from evennia.utils.test_resources import BaseEvenniaTest, EvenniaCommandTest
|
||||
|
|
@ -2113,7 +2113,7 @@ class TestUnconnectedCommand(BaseEvenniaCommandTest):
|
|||
% (
|
||||
settings.SERVERNAME,
|
||||
datetime.datetime.fromtimestamp(gametime.SERVER_START_TIME).ctime(),
|
||||
SESSIONS.account_count(),
|
||||
evennia.SESSION_HANDLER.account_count(),
|
||||
utils.get_evennia_version(),
|
||||
)
|
||||
)
|
||||
|
|
|
|||
|
|
@ -8,9 +8,9 @@ from codecs import lookup as codecs_lookup
|
|||
|
||||
from django.conf import settings
|
||||
|
||||
import evennia
|
||||
from evennia.commands.cmdhandler import CMD_LOGINSTART
|
||||
from evennia.comms.models import ChannelDB
|
||||
from evennia.server.sessionhandler import SESSIONS
|
||||
from evennia.utils import class_from_module, create, gametime, logger, utils
|
||||
|
||||
COMMAND_DEFAULT_CLASS = utils.class_from_module(settings.COMMAND_DEFAULT_CLASS)
|
||||
|
|
@ -462,7 +462,7 @@ class CmdUnconnectedInfo(COMMAND_DEFAULT_CLASS):
|
|||
% (
|
||||
settings.SERVERNAME,
|
||||
datetime.datetime.fromtimestamp(gametime.SERVER_START_TIME).ctime(),
|
||||
SESSIONS.account_count(),
|
||||
evennia.SESSION_HANDLER.account_count(),
|
||||
utils.get_evennia_version(),
|
||||
)
|
||||
)
|
||||
|
|
|
|||
|
|
@ -12,7 +12,6 @@ from twisted.application import internet
|
|||
from evennia import settings
|
||||
from evennia.contrib.base_systems.godotwebsocket.text2bbcode import parse_to_bbcode
|
||||
from evennia.server.portal import webclient
|
||||
from evennia.server.portal.portalsessionhandler import PORTAL_SESSIONS
|
||||
from evennia.settings_default import LOCKDOWN_MODE
|
||||
|
||||
|
||||
|
|
@ -70,6 +69,7 @@ def start_plugin_services(portal):
|
|||
factory = GodotWebsocket()
|
||||
factory.noisy = False
|
||||
factory.protocol = GodotWebSocketClient
|
||||
from evennia.server.portal.portalsessionhandler import PORTAL_SESSIONS
|
||||
factory.sessionhandler = PORTAL_SESSIONS
|
||||
|
||||
interface = "127.0.0.1" if LOCKDOWN_MODE else settings.GODOT_CLIENT_WEBSOCKET_CLIENT_INTERFACE
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ from anything import Anything
|
|||
from django.test import override_settings
|
||||
from mock import patch
|
||||
|
||||
from evennia.server.sessionhandler import SESSIONS
|
||||
import evennia
|
||||
from evennia.utils.test_resources import BaseEvenniaTest
|
||||
|
||||
from .server import AuditedServerSession
|
||||
|
|
@ -21,13 +21,13 @@ class AuditingTest(BaseEvenniaTest):
|
|||
def setup_session(self):
|
||||
"""Overrides default one in EvenniaTest"""
|
||||
dummysession = AuditedServerSession()
|
||||
dummysession.init_session("telnet", ("localhost", "testmode"), SESSIONS)
|
||||
dummysession.init_session("telnet", ("localhost", "testmode"), evennia.SESSION_HANDLER)
|
||||
dummysession.sessid = 1
|
||||
SESSIONS.portal_connect(
|
||||
evennia.SESSION_HANDLER.portal_connect(
|
||||
dummysession.get_sync_data()
|
||||
) # note that this creates a new Session!
|
||||
session = SESSIONS.session_from_sessid(1) # the real session
|
||||
SESSIONS.login(session, self.account, testmode=True)
|
||||
session = evennia.SESSION_HANDLER.session_from_sessid(1) # the real session
|
||||
evennia.SESSION_HANDLER.login(session, self.account, testmode=True)
|
||||
self.session = session
|
||||
|
||||
@patch(
|
||||
|
|
|
|||
|
|
@ -138,9 +138,8 @@ Optional:
|
|||
object dbrefs). For boolean fields, return '0' or '1' to set
|
||||
the field to False or True.
|
||||
"""
|
||||
|
||||
import evennia
|
||||
from evennia import Command
|
||||
from evennia.server.sessionhandler import SESSIONS
|
||||
from evennia.utils import delay, evmenu, evtable, list_to_string, logger
|
||||
|
||||
|
||||
|
|
@ -573,7 +572,7 @@ def verify_online_player(caller, value):
|
|||
made.
|
||||
"""
|
||||
# Get a list of sessions
|
||||
session_list = SESSIONS.get_sessions()
|
||||
session_list = evennia.SESSION_HANDLER.get_sessions()
|
||||
char_list = []
|
||||
matched_character = None
|
||||
|
||||
|
|
|
|||
|
|
@ -3,9 +3,9 @@ import datetime
|
|||
import git
|
||||
from django.conf import settings
|
||||
|
||||
import evennia
|
||||
from evennia import CmdSet, InterruptCommand
|
||||
from evennia.commands.default.muxcommand import MuxCommand
|
||||
from evennia.server.sessionhandler import SESSIONS
|
||||
from evennia.utils.utils import list_to_string
|
||||
|
||||
|
||||
|
|
@ -147,10 +147,10 @@ class GitCommand(MuxCommand):
|
|||
caller.msg(self.get_branches())
|
||||
elif self.action == "checkout":
|
||||
if self.checkout():
|
||||
SESSIONS.portal_restart_server()
|
||||
evennia.SESSION_HANDLER.portal_restart_server()
|
||||
elif self.action == "pull":
|
||||
if self.pull():
|
||||
SESSIONS.portal_restart_server()
|
||||
evennia.SESSION_HANDLER.portal_restart_server()
|
||||
else:
|
||||
caller.msg("You can only git status, git branch, git checkout, or git pull.")
|
||||
return
|
||||
|
|
|
|||
|
|
@ -13,6 +13,7 @@ from collections import defaultdict
|
|||
import inflect
|
||||
from django.conf import settings
|
||||
from django.utils.translation import gettext as _
|
||||
import evennia
|
||||
from evennia.commands import cmdset
|
||||
from evennia.commands.cmdsethandler import CmdSetHandler
|
||||
from evennia.objects.manager import ObjectManager
|
||||
|
|
@ -36,7 +37,6 @@ _INFLECT = inflect.engine()
|
|||
_MULTISESSION_MODE = settings.MULTISESSION_MODE
|
||||
|
||||
_ScriptDB = None
|
||||
_SESSIONS = None
|
||||
_CMDHANDLER = None
|
||||
|
||||
_AT_SEARCH_RESULT = variable_from_module(*settings.SEARCH_AT_RESULT.rsplit(".", 1))
|
||||
|
|
@ -67,15 +67,12 @@ class ObjectSessionHandler:
|
|||
self._recache()
|
||||
|
||||
def _recache(self):
|
||||
global _SESSIONS
|
||||
if not _SESSIONS:
|
||||
from evennia.server.sessionhandler import SESSIONS as _SESSIONS
|
||||
self._sessid_cache = list(
|
||||
set(int(val) for val in (self.obj.db_sessid or "").split(",") if val)
|
||||
)
|
||||
if any(sessid for sessid in self._sessid_cache if sessid not in _SESSIONS):
|
||||
if any(sessid for sessid in self._sessid_cache if sessid not in evennia.SESSION_HANDLER):
|
||||
# cache is out of sync with sessionhandler! Only retain the ones in the handler.
|
||||
self._sessid_cache = [sessid for sessid in self._sessid_cache if sessid in _SESSIONS]
|
||||
self._sessid_cache = [sessid for sessid in self._sessid_cache if sessid in evennia.SESSION_HANDLER]
|
||||
self.obj.db_sessid = ",".join(str(val) for val in self._sessid_cache)
|
||||
self.obj.save(update_fields=["db_sessid"])
|
||||
|
||||
|
|
@ -94,18 +91,16 @@ class ObjectSessionHandler:
|
|||
Aliased to `self.all()`.
|
||||
|
||||
"""
|
||||
global _SESSIONS
|
||||
if not _SESSIONS:
|
||||
from evennia.server.sessionhandler import SESSIONS as _SESSIONS
|
||||
|
||||
if sessid:
|
||||
sessions = (
|
||||
[_SESSIONS[sessid] if sessid in _SESSIONS else None]
|
||||
[evennia.SESSION_HANDLER[sessid] if sessid in evennia.SESSION_HANDLER else None]
|
||||
if sessid in self._sessid_cache
|
||||
else []
|
||||
)
|
||||
else:
|
||||
sessions = [
|
||||
_SESSIONS[ssid] if ssid in _SESSIONS else None for ssid in self._sessid_cache
|
||||
evennia.SESSION_HANDLER[ssid] if ssid in evennia.SESSION_HANDLER else None for ssid in self._sessid_cache
|
||||
]
|
||||
if None in sessions:
|
||||
# this happens only if our cache has gone out of sync with the SessionHandler.
|
||||
|
|
@ -135,16 +130,13 @@ class ObjectSessionHandler:
|
|||
in the the core sessionhandler.
|
||||
|
||||
"""
|
||||
global _SESSIONS
|
||||
if not _SESSIONS:
|
||||
from evennia.server.sessionhandler import SESSIONS as _SESSIONS
|
||||
try:
|
||||
sessid = session.sessid
|
||||
except AttributeError:
|
||||
sessid = session
|
||||
|
||||
sessid_cache = self._sessid_cache
|
||||
if sessid in _SESSIONS and sessid not in sessid_cache:
|
||||
if sessid in evennia.SESSION_HANDLER and sessid not in sessid_cache:
|
||||
if len(sessid_cache) >= _SESSID_MAX:
|
||||
return
|
||||
sessid_cache.append(sessid)
|
||||
|
|
|
|||
|
|
@ -16,8 +16,8 @@ from twisted.web.http_headers import Headers
|
|||
from twisted.web.iweb import IBodyProducer
|
||||
from zope.interface import implementer
|
||||
|
||||
import evennia
|
||||
from evennia.accounts.models import AccountDB
|
||||
from evennia.server.sessionhandler import SESSIONS
|
||||
from evennia.utils import get_evennia_version, logger
|
||||
|
||||
_EGI_HOST = "http://evennia-game-index.appspot.com"
|
||||
|
|
@ -98,7 +98,7 @@ class EvenniaGameIndexClient(object):
|
|||
"telnet_port": egi_config.get("telnet_port", ""),
|
||||
"web_client_url": egi_config.get("web_client_url", ""),
|
||||
# Game stats
|
||||
"connected_account_count": SESSIONS.account_count(),
|
||||
"connected_account_count": evennia.SESSION_HANDLER.account_count(),
|
||||
"total_account_count": AccountDB.objects.num_total_accounts() or 0,
|
||||
# System info
|
||||
"evennia_version": get_evennia_version(),
|
||||
|
|
|
|||
|
|
@ -12,6 +12,7 @@ import time
|
|||
from django.conf import settings
|
||||
from django.utils.translation import gettext as _
|
||||
|
||||
import evennia
|
||||
from evennia.accounts.models import AccountDB
|
||||
from evennia.server.models import ServerConfig
|
||||
from evennia.utils import create, logger
|
||||
|
|
@ -180,10 +181,9 @@ def reset_server():
|
|||
|
||||
"""
|
||||
ServerConfig.objects.conf("server_epoch", time.time())
|
||||
from evennia.server.sessionhandler import SESSIONS
|
||||
|
||||
logger.log_info("Initial setup complete. Restarting Server once.")
|
||||
SESSIONS.portal_reset_server()
|
||||
evennia.SESSION_HANDLER.portal_reset_server()
|
||||
|
||||
|
||||
def handle_setup(last_step=None):
|
||||
|
|
|
|||
|
|
@ -24,9 +24,9 @@ from django.db import connection
|
|||
|
||||
import evennia
|
||||
|
||||
evennia._init()
|
||||
|
||||
evennia._init(portal_mode=True)
|
||||
from evennia.server.portal.portalsessionhandler import PORTAL_SESSIONS
|
||||
|
||||
from evennia.server.webserver import EvenniaReverseProxyResource
|
||||
from evennia.utils import logger
|
||||
from evennia.utils.utils import (
|
||||
|
|
|
|||
|
|
@ -489,5 +489,5 @@ class PortalSessionHandler(SessionHandler):
|
|||
log_trace()
|
||||
|
||||
|
||||
_PORTAL_SESSION_HANDLER_CLASS = class_from_module(settings.PORTAL_SESSION_HANDLER_CLASS)
|
||||
PORTAL_SESSIONS = _PORTAL_SESSION_HANDLER_CLASS()
|
||||
# This will be filled in when the portal boots.
|
||||
PORTAL_SESSIONS = None
|
||||
|
|
|
|||
|
|
@ -27,6 +27,8 @@ import evennia
|
|||
|
||||
evennia._init()
|
||||
|
||||
from evennia.server.sessionhandler import SESSIONS
|
||||
|
||||
from django.conf import settings
|
||||
from django.db import connection
|
||||
from django.db.utils import OperationalError
|
||||
|
|
@ -35,10 +37,12 @@ from django.utils.translation import gettext as _
|
|||
from evennia.accounts.models import AccountDB
|
||||
from evennia.scripts.models import ScriptDB
|
||||
from evennia.server.models import ServerConfig
|
||||
from evennia.server.sessionhandler import SESSIONS
|
||||
|
||||
from evennia.utils import logger
|
||||
from evennia.utils.utils import get_evennia_version, make_iter, mod_import
|
||||
|
||||
|
||||
|
||||
_SA = object.__setattr__
|
||||
|
||||
# a file with a flag telling the server to restart after shutdown or not.
|
||||
|
|
|
|||
|
|
@ -874,9 +874,6 @@ class ServerSessionHandler(SessionHandler):
|
|||
log_trace()
|
||||
|
||||
|
||||
# import class from settings
|
||||
_SESSION_HANDLER_CLASS = class_from_module(settings.SERVER_SESSION_HANDLER_CLASS)
|
||||
|
||||
# Instantiate class. These globals are used to provide singleton-like behavior.
|
||||
SESSION_HANDLER = _SESSION_HANDLER_CLASS()
|
||||
SESSIONS = SESSION_HANDLER # legacy
|
||||
# These are filled in during server boot.
|
||||
SESSION_HANDLER = None
|
||||
SESSIONS = None # legacy
|
||||
|
|
|
|||
|
|
@ -30,6 +30,7 @@ except ImportError:
|
|||
from django.contrib.contenttypes.models import ContentType
|
||||
from django.core.exceptions import ObjectDoesNotExist
|
||||
from django.utils.safestring import SafeString
|
||||
import evennia
|
||||
from evennia.utils import logger
|
||||
from evennia.utils.utils import is_iter, to_bytes, uses_database
|
||||
|
||||
|
|
@ -71,7 +72,6 @@ _SA = object.__setattr__
|
|||
_FROM_MODEL_MAP = None
|
||||
_TO_MODEL_MAP = None
|
||||
_IGNORE_DATETIME_MODELS = None
|
||||
_SESSION_HANDLER = None
|
||||
|
||||
|
||||
def _IS_PACKED_DBOBJ(o):
|
||||
|
|
@ -114,7 +114,7 @@ def _TO_DATESTRING(obj):
|
|||
|
||||
def _init_globals():
|
||||
"""Lazy importing to avoid circular import issues"""
|
||||
global _FROM_MODEL_MAP, _TO_MODEL_MAP, _SESSION_HANDLER, _IGNORE_DATETIME_MODELS
|
||||
global _FROM_MODEL_MAP, _TO_MODEL_MAP, _IGNORE_DATETIME_MODELS
|
||||
if not _FROM_MODEL_MAP:
|
||||
_FROM_MODEL_MAP = defaultdict(str)
|
||||
_FROM_MODEL_MAP.update(dict((c.model, c.natural_key()) for c in ContentType.objects.all()))
|
||||
|
|
@ -129,9 +129,6 @@ def _init_globals():
|
|||
for src_key, dst_key in settings.ATTRIBUTE_STORED_MODEL_RENAME:
|
||||
_TO_MODEL_MAP[src_key] = _TO_MODEL_MAP.get(dst_key, None)
|
||||
_IGNORE_DATETIME_MODELS.append(src_key)
|
||||
if not _SESSION_HANDLER:
|
||||
from evennia.server.sessionhandler import SESSION_HANDLER as _SESSION_HANDLER
|
||||
|
||||
|
||||
#
|
||||
# SaverList, SaverDict, SaverSet - Attribute-specific helper classes and functions
|
||||
|
|
@ -609,7 +606,7 @@ def pack_session(item):
|
|||
|
||||
"""
|
||||
_init_globals()
|
||||
session = _SESSION_HANDLER.get(item.sessid)
|
||||
session = evennia.SESSION_HANDLER.get(item.sessid)
|
||||
if session and session.conn_time == item.conn_time:
|
||||
# we require connection times to be identical for the Session
|
||||
# to be accepted as actually being a session (sessids gets
|
||||
|
|
@ -636,7 +633,7 @@ def unpack_session(item):
|
|||
exists, None will be returned.
|
||||
"""
|
||||
_init_globals()
|
||||
session = _SESSION_HANDLER.get(item[1])
|
||||
session = evennia.SESSION_HANDLER.get(item[1])
|
||||
if session and session.conn_time == item[2]:
|
||||
# we require connection times to be identical for the Session
|
||||
# to be accepted as the same as the one stored (sessids gets
|
||||
|
|
|
|||
|
|
@ -13,6 +13,7 @@ from datetime import datetime, timedelta
|
|||
from django.conf import settings
|
||||
from django.db.utils import OperationalError
|
||||
|
||||
import evennia
|
||||
from evennia import DefaultScript
|
||||
from evennia.server.models import ServerConfig
|
||||
from evennia.utils.create import create_script
|
||||
|
|
@ -125,9 +126,8 @@ def portal_uptime():
|
|||
Returns:
|
||||
time (float): The uptime of the portal.
|
||||
"""
|
||||
from evennia.server.sessionhandler import SESSIONS
|
||||
|
||||
return time.time() - SESSIONS.portal_start_time
|
||||
return time.time() - evennia.SESSION_HANDLER.portal_start_time
|
||||
|
||||
|
||||
def game_epoch():
|
||||
|
|
|
|||
|
|
@ -31,6 +31,7 @@ from django.test import TestCase, override_settings
|
|||
from mock import MagicMock, Mock, patch
|
||||
from twisted.internet.defer import Deferred
|
||||
|
||||
import evennia
|
||||
from evennia import settings_default
|
||||
from evennia.accounts.accounts import DefaultAccount
|
||||
from evennia.commands.command import InterruptCommand
|
||||
|
|
@ -43,7 +44,6 @@ from evennia.objects.objects import (
|
|||
)
|
||||
from evennia.scripts.scripts import DefaultScript
|
||||
from evennia.server.serversession import ServerSession
|
||||
from evennia.server.sessionhandler import SESSIONS
|
||||
from evennia.utils import ansi, create
|
||||
from evennia.utils.idmapper.models import flush_cache
|
||||
from evennia.utils.utils import all_from_module, to_str
|
||||
|
|
@ -234,18 +234,18 @@ class EvenniaTestMixin:
|
|||
|
||||
def setup_session(self):
|
||||
dummysession = ServerSession()
|
||||
dummysession.init_session("telnet", ("localhost", "testmode"), SESSIONS)
|
||||
dummysession.init_session("telnet", ("localhost", "testmode"), evennia.SESSION_HANDLER)
|
||||
dummysession.sessid = 1
|
||||
SESSIONS.portal_connect(
|
||||
evennia.SESSION_HANDLER.portal_connect(
|
||||
dummysession.get_sync_data()
|
||||
) # note that this creates a new Session!
|
||||
session = SESSIONS.session_from_sessid(1) # the real session
|
||||
SESSIONS.login(session, self.account, testmode=True)
|
||||
session = evennia.SESSION_HANDLER.session_from_sessid(1) # the real session
|
||||
evennia.SESSION_HANDLER.login(session, self.account, testmode=True)
|
||||
self.session = session
|
||||
|
||||
def teardown_session(self):
|
||||
if hasattr(self, "sessions"):
|
||||
del SESSIONS[self.session.sessid]
|
||||
del evennia.SESSION_HANDLER[self.session.sessid]
|
||||
|
||||
@patch("evennia.scripts.taskhandler.deferLater", _mock_deferlater)
|
||||
def setUp(self):
|
||||
|
|
@ -253,13 +253,13 @@ class EvenniaTestMixin:
|
|||
Sets up testing environment
|
||||
"""
|
||||
self.backups = (
|
||||
SESSIONS.data_out,
|
||||
SESSIONS.disconnect,
|
||||
evennia.SESSION_HANDLER.data_out,
|
||||
evennia.SESSION_HANDLER.disconnect,
|
||||
settings.DEFAULT_HOME,
|
||||
settings.PROTOTYPE_MODULES,
|
||||
)
|
||||
SESSIONS.data_out = Mock()
|
||||
SESSIONS.disconnect = Mock()
|
||||
evennia.SESSION_HANDLER.data_out = Mock()
|
||||
evennia.SESSION_HANDLER.disconnect = Mock()
|
||||
|
||||
self.create_accounts()
|
||||
self.create_rooms()
|
||||
|
|
@ -271,8 +271,8 @@ class EvenniaTestMixin:
|
|||
def tearDown(self):
|
||||
flush_cache()
|
||||
try:
|
||||
SESSIONS.data_out = self.backups[0]
|
||||
SESSIONS.disconnect = self.backups[1]
|
||||
evennia.SESSION_HANDLER.data_out = self.backups[0]
|
||||
evennia.SESSION_HANDLER.disconnect = self.backups[1]
|
||||
settings.DEFAULT_HOME = self.backups[2]
|
||||
settings.PROTOTYPE_MODULES = self.backups[3]
|
||||
except AttributeError as err:
|
||||
|
|
@ -281,7 +281,7 @@ class EvenniaTestMixin:
|
|||
"in your test, make sure you also added `super().setUp()`!"
|
||||
)
|
||||
|
||||
del SESSIONS[self.session.sessid]
|
||||
del evennia.SESSION_HANDLER[self.session.sessid]
|
||||
self.teardown_accounts()
|
||||
super().tearDown()
|
||||
|
||||
|
|
@ -422,7 +422,7 @@ class EvenniaCommandTestMixin:
|
|||
cmdobj.cmdstring = cmdobj.cmdname # deprecated
|
||||
cmdobj.args = input_args
|
||||
cmdobj.cmdset = cmdset
|
||||
cmdobj.session = SESSIONS.session_from_sessid(1)
|
||||
cmdobj.session = evennia.SESSION_HANDLER.session_from_sessid(1)
|
||||
cmdobj.account = self.account
|
||||
cmdobj.raw_string = raw_string if raw_string is not None else cmdobj.key + " " + input_args
|
||||
cmdobj.obj = obj or (caller if caller else self.char1)
|
||||
|
|
|
|||
|
|
@ -34,6 +34,8 @@ from django.core.validators import validate_email as django_validate_email
|
|||
from django.utils import timezone
|
||||
from django.utils.html import strip_tags
|
||||
from django.utils.translation import gettext as _
|
||||
|
||||
import evennia
|
||||
from evennia.utils import logger
|
||||
from simpleeval import simple_eval
|
||||
from twisted.internet import reactor, threads
|
||||
|
|
@ -1061,14 +1063,13 @@ def server_services():
|
|||
services (dict): A dict of available services.
|
||||
|
||||
"""
|
||||
from evennia.server.sessionhandler import SESSIONS
|
||||
|
||||
if hasattr(SESSIONS, "server") and hasattr(SESSIONS.server, "services"):
|
||||
server = SESSIONS.server.services.namedServices
|
||||
if hasattr(evennia.SESSION_HANDLER, "server") and hasattr(evennia.SESSION_HANDLER.server, "services"):
|
||||
server = evennia.SESSION_HANDLER.server.services.namedServices
|
||||
else:
|
||||
# This function must be called from inside the evennia process.
|
||||
server = {}
|
||||
del SESSIONS
|
||||
del evennia.SESSION_HANDLER
|
||||
return server
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ The main index page, including the game stats
|
|||
from django.conf import settings
|
||||
from django.views.generic import TemplateView
|
||||
|
||||
from evennia import SESSION_HANDLER
|
||||
import evennia
|
||||
from evennia.accounts.models import AccountDB
|
||||
from evennia.objects.models import ObjectDB
|
||||
from evennia.utils import class_from_module
|
||||
|
|
@ -25,7 +25,7 @@ def _gamestats():
|
|||
nplyrs_conn_recent = len(recent_users) or "none"
|
||||
nplyrs = AccountDB.objects.num_total_accounts() or "none"
|
||||
nplyrs_reg_recent = len(AccountDB.objects.get_recently_created_accounts()) or "none"
|
||||
nsess = SESSION_HANDLER.account_count()
|
||||
nsess = evennia.SESSION_HANDLER.account_count()
|
||||
# nsess = len(AccountDB.objects.get_connected_accounts()) or "no one"
|
||||
|
||||
nobjs = ObjectDB.objects.count()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue