diff --git a/substack/api.py b/substack/api.py index 378eb67..b92fe82 100644 --- a/substack/api.py +++ b/substack/api.py @@ -346,7 +346,10 @@ def get_publication_subscriber_count(self): f"{self.publication_url}/publication_launch_checklist" ) - return Api._handle_response(response=response)["subscriberCount"] + data = Api._handle_response(response=response) + if "subscriberCount" in data: + return data["subscriberCount"] + return len(data["subscribers"]) def get_published_posts( self, offset=0, limit=25, order_by="post_date", order_direction="desc" diff --git a/tests/substack/test_api.py b/tests/substack/test_api.py index 64c5175..d255a60 100644 --- a/tests/substack/test_api.py +++ b/tests/substack/test_api.py @@ -40,6 +40,26 @@ def test_api_exception(self): with patch("requests.Session.post", return_value=response): Api(email="", password="") + def test_get_publication_subscriber_count_from_legacy_response(self): + api = Api.__new__(Api) + api.publication_url = "https://writer.substack.com/api/v1" + api._session = Mock() + response = Mock(status_code=200) + response.json.return_value = {"subscriberCount": 123} + api._session.get.return_value = response + + self.assertEqual(api.get_publication_subscriber_count(), 123) + + def test_get_publication_subscriber_count_from_subscribers(self): + api = Api.__new__(Api) + api.publication_url = "https://writer.substack.com/api/v1" + api._session = Mock() + response = Mock(status_code=200) + response.json.return_value = {"subscribers": [{"id": 1}, {"id": 2}]} + api._session.get.return_value = response + + self.assertEqual(api.get_publication_subscriber_count(), 2) + @_e2e def test_get_posts(self): api = _api_from_env()