diff --git a/MultiServer.py b/MultiServer.py index f9ed34e2..f465b739 100644 --- a/MultiServer.py +++ b/MultiServer.py @@ -66,9 +66,13 @@ def pop_from_container(container, value): return container -def update_dict(dictionary, entries): - dictionary.update(entries) - return dictionary +def update_container_unique(container, entries): + if isinstance(container, list): + existing_container_as_set = set(container) + container.extend([entry for entry in entries if entry not in existing_container_as_set]) + else: + container.update(entries) + return container def queue_gc(): @@ -109,7 +113,7 @@ modify_functions = { # lists/dicts: "remove": remove_from_list, "pop": pop_from_container, - "update": update_dict, + "update": update_container_unique, } diff --git a/docs/network protocol.md b/docs/network protocol.md index 70c66543..6688c101 100644 --- a/docs/network protocol.md +++ b/docs/network protocol.md @@ -470,7 +470,7 @@ The following operations can be applied to a datastorage key | right_shift | Applies a bitwise right-shift to the current value of the key by `value`. | | remove | List only: removes the first instance of `value` found in the list. | | pop | List or Dict: for lists it will remove the index of the `value` given. for dicts it removes the element with the specified key of `value`. | -| update | Dict only: Updates the dictionary with the specified elements given in `value` creating new keys, or updating old ones if they previously existed. | +| update | List or Dict: Adds the elements of `value` to the container if they weren't already present. In the case of a Dict, already present keys will have their corresponding values updated. | ### SetNotify Used to register your current session for receiving all [SetReply](#SetReply) packages of certain keys to allow your client to keep track of changes.