Browse Source

perf: use sentinel value for Presence._offline()

pull/10109/head
dolfies 5 months ago
parent
commit
e9452cf5ca
  1. 14
      discord/state.py

14
discord/state.py

@ -30,6 +30,7 @@ import copy
import datetime import datetime
import logging import logging
from typing import ( from typing import (
ClassVar,
Dict, Dict,
Final, Final,
Optional, Optional,
@ -894,6 +895,8 @@ class ClientStatus:
class Presence: class Presence:
__slots__ = ('client_status', 'activities') __slots__ = ('client_status', 'activities')
_OFFLINE: ClassVar[Self] = MISSING
def __init__(self, data: gw.BasePresenceUpdate, state: ConnectionState, /) -> None: def __init__(self, data: gw.BasePresenceUpdate, state: ConnectionState, /) -> None:
self.client_status: ClientStatus = ClientStatus(data['status'], data.get('client_status')) self.client_status: ClientStatus = ClientStatus(data['status'], data.get('client_status'))
self.activities: Tuple[ActivityTypes, ...] = tuple(create_activity(d, state) for d in data['activities']) self.activities: Tuple[ActivityTypes, ...] = tuple(create_activity(d, state) for d in data['activities'])
@ -922,10 +925,13 @@ class Presence:
@classmethod @classmethod
def _offline(cls) -> Self: def _offline(cls) -> Self:
self = cls.__new__(cls) # bypass __init__ if cls._OFFLINE is MISSING:
self.client_status = ClientStatus() self = cls.__new__(cls) # bypass __init__
self.activities = () self.client_status = ClientStatus()
return self self.activities = ()
cls._OFFLINE = self
return cls._OFFLINE
@classmethod @classmethod
def _copy(cls, presence: Self, /) -> Self: def _copy(cls, presence: Self, /) -> Self:

Loading…
Cancel
Save