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