mirror of
https://github.com/MelisaDev/melisa.git
synced 2024-11-11 19:07:28 +03:00
refactor and add tests of guild converting
This commit is contained in:
parent
8f39ee9948
commit
b8faa2df8a
3 changed files with 108 additions and 100 deletions
|
@ -10,5 +10,3 @@ __title__ = "Melisa"
|
|||
__description__ = "Cache-configurable module to interact with the Discord API."
|
||||
__author__ = "MelisaDev"
|
||||
__license__ = "MIT"
|
||||
|
||||
|
||||
|
|
|
@ -4,8 +4,8 @@
|
|||
from __future__ import annotations
|
||||
|
||||
from dataclasses import dataclass
|
||||
from enum import IntEnum, Enum, Flag
|
||||
from typing import Optional, Tuple, List, Literal
|
||||
from enum import IntEnum, Enum
|
||||
from typing import List, Any
|
||||
|
||||
from ...utils import Snowflake
|
||||
from ...utils import APIModelBase
|
||||
|
@ -141,19 +141,27 @@ class Guild(APIModelBase):
|
|||
default_message_notifications: APINullable[int] = None
|
||||
explicit_content_filter: APINullable[int] = None
|
||||
features: APINullable[List[GuildFeatures]] = None
|
||||
#TODO: Make a structure for emoji and role
|
||||
roles: APINullable[List[Any]] = None
|
||||
emojis: APINullable[List[Any]] = None
|
||||
# TODO: Make a structures of emoji and role
|
||||
|
||||
mfa_level: APINullable[int] = None
|
||||
application_id: APINullable[Snowflake] = None
|
||||
system_channel_id: APINullable[Snowflake] = None
|
||||
system_channel_flags: APINullable[int] = None
|
||||
rules_channel_id: APINullable[Snowflake] = None
|
||||
#TODO: Deal with joined_at
|
||||
joined_at: APINullable[int] = None
|
||||
# TODO: Deal with joined_at
|
||||
|
||||
large: APINullable[bool] = None
|
||||
unavailable: APINullable[bool] = None
|
||||
member_count: APINullable[int] = None
|
||||
#TODO: Make a structure for voice_states, members, channels, threads, presences(?)
|
||||
voice_states: APINullable[List[Any]] = None
|
||||
members: APINullable[List[Any]] = None
|
||||
channels: APINullable[List[Any]] = None
|
||||
threads: APINullable[List[Any]] = None
|
||||
presences: APINullable[List[Any]] = None
|
||||
# TODO: Make a structure for voice_states, members, channels, threads, presences(?)
|
||||
|
||||
max_presences: APINullable[int] = None
|
||||
max_members: APINullable[int] = None
|
||||
|
@ -169,90 +177,16 @@ class Guild(APIModelBase):
|
|||
approximate_presence_count: APINullable[int] = None
|
||||
nsfw_level: APINullable[int] = None
|
||||
premium_progress_bar_enabled: APINullable[bool] = None
|
||||
#TODO: Make a structure for welcome_screen, stage_instances, stickers and guild_scheduled_events
|
||||
stage_instances: APINullable[List[Any]] = None
|
||||
stickers: APINullable[List[Any]] = None
|
||||
welcome_screen: APINullable[Any] = None
|
||||
guild_scheduled_events: APINullable[List[Any]] = None
|
||||
|
||||
|
||||
async def get_guild(self, _id: id, with_counts: bool = False ):
|
||||
""""""
|
||||
|
||||
return await self._http.get(
|
||||
f"/guild/{_id}", params = {"with_counts": "true" if with_counts else None})
|
||||
|
||||
|
||||
|
||||
@property
|
||||
def default_message_notifications(self) -> Optional[DefaultMessageNotificationLevel]:
|
||||
""""""
|
||||
|
||||
return(
|
||||
None
|
||||
if self.default_message_notifications is None
|
||||
else DefaultMessageNotificationLevel(self.default_message_notifications)
|
||||
)
|
||||
|
||||
@property
|
||||
def explicit_content_filter(self) -> Optional[ExplicitContentFilterLevel]:
|
||||
""""""
|
||||
|
||||
return(
|
||||
None
|
||||
if self.explicit_content_filter is None
|
||||
else ExplicitContentFilterLevel(self.explicit_content_filter)
|
||||
)
|
||||
|
||||
@property
|
||||
def mfa_level(self) -> Optional[MFALevel]:
|
||||
""""""
|
||||
|
||||
return(
|
||||
None
|
||||
if self.mfa_level is None
|
||||
else MFALevel(self.mfa_level)
|
||||
)
|
||||
|
||||
@property
|
||||
def verification_level(self) -> Optional[VerificationLevel]:
|
||||
""""""
|
||||
|
||||
return(
|
||||
None
|
||||
if self.verification_level is None
|
||||
else VerificationLevel(self.verification_level)
|
||||
)
|
||||
|
||||
@property
|
||||
def nsfw_level(self) -> Optional[GuildNSFWLevel]:
|
||||
""""""
|
||||
|
||||
return(
|
||||
None
|
||||
if self.nsfw_level is None
|
||||
else GuildNSFWLevel(self.nsfw_level)
|
||||
)
|
||||
|
||||
@property
|
||||
def premium_tier(self) -> Optional(PremiumTier):
|
||||
""""""
|
||||
|
||||
return(
|
||||
None
|
||||
if self.premium_tier is None
|
||||
else PremiumTier(self.premium_tier)
|
||||
)
|
||||
|
||||
@property
|
||||
def system_channel_flags(self) -> Optional[SystemChannelFlags]:
|
||||
""""""
|
||||
|
||||
return(
|
||||
None
|
||||
if self.system_channel_flags is None
|
||||
else SystemChannelFlags(self.system_channel_flags)
|
||||
)
|
||||
# TODO: Make a structure for welcome_screen, stage_instances,
|
||||
# stickers and guild_scheduled_events
|
||||
|
||||
|
||||
@dataclass(repr=False)
|
||||
class UnavailableGuild(APIModelBase):
|
||||
|
||||
id: APINullable[Snowflake] = None
|
||||
unavailable: APINullable[bool] = True
|
||||
|
|
76
tests/parsing/test_guilds_parsing.py
Normal file
76
tests/parsing/test_guilds_parsing.py
Normal file
|
@ -0,0 +1,76 @@
|
|||
from melisa.models import Guild
|
||||
|
||||
guild_data = {
|
||||
"id": "197038439483310086",
|
||||
"name": "Discord Testers",
|
||||
"icon": "f64c482b807da4f539cff778d174971c",
|
||||
"description": "The official place to report Discord Bugs!",
|
||||
"splash": None,
|
||||
"discovery_splash": None,
|
||||
"features": [
|
||||
"ANIMATED_ICON",
|
||||
"VERIFIED",
|
||||
"NEWS",
|
||||
"VANITY_URL",
|
||||
"DISCOVERABLE",
|
||||
"MORE_EMOJI",
|
||||
"INVITE_SPLASH",
|
||||
"BANNER",
|
||||
"COMMUNITY"
|
||||
],
|
||||
"emojis": [],
|
||||
"banner": "9b6439a7de04f1d26af92f84ac9e1e4a",
|
||||
"owner_id": "73193882359173120",
|
||||
"application_id": None,
|
||||
"region": None,
|
||||
"afk_channel_id": None,
|
||||
"afk_timeout": 300,
|
||||
"system_channel_id": None,
|
||||
"widget_enabled": None,
|
||||
"widget_channel_id": None,
|
||||
"verification_level": 3,
|
||||
"roles": [],
|
||||
"default_message_notifications": 1,
|
||||
"mfa_level": 1,
|
||||
"explicit_content_filter": 2,
|
||||
"max_presences": 40000,
|
||||
"max_members": 250000,
|
||||
"vanity_url_code": "discord-testers",
|
||||
"premium_tier": 3,
|
||||
"premium_subscription_count": 33,
|
||||
"system_channel_flags": 0,
|
||||
"preferred_locale": "en-US",
|
||||
"rules_channel_id": "441688182833020939",
|
||||
"public_updates_channel_id": "281283303326089216"
|
||||
}
|
||||
|
||||
parsed_model = Guild.from_dict(guild_data)
|
||||
|
||||
|
||||
class TestGuildParsing:
|
||||
def test_dict_to_model(self):
|
||||
assert int(parsed_model.id) == 197038439483310086
|
||||
assert parsed_model.name == "Discord Testers"
|
||||
assert parsed_model.features == [
|
||||
"ANIMATED_ICON",
|
||||
"VERIFIED",
|
||||
"NEWS",
|
||||
"VANITY_URL",
|
||||
"DISCOVERABLE",
|
||||
"MORE_EMOJI",
|
||||
"INVITE_SPLASH",
|
||||
"BANNER",
|
||||
"COMMUNITY"
|
||||
]
|
||||
|
||||
def test_model_to_dict_without_none(self):
|
||||
data = parsed_model.to_dict()
|
||||
|
||||
new_guild_data = guild_data
|
||||
|
||||
for i in data.keys():
|
||||
del new_guild_data[i]
|
||||
|
||||
for j in new_guild_data.values():
|
||||
if j is not None:
|
||||
raise TypeError
|
Loading…
Reference in a new issue