From 09b4c006dff9ca3ce876714bc045e6ac17f606ed Mon Sep 17 00:00:00 2001 From: mvergerdelbove Date: Fri, 24 Apr 2015 14:33:56 -0700 Subject: [PATCH 1/3] EdgeIterator.total() should raise if _total_count is None --- facebookads/objects.py | 2 ++ facebookads/test/unit.py | 15 +++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/facebookads/objects.py b/facebookads/objects.py index 9e9abd5a..4344b4ad 100644 --- a/facebookads/objects.py +++ b/facebookads/objects.py @@ -117,6 +117,8 @@ def __getitem__(self, index): return self._queue[index] def total(self): + if self._total_count is None: + raise FacebookError("Couldn't retrieve the object total count for that type of request.") return self._total_count def load_next_page(self): diff --git a/facebookads/test/unit.py b/facebookads/test/unit.py index bc94f33a..f3efa1a9 100644 --- a/facebookads/test/unit.py +++ b/facebookads/test/unit.py @@ -112,6 +112,21 @@ def test_builds_from_object(self): obj = ei.build_objects_from_response(response) assert len(obj) == 1 and obj[0]['id'] == "601957/targetingsentencelines" + def test_total_is_none(self): + ei = objects.EdgeIterator( + objects.AdAccount(fbid='123'), + objects.AdGroup, + ) + self.assertRaises(exceptions.FacebookError, ei.total) + + def test_total_is_defined(self): + ei = objects.EdgeIterator( + objects.AdAccount(fbid='123'), + objects.AdGroup, + ) + ei._total_count = 32 + self.assertEqual(ei.total(), 32) + class AbstractCrudObjectTestCase(unittest.TestCase): def test_all_aco_has_id_field(self): From 3e72d96e931c77a07b400c98a73e2ffb0dae6be5 Mon Sep 17 00:00:00 2001 From: mvergerdelbove Date: Fri, 24 Apr 2015 14:42:33 -0700 Subject: [PATCH 2/3] raise FacebookUnavailablePropertyException which is more specific --- facebookads/exceptions.py | 5 +++++ facebookads/objects.py | 4 ++-- facebookads/test/unit.py | 2 +- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/facebookads/exceptions.py b/facebookads/exceptions.py index 5e34bf35..df51da43 100644 --- a/facebookads/exceptions.py +++ b/facebookads/exceptions.py @@ -126,3 +126,8 @@ def api_blame_field_specs(self): class FacebookBadObjectError(FacebookError): """Raised when a guarantee about the object validity fails.""" pass + + +class FacebookUnavailablePropertyException(FacebookError): + """Raised when an object's property or method is not available.""" + pass diff --git a/facebookads/objects.py b/facebookads/objects.py index 4344b4ad..816392ba 100644 --- a/facebookads/objects.py +++ b/facebookads/objects.py @@ -23,7 +23,7 @@ Ads API. """ -from facebookads.exceptions import FacebookBadObjectError, FacebookError +from facebookads.exceptions import FacebookBadObjectError, FacebookError, FacebookUnavailablePropertyException from facebookads.api import FacebookAdsApi from facebookads.session import FacebookSession from facebookads.mixins import ( @@ -118,7 +118,7 @@ def __getitem__(self, index): def total(self): if self._total_count is None: - raise FacebookError("Couldn't retrieve the object total count for that type of request.") + raise FacebookUnavailablePropertyException("Couldn't retrieve the object total count for that type of request.") return self._total_count def load_next_page(self): diff --git a/facebookads/test/unit.py b/facebookads/test/unit.py index f3efa1a9..d1a4ad96 100644 --- a/facebookads/test/unit.py +++ b/facebookads/test/unit.py @@ -117,7 +117,7 @@ def test_total_is_none(self): objects.AdAccount(fbid='123'), objects.AdGroup, ) - self.assertRaises(exceptions.FacebookError, ei.total) + self.assertRaises(exceptions.FacebookUnavailablePropertyException, ei.total) def test_total_is_defined(self): ei = objects.EdgeIterator( From 9a68eec1bcde35a15c71e8aa9794b31aa2b5e8c9 Mon Sep 17 00:00:00 2001 From: mvergerdelbove Date: Fri, 24 Apr 2015 16:19:14 -0700 Subject: [PATCH 3/3] ensure lines < 80 --- facebookads/objects.py | 10 ++++++++-- facebookads/test/unit.py | 5 ++++- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/facebookads/objects.py b/facebookads/objects.py index 816392ba..fb57a8da 100644 --- a/facebookads/objects.py +++ b/facebookads/objects.py @@ -23,7 +23,10 @@ Ads API. """ -from facebookads.exceptions import FacebookBadObjectError, FacebookError, FacebookUnavailablePropertyException +from facebookads.exceptions import ( + FacebookBadObjectError, FacebookError, + FacebookUnavailablePropertyException +) from facebookads.api import FacebookAdsApi from facebookads.session import FacebookSession from facebookads.mixins import ( @@ -118,7 +121,10 @@ def __getitem__(self, index): def total(self): if self._total_count is None: - raise FacebookUnavailablePropertyException("Couldn't retrieve the object total count for that type of request.") + raise FacebookUnavailablePropertyException( + "Couldn't retrieve theobject total " + "count for that type of request." + ) return self._total_count def load_next_page(self): diff --git a/facebookads/test/unit.py b/facebookads/test/unit.py index d1a4ad96..7d80a8e5 100644 --- a/facebookads/test/unit.py +++ b/facebookads/test/unit.py @@ -117,7 +117,10 @@ def test_total_is_none(self): objects.AdAccount(fbid='123'), objects.AdGroup, ) - self.assertRaises(exceptions.FacebookUnavailablePropertyException, ei.total) + self.assertRaises( + exceptions.FacebookUnavailablePropertyException, + ei.total + ) def test_total_is_defined(self): ei = objects.EdgeIterator(