Be more lenient with iterables sent to msg(text=..)

This will enforce that the text argument must either
be a string or a tuple.
This commit is contained in:
Griatch 2018-02-08 20:35:00 +01:00
parent d4d4841493
commit 8a1fdb834b
2 changed files with 17 additions and 2 deletions

View file

@ -21,7 +21,7 @@ from evennia.objects.models import ObjectDB
from evennia.comms.models import ChannelDB
from evennia.commands import cmdhandler
from evennia.utils import logger
from evennia.utils.utils import (lazy_property,
from evennia.utils.utils import (lazy_property, to_str,
make_iter, to_unicode, is_iter,
variable_from_module)
from evennia.typeclasses.attributes import NickHandler
@ -421,6 +421,13 @@ class DefaultAccount(with_metaclass(TypeclassBase, AccountDB)):
kwargs["options"] = options
if text and not (isinstance(text, basestring) or isinstance(text, tuple)):
# sanitize text before sending across the wire
try:
text = to_str(text, force_string=True)
except Exception:
text = repr(text)
# session relay
sessions = make_iter(session) if session else self.sessions.all()
for session in sessions:

View file

@ -22,7 +22,7 @@ from evennia.commands import cmdhandler
from evennia.utils import search
from evennia.utils import logger
from evennia.utils.utils import (variable_from_module, lazy_property,
make_iter, to_unicode, is_iter)
make_iter, to_unicode, is_iter, to_str)
from django.utils.translation import ugettext as _
_MULTISESSION_MODE = settings.MULTISESSION_MODE
@ -528,11 +528,19 @@ class DefaultObject(with_metaclass(TypeclassBase, ObjectDB)):
kwargs["options"] = options
if text and not (isinstance(text, basestring) or isinstance(text, tuple)):
# sanitize text before sending across the wire
try:
text = to_str(text, force_string=True)
except Exception:
text = repr(text)
# relay to session(s)
sessions = make_iter(session) if session else self.sessions.all()
for session in sessions:
session.data_out(text=text, **kwargs)
def for_contents(self, func, exclude=None, **kwargs):
"""
Runs a function on every object contained within this one.