diff --git a/evennia/comms/comms.py b/evennia/comms/comms.py index e6ee5eef8c..a6a6330b32 100644 --- a/evennia/comms/comms.py +++ b/evennia/comms/comms.py @@ -428,8 +428,10 @@ class DefaultChannel(ChannelDB, metaclass=TypeclassBase): msgobj = self.pre_send_message(msgobj) if not msgobj: return False + if sender_strings: + sender_strings = list(set(make_iter(sender_strings))) msgobj = self.message_transform( - msgobj, emit=emit, sender_strings=list(set(sender_strings)), external=external + msgobj, emit=emit, sender_strings=sender_strings, external=external ) self.distribute_message(msgobj, online=online) self.post_send_message(msgobj) diff --git a/evennia/typeclasses/attributes.py b/evennia/typeclasses/attributes.py index 6fb4870dae..bc6b61dccf 100644 --- a/evennia/typeclasses/attributes.py +++ b/evennia/typeclasses/attributes.py @@ -593,8 +593,9 @@ class AttributeHandler(object): repeat-calling add when having many Attributes to add. Args: - indata (list): List of tuples of varying length representing the - Attribute to add to this object. Supported tuples are + *args (tuple): Each argument should be a tuples (can be of varying + length) representing the Attribute to add to this object. + Supported tuples are - `(key, value)` - `(key, value, category)` - `(key, value, category, lockstring)` diff --git a/evennia/typeclasses/tags.py b/evennia/typeclasses/tags.py index 23b3f0562f..c8f121d17d 100644 --- a/evennia/typeclasses/tags.py +++ b/evennia/typeclasses/tags.py @@ -449,8 +449,8 @@ class TagHandler(object): Batch-add tags from a list of tuples. Args: - tuples (tuple or str): Any number of `tagstr` keys, `(keystr, category)` or - `(keystr, category, data)` tuples. + *args (tuple or str): Each argument should be a `tagstr` keys or tuple `(keystr, category)` or + `(keystr, category, data)`. It's possible to mix input types. Notes: This will generate a mimimal number of self.add calls, diff --git a/evennia/typeclasses/tests.py b/evennia/typeclasses/tests.py index a49f1d2645..270a4f4525 100644 --- a/evennia/typeclasses/tests.py +++ b/evennia/typeclasses/tests.py @@ -42,6 +42,17 @@ class TestAttributes(EvenniaTest): self.obj1.attributes.add(key, value) self.assertEqual(self.obj1.attributes.get(key), value) + def test_batch_add(self): + attrs = [("key1", "value1"), + ("key2", "value2", "category2"), + ("key3", "value3"), + ("key4", "value4", "category4", "attrread:id(1)", False)] + new_attrs = self.obj1.attributes.batch_add(*attrs) + attrobj = self.obj1.attributes.get(key="key4", category="category4", return_obj=True) + self.assertEqual(attrobj.value, "value4") + self.assertEqual(attrobj.category, "category4") + self.assertEqual(attrobj.locks.all(), ["attrread:id(1)"]) + class TestTypedObjectManager(EvenniaTest): def _manager(self, methodname, *args, **kwargs): @@ -146,3 +157,16 @@ class TestTypedObjectManager(EvenniaTest): ), [], ) + + def test_batch_add(self): + tags = ["tag1", + ("tag2", "category2"), + "tag3", + ("tag4", "category4", "data4") + ] + self.obj1.tags.batch_add(*tags) + self.assertEqual(self.obj1.tags.get("tag1"), "tag1") + tagobj = self.obj1.tags.get("tag4", category="category4", return_tagobj=True) + self.assertEqual(tagobj.db_key, "tag4") + self.assertEqual(tagobj.db_category, "category4") + self.assertEqual(tagobj.db_data, "data4")