Traceback (most recent call last):


 "/home/ubuntu/workspace/demogame/world/objects/tests.py", line 13, in test_render_external_sender

print(msg)


 "/home/ubuntu/workspace/evennia2/evennia/comms/models.py", line 403, in __str__

senders = ",".join(obj.key for obj in self.senders)


 "/home/ubuntu/workspace/evennia2/evennia/comms/models.py", line 403, in <genexpr>

senders = ",".join(obj.key for obj in self.senders)
AttributeError: 'str' object has no attribute 'key'

Traceback (most recent call last):


 "/usr/local/Cellar/python/3.6.4_4/Frameworks/Python.framework/Versions/3.6/lib/python3.6/threading.py", line 916, in _bootstrap_inner

self.run()


 "/usr/local/Cellar/python/3.6.4_4/Frameworks/Python.framework/Versions/3.6/lib/python3.6/threading.py", line 864, in run

self._target(*self._args, **self._kwargs)


 "/somefolder/scripts/venv/lib/python3.6/site-packages/rx/concurrency/eventloopscheduler.py", line 151, in run

item.invoke()


 "/somefolder/scripts/venv/lib/python3.6/site-packages/rx/concurrency/scheduleditem.py", line 17, in invoke

ret = self.scheduler.invoke_action(self.action, self.state)


 "/somefolder/scripts/venv/lib/python3.6/site-packages/rx/concurrency/schedulerbase.py", line 14, in invoke_action

ret = action(self, state)


 "/somefolder/scripts/venv/lib/python3.6/site-packages/rx/linq/observable/subscribeon.py", line 34, in action

d.disposable = ScheduledDisposable(scheduler, source.subscribe(observer))


 "/somefolder/scripts/venv/lib/python3.6/site-packages/rx/core/observablebase.py", line 83, in subscribe

current_thread_scheduler.schedule(set_disposable)


 "/somefolder/scripts/venv/lib/python3.6/site-packages/rx/concurrency/currentthreadscheduler.py", line 50, in schedule

return self.schedule_relative(timedelta(0), action, state)


 "/somefolder/scripts/venv/lib/python3.6/site-packages/rx/concurrency/currentthreadscheduler.py", line 67, in schedule_relative

Trampoline.run(queue)


 "/somefolder/scripts/venv/lib/python3.6/site-packages/rx/concurrency/currentthreadscheduler.py", line 31, in run

item.invoke()


 "/somefolder/scripts/venv/lib/python3.6/site-packages/rx/concurrency/scheduleditem.py", line 17, in invoke

ret = self.scheduler.invoke_action(self.action, self.state)


 "/somefolder/scripts/venv/lib/python3.6/site-packages/rx/concurrency/schedulerbase.py", line 14, in invoke_action

ret = action(self, state)


 "/somefolder/scripts/venv/lib/python3.6/site-packages/rx/linq/observable/fromiterable.py", line 41, in action

observer.on_next(item)


 "/somefolder/scripts/venv/lib/python3.6/site-packages/rx/core/observerbase.py", line 19, in on_next

self._on_next_core(value)


 "/somefolder/scripts/venv/lib/python3.6/site-packages/rx/core/autodetachobserver.py", line 16, in _on_next_core

self.observer.on_next(value)


 "/somefolder/scripts/venv/lib/python3.6/site-packages/rx/core/observerbase.py", line 19, in on_next

self._on_next_core(value)


 "/somefolder/scripts/venv/lib/python3.6/site-packages/rx/core/anonymousobserver.py", line 14, in _on_next_core

self._next(value)


 "/somefolder/scripts/venv/lib/python3.6/site-packages/rx/linq/observable/merge.py", line 128, in on_next

observer.on_next(x)


 "/somefolder/scripts/venv/lib/python3.6/site-packages/rx/core/observerbase.py", line 19, in on_next

self._on_next_core(value)


 "/somefolder/scripts/venv/lib/python3.6/site-packages/rx/core/autodetachobserver.py", line 16, in _on_next_core

self.observer.on_next(value)


 "/somefolder/scripts/venv/lib/python3.6/site-packages/rx/core/observerbase.py", line 19, in on_next

self._on_next_core(value)


 "/somefolder/scripts/venv/lib/python3.6/site-packages/rx/core/anonymousobserver.py", line 14, in _on_next_core

self._next(value)


 "/somefolder/scripts/venv/lib/python3.6/site-packages/rx/linq/observable/select.py", line 36, in on_next

observer.on_next(result)


 "/somefolder/scripts/venv/lib/python3.6/site-packages/rx/core/observerbase.py", line 19, in on_next

self._on_next_core(value)


 "/somefolder/scripts/venv/lib/python3.6/site-packages/rx/core/autodetachobserver.py", line 16, in _on_next_core

self.observer.on_next(value)


 "/somefolder/scripts/venv/lib/python3.6/site-packages/rx/core/observerbase.py", line 19, in on_next

self._on_next_core(value)


 "/somefolder/scripts/venv/lib/python3.6/site-packages/rx/core/anonymousobserver.py", line 14, in _on_next_core

self._next(value)


 "/somefolder/scripts/venv/lib/python3.6/site-packages/rx/linq/observable/windowwithcount.py", line 58, in on_next

s.on_completed()


 "/somefolder/scripts/venv/lib/python3.6/site-packages/rx/subjects/subject.py", line 55, in on_completed

observer.on_completed()


 "/somefolder/scripts/venv/lib/python3.6/site-packages/rx/core/observerbase.py", line 44, in on_completed

self._on_completed_core()


 "/somefolder/scripts/venv/lib/python3.6/site-packages/rx/core/autodetachobserver.py", line 29, in _on_completed_core

self.observer.on_completed()


 "/somefolder/scripts/venv/lib/python3.6/site-packages/rx/core/observerbase.py", line 44, in on_completed

self._on_completed_core()


 "/somefolder/scripts/venv/lib/python3.6/site-packages/rx/core/autodetachobserver.py", line 29, in _on_completed_core

self.observer.on_completed()


 "/somefolder/scripts/venv/lib/python3.6/site-packages/rx/core/observerbase.py", line 44, in on_completed

self._on_completed_core()


 "/somefolder/scripts/venv/lib/python3.6/site-packages/rx/core/anonymousobserver.py", line 20, in _on_completed_core

self._completed()


 "/somefolder/scripts/venv/lib/python3.6/site-packages/rx/core/observerbase.py", line 44, in on_completed

self._on_completed_core()


 "/somefolder/scripts/venv/lib/python3.6/site-packages/rx/core/autodetachobserver.py", line 29, in _on_completed_core

self.observer.on_completed()


 "/somefolder/scripts/venv/lib/python3.6/site-packages/rx/core/observerbase.py", line 44, in on_completed

self._on_completed_core()


 "/somefolder/scripts/venv/lib/python3.6/site-packages/rx/core/autodetachobserver.py", line 29, in _on_completed_core

self.observer.on_completed()


 "/somefolder/scripts/venv/lib/python3.6/site-packages/rx/core/observerbase.py", line 44, in on_completed

self._on_completed_core()


 "/somefolder/scripts/venv/lib/python3.6/site-packages/rx/core/anonymousobserver.py", line 20, in _on_completed_core

self._completed()


 "/somefolder/scripts/venv/lib/python3.6/site-packages/rx/linq/observable/concat.py", line 89, in on_completed

cancelable.disposable = scheduler.schedule(action)


 "/somefolder/scripts/venv/lib/python3.6/site-packages/rx/concurrency/currentthreadscheduler.py", line 50, in schedule

return self.schedule_relative(timedelta(0), action, state)


 "/somefolder/scripts/venv/lib/python3.6/site-packages/rx/concurrency/currentthreadscheduler.py", line 67, in schedule_relative

Trampoline.run(queue)


 "/somefolder/scripts/venv/lib/python3.6/site-packages/rx/concurrency/currentthreadscheduler.py", line 31, in run

item.invoke()


 "/somefolder/scripts/venv/lib/python3.6/site-packages/rx/concurrency/scheduleditem.py", line 17, in invoke

ret = self.scheduler.invoke_action(self.action, self.state)


 "/somefolder/scripts/venv/lib/python3.6/site-packages/rx/concurrency/schedulerbase.py", line 14, in invoke_action

ret = action(self, state)


 "/somefolder/scripts/venv/lib/python3.6/site-packages/rx/linq/observable/concat.py", line 94, in action

observer.on_completed()


 "/somefolder/scripts/venv/lib/python3.6/site-packages/rx/core/observerbase.py", line 44, in on_completed

self._on_completed_core()


 "/somefolder/scripts/venv/lib/python3.6/site-packages/rx/core/autodetachobserver.py", line 29, in _on_completed_core

self.observer.on_completed()


 "/somefolder/scripts/venv/lib/python3.6/site-packages/rx/core/observerbase.py", line 44, in on_completed

self._on_completed_core()


 "/somefolder/scripts/venv/lib/python3.6/site-packages/rx/core/anonymousobserver.py", line 20, in _on_completed_core

self._completed()


 "/somefolder/scripts/venv/lib/python3.6/site-packages/rx/linq/observable/lastordefault.py", line 19, in on_completed

observer.on_next(value[0])


 "/somefolder/scripts/venv/lib/python3.6/site-packages/rx/core/observerbase.py", line 19, in on_next

self._on_next_core(value)


 "/somefolder/scripts/venv/lib/python3.6/site-packages/rx/core/autodetachobserver.py", line 16, in _on_next_core

self.observer.on_next(value)


 "/somefolder/scripts/venv/lib/python3.6/site-packages/rx/core/observerbase.py", line 19, in on_next

self._on_next_core(value)


 "/somefolder/scripts/venv/lib/python3.6/site-packages/rx/core/anonymousobserver.py", line 14, in _on_next_core

self._next(value)


 "/somefolder/scripts/venv/lib/python3.6/site-packages/rx/linq/observable/merge.py", line 128, in on_next

observer.on_next(x)


 "/somefolder/scripts/venv/lib/python3.6/site-packages/rx/core/observerbase.py", line 19, in on_next

self._on_next_core(value)


 "/somefolder/scripts/venv/lib/python3.6/site-packages/rx/core/autodetachobserver.py", line 16, in _on_next_core

self.observer.on_next(value)


 "/somefolder/scripts/venv/lib/python3.6/site-packages/rx/core/observerbase.py", line 19, in on_next

self._on_next_core(value)


 "/somefolder/scripts/venv/lib/python3.6/site-packages/rx/core/anonymousobserver.py", line 14, in _on_next_core

self._next(value)


 "/somefolder/scripts/venv/lib/python3.6/site-packages/rx/linq/observable/where.py", line 42, in on_next

observer.on_next(value)


 "/somefolder/scripts/venv/lib/python3.6/site-packages/rx/core/observerbase.py", line 19, in on_next

self._on_next_core(value)


 "/somefolder/scripts/venv/lib/python3.6/site-packages/rx/core/autodetachobserver.py", line 16, in _on_next_core

self.observer.on_next(value)


 "/somefolder/scripts/venv/lib/python3.6/site-packages/rx/core/observerbase.py", line 19, in on_next

self._on_next_core(value)


 "/somefolder/scripts/venv/lib/python3.6/site-packages/rx/core/anonymousobserver.py", line 14, in _on_next_core

self._next(value)


 "/somefolder/scripts/venv/lib/python3.6/site-packages/rx/linq/observable/select.py", line 36, in on_next

observer.on_next(result)


 "/somefolder/scripts/venv/lib/python3.6/site-packages/rx/core/observerbase.py", line 19, in on_next

self._on_next_core(value)


 "/somefolder/scripts/venv/lib/python3.6/site-packages/rx/core/autodetachobserver.py", line 16, in _on_next_core

self.observer.on_next(value)


 "/somefolder/scripts/venv/lib/python3.6/site-packages/rx/core/observerbase.py", line 19, in on_next

self._on_next_core(value)


 "/somefolder/scripts/venv/lib/python3.6/site-packages/rx/core/anonymousobserver.py", line 14, in _on_next_core

self._next(value)


 "/somefolder/scripts/venv/lib/python3.6/site-packages/rx/linq/observable/where.py", line 42, in on_next

observer.on_next(value)


 "/somefolder/scripts/venv/lib/python3.6/site-packages/rx/core/observerbase.py", line 19, in on_next

self._on_next_core(value)


 "/somefolder/scripts/venv/lib/python3.6/site-packages/rx/core/autodetachobserver.py", line 16, in _on_next_core

self.observer.on_next(value)


 "/somefolder/scripts/venv/lib/python3.6/site-packages/rx/core/observerbase.py", line 19, in on_next

self._on_next_core(value)


 "/somefolder/scripts/venv/lib/python3.6/site-packages/rx/core/anonymousobserver.py", line 14, in _on_next_core

self._next(value)


 "/somefolder/scripts/venv/lib/python3.6/site-packages/rx/linq/observable/merge.py", line 59, in on_next

subscribe(inner_source)


 "/somefolder/scripts/venv/lib/python3.6/site-packages/rx/linq/observable/merge.py", line 52, in subscribe

subscription.disposable = xs.subscribe(observer.on_next,
AttributeError: 'dict' object has no attribute 'subscribe'
