From cfd7d7607cc43a00d58db7ee125f590573a19049 Mon Sep 17 00:00:00 2001 From: Bryce Boe Date: Tue, 13 Dec 2011 12:41:17 -0800 Subject: [PATCH] Fix infinite getattr recursion bug by properly setting _populated in getattr. --- .pylintrc | 2 +- reddit/objects.py | 5 +++-- reddit/reddit_test.py | 7 +++++++ 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/.pylintrc b/.pylintrc index 1fa3a877c..b1c899a2f 100644 --- a/.pylintrc +++ b/.pylintrc @@ -213,7 +213,7 @@ max-statements=50 max-parents=9 # Maximum number of attributes for a class (see R0902). -max-attributes=8 +max-attributes=10 # Minimum number of public methods for a class (see R0903). min-public-methods=2 diff --git a/reddit/objects.py b/reddit/objects.py index 2ea6f380c..e63708393 100644 --- a/reddit/objects.py +++ b/reddit/objects.py @@ -51,9 +51,10 @@ def _populate(self, json_dict, fetch): def __getattr__(self, attr): if not self._populated: - self._populate(None, True) + self._populated = self._populate(None, True) return getattr(self, attr) - raise AttributeError + raise AttributeError('\'%s\' has no attribute \'%s\'' % (type(self), + attr)) def __setattr__(self, name, value): if value and name == 'subreddit': diff --git a/reddit/reddit_test.py b/reddit/reddit_test.py index 20ecee958..eab82d477 100755 --- a/reddit/reddit_test.py +++ b/reddit/reddit_test.py @@ -315,6 +315,10 @@ def test_make_moderator(self): self.subreddit.make_moderator(self.other, r=str(self.subreddit)) self.assertTrue(self.other in self.subreddit.get_moderators()) + def test_make_moderator_by_name(self): + self.subreddit.make_moderator(str(self.other), r=str(self.subreddit)) + self.assertTrue(self.other in self.subreddit.get_moderators()) + def test_remove_contributor(self): self.subreddit.remove_contributor(self.other) self.assertFalse(self.other in self.subreddit.get_contributors()) @@ -479,6 +483,9 @@ def setUp(self): self.configure() self.subreddit = self.r.get_subreddit(self.sr) + def test_attribute_error(self): + self.assertRaises(AttributeError, getattr, self.subreddit, 'foo') + def test_get_my_moderation(self): for subreddit in self.r.user.my_moderation(): if subreddit.display_name == self.sr: