PYTHON-3028 $regex as a field name does not allow for non-string values (#807)
(cherry picked from commit 70f7fe7542)
This commit is contained in:
parent
6a39f65e66
commit
336f69dbb3
@ -505,7 +505,7 @@ def object_hook(dct, json_options=DEFAULT_JSON_OPTIONS):
|
||||
def _parse_legacy_regex(doc):
|
||||
pattern = doc["$regex"]
|
||||
# Check if this is the $regex query operator.
|
||||
if isinstance(pattern, Regex):
|
||||
if not isinstance(pattern, (text_type, bytes)):
|
||||
return doc
|
||||
flags = 0
|
||||
# PyMongo always adds $options but some other tools may not.
|
||||
|
||||
@ -262,6 +262,15 @@ class TestJsonUtil(unittest.TestCase):
|
||||
'{"$regex": ".*", "$options": "mx"}',
|
||||
json_util.dumps(re.compile(b'.*', re.M | re.X)))
|
||||
|
||||
def test_regex_validation(self):
|
||||
non_str_types = [10, {}, []]
|
||||
docs = [{"$regex": i} for i in non_str_types]
|
||||
for doc in docs:
|
||||
self.assertEqual(doc, json_util.loads(json.dumps(doc)))
|
||||
|
||||
doc = {"$regex": ""}
|
||||
self.assertIsInstance(json_util.loads(json.dumps(doc)), Regex)
|
||||
|
||||
def test_minkey(self):
|
||||
self.round_trip({"m": MinKey()})
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user