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
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue