Browse Source

Partially type-hint state.py

This is just work to get started. A more complete type hint will come
later.
pull/7373/head
Rapptz 4 years ago
parent
commit
0df3f51a0b
  1. 44
      discord/state.py

44
discord/state.py

@ -22,13 +22,15 @@ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
DEALINGS IN THE SOFTWARE. DEALINGS IN THE SOFTWARE.
""" """
from __future__ import annotations
import asyncio import asyncio
from collections import deque, OrderedDict from collections import deque, OrderedDict
import copy import copy
import datetime import datetime
import itertools import itertools
import logging import logging
from typing import Dict, Optional from typing import Dict, Optional, TYPE_CHECKING, Union
import weakref import weakref
import warnings import warnings
import inspect import inspect
@ -59,6 +61,10 @@ from .stage_instance import StageInstance
from .threads import Thread, ThreadMember from .threads import Thread, ThreadMember
from .sticker import GuildSticker from .sticker import GuildSticker
if TYPE_CHECKING:
from .http import HTTPClient
from .types.activity import Activity as ActivityPayload
class ChunkRequest: class ChunkRequest:
def __init__(self, guild_id, loop, resolver, *, cache=True): def __init__(self, guild_id, loop, resolver, *, cache=True):
self.guild_id = guild_id self.guild_id = guild_id
@ -108,21 +114,21 @@ async def logging_coroutine(coroutine, *, info):
log.exception('Exception occurred during %s', info) log.exception('Exception occurred during %s', info)
class ConnectionState: class ConnectionState:
def __init__(self, *, dispatch, handlers, hooks, http, loop, **options): def __init__(self, *, dispatch, handlers, hooks, http: HTTPClient, loop: asyncio.AbstractEventLoop, **options):
self.loop = loop self.loop: asyncio.AbstractEventLoop = loop
self.http = http self.http: HTTPClient = http
self.max_messages = options.get('max_messages', 1000) self.max_messages: Optional[int] = options.get('max_messages', 1000)
if self.max_messages is not None and self.max_messages <= 0: if self.max_messages is not None and self.max_messages <= 0:
self.max_messages = 1000 self.max_messages = 1000
self.dispatch = dispatch self.dispatch = dispatch
self.handlers = handlers self.handlers = handlers
self.hooks = hooks self.hooks = hooks
self.shard_count = None self.shard_count: Optional[int] = None
self._ready_task = None self._ready_task: Optional[asyncio.Task] = None
self.application_id = utils._get_as_snowflake(options, 'application_id') self.application_id: Optional[int] = utils._get_as_snowflake(options, 'application_id')
self.heartbeat_timeout = options.get('heartbeat_timeout', 60.0) self.heartbeat_timeout: float = options.get('heartbeat_timeout', 60.0)
self.guild_ready_timeout = options.get('guild_ready_timeout', 2.0) self.guild_ready_timeout: float = options.get('guild_ready_timeout', 2.0)
if self.guild_ready_timeout < 0: if self.guild_ready_timeout < 0:
raise ValueError('guild_ready_timeout cannot be negative') raise ValueError('guild_ready_timeout cannot be negative')
@ -131,8 +137,8 @@ class ConnectionState:
if allowed_mentions is not None and not isinstance(allowed_mentions, AllowedMentions): if allowed_mentions is not None and not isinstance(allowed_mentions, AllowedMentions):
raise TypeError('allowed_mentions parameter must be AllowedMentions') raise TypeError('allowed_mentions parameter must be AllowedMentions')
self.allowed_mentions = allowed_mentions self.allowed_mentions: Optional[AllowedMentions] = allowed_mentions
self._chunk_requests = {} # Dict[Union[int, str], ChunkRequest] self._chunk_requests: Dict[Union[int, str], ChunkRequest] = {}
activity = options.get('activity', None) activity = options.get('activity', None)
if activity: if activity:
@ -158,7 +164,7 @@ class ConnectionState:
if not intents.guilds: if not intents.guilds:
log.warning('Guilds intent seems to be disabled. This may cause state related issues.') log.warning('Guilds intent seems to be disabled. This may cause state related issues.')
self._chunk_guilds = options.get('chunk_guilds_at_startup', intents.members) self._chunk_guilds: bool = options.get('chunk_guilds_at_startup', intents.members)
# Ensure these two are set properly # Ensure these two are set properly
if not intents.members and self._chunk_guilds: if not intents.members and self._chunk_guilds:
@ -173,14 +179,14 @@ class ConnectionState:
cache_flags._verify_intents(intents) cache_flags._verify_intents(intents)
self.member_cache_flags = cache_flags self.member_cache_flags: MemberCacheFlags = cache_flags
self._activity = activity self._activity: Optional[ActivityPayload] = activity
self._status = status self._status: Optional[str] = status
self._intents = intents self._intents: Intents = intents
if not intents.members or cache_flags._empty: if not intents.members or cache_flags._empty:
self.store_user = self.create_user self.store_user = self.create_user # type: ignore
self.deref_user = self.deref_user_no_intents self.deref_user = self.deref_user_no_intents # type: ignore
self.parsers = parsers = {} self.parsers = parsers = {}
for attr, func in inspect.getmembers(self): for attr, func in inspect.getmembers(self):

Loading…
Cancel
Save