Skip to content

Commit

Permalink
new eager loading validation
Browse files Browse the repository at this point in the history
  • Loading branch information
joamag committed Mar 30, 2016
1 parent a2b1750 commit 1694489
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 2 deletions.
3 changes: 2 additions & 1 deletion src/quorum/test/mock.py
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,8 @@ class Person(quorum.Model):
type = quorum.reference(
"Person",
name = "identifier"
)
),
eager = True
)

cats = quorum.field(
Expand Down
12 changes: 12 additions & 0 deletions src/quorum/test/model.py
Original file line number Diff line number Diff line change
Expand Up @@ -245,6 +245,8 @@ def test_references(self):

person = mock.Person.get(identifier = 1)

self.assertEqual(person.cats.is_resolved(), False)
self.assertEqual(person.father, None)
self.assertEqual(person.cats[0].name, "NameCat")

person = mock.Person.get(identifier = 1, map = True)
Expand All @@ -254,6 +256,10 @@ def test_references(self):
self.assertEqual(isinstance(person["cats"][0], int), True)
self.assertEqual(len(person["cats"]), 1)

person = mock.Person.get(identifier = 1, eager = ("cats",))

self.assertEqual(person.cats.is_resolved(), True)

person = mock.Person.get(
identifier = 1,
map = True,
Expand All @@ -279,6 +285,11 @@ def test_references(self):
self.assertEqual(isinstance(person["cats"], list), True)
self.assertEqual(len(person["cats"]), 0)

@quorum.secured
def test_eager(self):
person = mock.Person()
person.name = "Name"

father = mock.Person()
father.name = "father"
father.save()
Expand All @@ -291,6 +302,7 @@ def test_references(self):

self.assertEqual(isinstance(person.father, quorum.Reference), True)
self.assertEqual(person.father.name, "father")
self.assertEqual(person.father.is_resolved(), True)

person = mock.Person.get(identifier = 1)

Expand Down
11 changes: 10 additions & 1 deletion src/quorum/typesf.py
Original file line number Diff line number Diff line change
Expand Up @@ -498,7 +498,8 @@ def resolve(self, strict = False):
# data source based get attribute to retrieve the object
# that represents the reference
kwargs = {
name : self._target.cast(name, self.id)
name : self._target.cast(name, self.id),
"eager_l" : False
}
_object = self._target.get(raise_e = strict, **kwargs)

Expand All @@ -508,6 +509,10 @@ def resolve(self, strict = False):
self.__dict__["_object"] = _object
return _object

def is_resolved(self):
exists = "_object" in self.__dict__
return True if exists and self._object else False

return _Reference

class References(Type):
Expand Down Expand Up @@ -622,4 +627,8 @@ def contains(self, id):
if is_object: id = getattr(id, self._name)
return id in self.objects_m

def is_resolved(self):
if not self.objects: return True
return self.objects[0].is_resolved()

return _References

0 comments on commit 1694489

Please sign in to comment.