diff --git a/fbchat/__init__.py b/fbchat/__init__.py index 7ce2133..b1b3679 100644 --- a/fbchat/__init__.py +++ b/fbchat/__init__.py @@ -17,7 +17,7 @@ from ._session import Session from ._thread import ThreadLocation, ThreadColor, ThreadABC, Thread from ._user import TypingStatus, User, UserData, ActiveStatus from ._group import Group -from ._page import Page +from ._page import Page, PageData from ._message import EmojiSize, MessageReaction, Mention, Message from ._attachment import Attachment, UnsentMessage, ShareAttachment from ._sticker import Sticker diff --git a/fbchat/_client.py b/fbchat/_client.py index 06aa971..c37f785 100644 --- a/fbchat/_client.py +++ b/fbchat/_client.py @@ -10,7 +10,7 @@ from ._exception import FBchatException, FBchatFacebookError from ._thread import ThreadLocation, ThreadColor from ._user import TypingStatus, User, UserData, ActiveStatus from ._group import Group -from ._page import Page +from ._page import Page, PageData from ._message import EmojiSize, MessageReaction, Mention, Message from ._attachment import Attachment from ._sticker import Sticker @@ -244,7 +244,8 @@ class Client: (j,) = self.graphql_requests(_graphql.from_query(_graphql.SEARCH_PAGE, params)) return [ - Page._from_graphql(self.session, node) for node in j[name]["pages"]["nodes"] + PageData._from_graphql(self.session, node) + for node in j[name]["pages"]["nodes"] ] def search_for_groups(self, name, limit=10): @@ -294,7 +295,7 @@ class Client: # MessageThread => Group thread rtn.append(Group._from_graphql(self.session, node)) elif node["__typename"] == "Page": - rtn.append(Page._from_graphql(self.session, node)) + rtn.append(PageData._from_graphql(self.session, node)) elif node["__typename"] == "Group": # We don't handle Facebook "Groups" pass @@ -503,7 +504,7 @@ class Client: if "first_name" in entry["type"]: rtn[_id] = UserData._from_graphql(self.session, entry) else: - rtn[_id] = Page._from_graphql(self.session, entry) + rtn[_id] = PageData._from_graphql(self.session, entry) else: raise FBchatException( "{} had an unknown thread type: {}".format(thread_ids[i], entry) diff --git a/fbchat/_page.py b/fbchat/_page.py index 32d97a1..e440a60 100644 --- a/fbchat/_page.py +++ b/fbchat/_page.py @@ -11,6 +11,18 @@ class Page(_thread.ThreadABC): session = attr.ib(type=_session.Session) #: The unique identifier of the page. id = attr.ib(converter=str) + + def _to_send_data(self): + return {"other_user_fbid": self.id} + + +@attrs_default +class PageData(Page): + """Represents data about a Facebook page. + + Inherits `Page`, and implements `ThreadABC`. + """ + #: The page's picture photo = attr.ib(None) #: The name of the page @@ -32,9 +44,6 @@ class Page(_thread.ThreadABC): #: The page's category category = attr.ib(None) - def _to_send_data(self): - return {"other_user_fbid": self.id} - @classmethod def _from_graphql(cls, session, data): if data.get("profile_picture") is None: diff --git a/tests/test_page.py b/tests/test_page.py index 2bcacdf..4cba5b8 100644 --- a/tests/test_page.py +++ b/tests/test_page.py @@ -1,5 +1,5 @@ import fbchat -from fbchat._page import Page +from fbchat._page import PageData def test_page_from_graphql(session): @@ -11,7 +11,7 @@ def test_page_from_graphql(session): "category_type": "SCHOOL", "city": None, } - assert Page( + assert PageData( session=session, id="123456", photo=fbchat.Image(url="https://scontent-arn2-1.xx.fbcdn.net/v/..."), @@ -19,4 +19,4 @@ def test_page_from_graphql(session): url="https://www.facebook.com/some-school/", city=None, category="SCHOOL", - ) == Page._from_graphql(session, data) + ) == PageData._from_graphql(session, data)