From 877b5302bc2a223fbaa30891c3ef56eb2800a47b Mon Sep 17 00:00:00 2001 From: Travis Date: Thu, 8 Sep 2011 11:38:09 -0500 Subject: [PATCH] allow easy override of Relation for a class --- pyperry/base.py | 3 ++- tests/base_test.py | 12 ++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/pyperry/base.py b/pyperry/base.py index 33723f9..d95821c 100644 --- a/pyperry/base.py +++ b/pyperry/base.py @@ -386,6 +386,7 @@ class Article(pyperry.base.Base): """ __metaclass__ = BaseMeta + _relation_class = Relation def __init__(self, fields=None, new_record=True, **kwargs): """ @@ -806,7 +807,7 @@ def relation(cls): """ if not hasattr(cls, '_relation') or cls._relation.klass != cls: - cls._relation = Relation(cls) + cls._relation = cls._relation_class(cls) return cls._relation @classmethod diff --git a/tests/base_test.py b/tests/base_test.py index 328515f..f1c2775 100644 --- a/tests/base_test.py +++ b/tests/base_test.py @@ -879,6 +879,18 @@ def test_fresh(self): test.reload() self.assertEqual(test.last_relation.query()['fresh'], True) +class RelationOverrideTestCase(BaseTestCase): + + def test_uses_config_option(self): + class MyRelation(pyperry.relation.Relation): pass + class Test(pyperry.Base): + _relation_class = MyRelation + + self.assertEqual(Test.relation().__class__, MyRelation) + self.assertEqual( + pyperry.base.Base.relation().__class__, + pyperry.relation.Relation) + ## # Freezing objects