Fix some typing errors and reformat enums.py

This commit is contained in:
Rapptz 2021-07-04 05:29:34 -04:00
parent 828e47d83f
commit 5d798aa5e6

View File

@ -24,7 +24,7 @@ DEALINGS IN THE SOFTWARE.
import types
from collections import namedtuple
from typing import Any, Dict, Optional, TYPE_CHECKING, Type, TypeVar
from typing import Any, ClassVar, Dict, List, Optional, TYPE_CHECKING, Type, TypeVar
__all__ = (
'Enum',
@ -56,16 +56,25 @@ __all__ = (
'NSFWLevel',
)
def _create_value_cls(name):
cls = namedtuple('_EnumValue_' + name, 'name value')
cls.__repr__ = lambda self: f'<{name}.{self.name}: {self.value!r}>'
cls.__str__ = lambda self: f'{name}.{self.name}'
return cls
def _is_descriptor(obj):
return hasattr(obj, '__get__') or hasattr(obj, '__set__') or hasattr(obj, '__delete__')
class EnumMeta(type):
if TYPE_CHECKING:
__name__: ClassVar[str]
_enum_member_names_: ClassVar[List[str]]
_enum_member_map_: ClassVar[Dict[str, Any]]
_enum_value_map_: ClassVar[Dict[Any, Any]]
def __new__(cls, name, bases, attrs):
value_mapping = {}
member_mapping = {}
@ -101,7 +110,7 @@ class EnumMeta(type):
attrs['_enum_member_names_'] = member_names
attrs['_enum_value_cls_'] = value_cls
actual_cls = super().__new__(cls, name, bases, attrs)
value_cls._actual_enum_cls_ = actual_cls
value_cls._actual_enum_cls_ = actual_cls # type: ignore
return actual_cls
def __iter__(cls):
@ -143,9 +152,11 @@ class EnumMeta(type):
except AttributeError:
return False
if TYPE_CHECKING:
from enum import Enum
else:
class Enum(metaclass=EnumMeta):
@classmethod
def try_value(cls, value):
@ -154,6 +165,7 @@ else:
except (KeyError, TypeError):
return value
class ChannelType(Enum):
text = 0
private = 1
@ -170,6 +182,7 @@ class ChannelType(Enum):
def __str__(self):
return self.name
class MessageType(Enum):
default = 0
recipient_add = 1
@ -195,6 +208,7 @@ class MessageType(Enum):
thread_starter_message = 21
guild_invite_reminder = 22
class VoiceRegion(Enum):
us_west = 'us-west'
us_east = 'us-east'
@ -223,6 +237,7 @@ class VoiceRegion(Enum):
def __str__(self):
return self.value
class SpeakingState(Enum):
none = 0
voice = 1
@ -235,6 +250,7 @@ class SpeakingState(Enum):
def __int__(self):
return self.value
class VerificationLevel(Enum):
none = 0
low = 1
@ -245,6 +261,7 @@ class VerificationLevel(Enum):
def __str__(self):
return self.name
class ContentFilter(Enum):
disabled = 0
no_role = 1
@ -253,6 +270,7 @@ class ContentFilter(Enum):
def __str__(self):
return self.name
class Status(Enum):
online = 'online'
offline = 'offline'
@ -264,6 +282,7 @@ class Status(Enum):
def __str__(self):
return self.value
class DefaultAvatar(Enum):
blurple = 0
grey = 1
@ -275,16 +294,20 @@ class DefaultAvatar(Enum):
def __str__(self):
return self.name
class NotificationLevel(Enum):
all_messages = 0
only_mentions = 1
class AuditLogActionCategory(Enum):
create = 1
delete = 2
update = 3
class AuditLogAction(Enum):
# fmt: off
guild_update = 1
channel_create = 10
channel_update = 11
@ -323,9 +346,11 @@ class AuditLogAction(Enum):
stage_instance_create = 83
stage_instance_update = 84
stage_instance_delete = 85
# fmt: on
@property
def category(self) -> Optional[AuditLogActionCategory]:
# fmt: off
lookup: Dict[AuditLogAction, Optional[AuditLogActionCategory]] = {
AuditLogAction.guild_update: AuditLogActionCategory.update,
AuditLogAction.channel_create: AuditLogActionCategory.create,
@ -366,6 +391,7 @@ class AuditLogAction(Enum):
AuditLogAction.stage_instance_update: AuditLogActionCategory.update,
AuditLogAction.stage_instance_delete: AuditLogActionCategory.delete,
}
# fmt: on
return lookup[self]
@property
@ -396,6 +422,7 @@ class AuditLogAction(Enum):
elif v < 90:
return 'stage_instance'
class UserFlags(Enum):
staff = 1
partner = 2
@ -415,6 +442,7 @@ class UserFlags(Enum):
verified_bot_developer = 131072
discord_certified_moderator = 262144
class ActivityType(Enum):
unknown = -1
playing = 0
@ -427,36 +455,44 @@ class ActivityType(Enum):
def __int__(self):
return self.value
class TeamMembershipState(Enum):
invited = 1
accepted = 2
class WebhookType(Enum):
incoming = 1
channel_follower = 2
application = 3
class ExpireBehaviour(Enum):
remove_role = 0
kick = 1
ExpireBehavior = ExpireBehaviour
class StickerType(Enum):
png = 1
apng = 2
lottie = 3
class InviteTarget(Enum):
unknown = 0
stream = 1
embedded_application = 2
class InteractionType(Enum):
ping = 1
application_command = 2
component = 3
class InteractionResponseType(Enum):
pong = 1
# ack = 2 (deprecated)
@ -466,6 +502,7 @@ class InteractionResponseType(Enum):
deferred_message_update = 6 # for components
message_update = 7 # for components
class VideoQualityMode(Enum):
auto = 1
full = 2
@ -473,6 +510,7 @@ class VideoQualityMode(Enum):
def __int__(self):
return self.value
class ComponentType(Enum):
action_row = 1
button = 2
@ -481,6 +519,7 @@ class ComponentType(Enum):
def __int__(self):
return self.value
class ButtonStyle(Enum):
primary = 1
secondary = 2
@ -499,24 +538,29 @@ class ButtonStyle(Enum):
def __int__(self):
return self.value
class StagePrivacyLevel(Enum):
public = 1
closed = 2
guild_only = 2
class NSFWLevel(Enum):
default = 0
explicit = 1
safe = 2
age_restricted = 3
T = TypeVar('T')
def create_unknown_value(cls: Type[T], val: Any) -> T:
value_cls = cls._enum_value_cls_ # type: ignore
name = f'unknown_{val}'
return value_cls(name=name, value=val)
def try_enum(cls: Type[T], val: Any) -> T:
"""A function that tries to turn the value into enum ``cls``.