From f2039300c266788a8693c44b296bfc04572d052b Mon Sep 17 00:00:00 2001 From: Toby Harradine Date: Sat, 6 Jul 2019 08:02:18 +1000 Subject: [PATCH] [Mongo] Use escaped identifiers to extract inner value (#2832) This was causing a KeyError to be raised whenever a key containing $ or . was part of the identifiers path, even if the value was actually in the dict. Signed-off-by: Toby Harradine --- redbot/core/drivers/red_mongo.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/redbot/core/drivers/red_mongo.py b/redbot/core/drivers/red_mongo.py index aabd36adf..d500f32db 100644 --- a/redbot/core/drivers/red_mongo.py +++ b/redbot/core/drivers/red_mongo.py @@ -119,9 +119,9 @@ class Mongo(BaseDriver): mongo_collection = self.get_collection(identifier_data.category) pkey_filter = self.generate_primary_key_filter(identifier_data) + escaped_identifiers = list(map(self._escape_key, identifier_data.identifiers)) if len(identifier_data.identifiers) > 0: - dot_identifiers = ".".join(map(self._escape_key, identifier_data.identifiers)) - proj = {"_id": False, dot_identifiers: True} + proj = {"_id": False, ".".join(escaped_identifiers): True} partial = await mongo_collection.find_one(filter=pkey_filter, projection=proj) else: @@ -132,7 +132,7 @@ class Mongo(BaseDriver): if partial is None: raise KeyError("No matching document was found and Config expects a KeyError.") - for i in identifier_data.identifiers: + for i in escaped_identifiers: partial = partial[i] if isinstance(partial, dict): return self._unescape_dict_keys(partial)