Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion mongoengine/base/datastructures.py
Original file line number Diff line number Diff line change
Expand Up @@ -438,7 +438,7 @@ class SpecificStrictDict(cls):
__slots__ = allowed_keys_tuple

def __repr__(self):
return "{%s}" % ', '.join('"{0!s}": {0!r}'.format(k) for k in self.iterkeys())
return "{%s}" % ', '.join('"{0!s}": {1!r}'.format(k, v) for k, v in self.items())

cls._classes[allowed_keys] = SpecificStrictDict
return cls._classes[allowed_keys]
Expand Down
23 changes: 16 additions & 7 deletions tests/test_datastructures.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import unittest
from mongoengine.base.datastructures import StrictDict, SemiStrictDict

from mongoengine.base.datastructures import StrictDict, SemiStrictDict


class TestStrictDict(unittest.TestCase):
Expand All @@ -13,9 +14,17 @@ def test_init(self):
d = self.dtype(a=1, b=1, c=1)
self.assertEqual((d.a, d.b, d.c), (1, 1, 1))

def test_repr(self):
d = self.dtype(a=1, b=2, c=3)
self.assertEqual(repr(d), '{"a": 1, "b": 2, "c": 3}')

# make sure quotes are escaped properly
d = self.dtype(a='"', b="'", c="")
self.assertEqual(repr(d), '{"a": \'"\', "b": "\'", "c": \'\'}')

def test_init_fails_on_nonexisting_attrs(self):
self.assertRaises(AttributeError, lambda: self.dtype(a=1, b=2, d=3))

def test_eq(self):
d = self.dtype(a=1, b=1, c=1)
dd = self.dtype(a=1, b=1, c=1)
Expand All @@ -24,7 +33,7 @@ def test_eq(self):
g = self.strict_dict_class(("a", "b", "c", "d"))(a=1, b=1, c=1, d=1)
h = self.strict_dict_class(("a", "c", "b"))(a=1, b=1, c=1)
i = self.strict_dict_class(("a", "c", "b"))(a=1, b=1, c=2)

self.assertEqual(d, dd)
self.assertNotEqual(d, e)
self.assertNotEqual(d, f)
Expand All @@ -38,19 +47,19 @@ def test_setattr_getattr(self):
d.a = 1
self.assertEqual(d.a, 1)
self.assertRaises(AttributeError, lambda: d.b)

def test_setattr_raises_on_nonexisting_attr(self):
d = self.dtype()

def _f():
d.x = 1
self.assertRaises(AttributeError, _f)

def test_setattr_getattr_special(self):
d = self.strict_dict_class(["items"])
d.items = 1
self.assertEqual(d.items, 1)

def test_get(self):
d = self.dtype(a=1)
self.assertEqual(d.get('a'), 1)
Expand Down Expand Up @@ -88,7 +97,7 @@ def test_setattr_getattr_nonexisting_attr_succeeds(self):
def test_init_succeeds_with_nonexisting_attrs(self):
d = self.dtype(a=1, b=1, c=1, x=2)
self.assertEqual((d.a, d.b, d.c, d.x), (1, 1, 1, 2))

def test_iter_with_nonexisting_attrs(self):
d = self.dtype(a=1, b=1, c=1, x=2)
self.assertEqual(list(d), ['a', 'b', 'c', 'x'])
Expand Down