"""Facebook Chat (Messenger) for Python

:copyright: (c) 2015 - 2019 by Taehoon Kim
:license: BSD 3-Clause, see LICENSE for more details.
"""

import logging as _logging

# Set default logging handler to avoid "No handler found" warnings.
_logging.getLogger(__name__).addHandler(_logging.NullHandler())

# The order of these is somewhat significant, e.g. User has to be imported after Thread!
from . import _core, _util
from ._core import Image
from ._exception import (
    FacebookError,
    HTTPError,
    ParseError,
    ExternalError,
    GraphQLError,
    InvalidParameters,
    NotLoggedIn,
    PleaseRefresh,
)
from ._session import Session
from ._thread import ThreadLocation, ThreadABC, Thread
from ._user import User, UserData, ActiveStatus
from ._group import Group, GroupData
from ._page import Page, PageData
from ._message import EmojiSize, Mention, Message
from ._attachment import Attachment, UnsentMessage, ShareAttachment
from ._sticker import Sticker
from ._location import LocationAttachment, LiveLocationAttachment
from ._file import FileAttachment, AudioAttachment, ImageAttachment, VideoAttachment
from ._quick_reply import (
    QuickReply,
    QuickReplyText,
    QuickReplyLocation,
    QuickReplyPhoneNumber,
    QuickReplyEmail,
)
from ._poll import Poll, PollOption
from ._plan import GuestStatus, Plan, PlanData

from ._client import Client

__title__ = "fbchat"
__version__ = "1.8.1"
__description__ = "Facebook Chat (Messenger) for Python"

__copyright__ = "Copyright 2015 - 2019 by Taehoon Kim"
__license__ = "BSD 3-Clause"

__author__ = "Taehoon Kim; Moreels Pieter-Jan; Mads Marquart"
__email__ = "carpedm20@gmail.com"

__all__ = ("Session", "Client")

@@ -1681,8 +1681,1257 @@
 lient%22)%0A
+%0A# Everything below is taken from the excellent trio project:%0A%0A%0Adef fixup_module_metadata(namespace):%0A    def fix_one(qualname, name, obj):%0A        mod = getattr(obj, %22__module__%22, None)%0A        if mod is not None and mod.startswith(%22fbchat.%22):%0A            obj.__module__ = %22fbchat%22%0A            # Modules, unlike everything else in Python, put fully-qualitied%0A            # names into their __name__ attribute. We check for %22.%22 to avoid%0A            # rewriting these.%0A            if hasattr(obj, %22__name__%22) and %22.%22 not in obj.__name__:%0A                obj.__name__ = name%0A                obj.__qualname__ = qualname%0A            if isinstance(obj, type):%0A                # Fix methods%0A                for attr_name, attr_value in obj.__dict__.items():%0A                    fix_one(objname + %22.%22 + attr_name, attr_name, attr_value)%0A%0A    for objname, obj in namespace.items():%0A        if not objname.startswith(%22_%22):  # ignore private attributes%0A            fix_one(objname, objname, obj)%0A%0A%0A# Having the public path in .__module__ attributes is important for:%0A# - exception names in printed tracebacks%0A# - sphinx :show-inheritance:%0A# - deprecation warnings%0A# - pickle%0A# - probably other stuff%0Afixup_module_metadata(globals())%0Adel fixup_module_metadata%0A

Fix module names to hide implementation details