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."
|
__description__ = "Cache-configurable module to interact with the Discord API."
|
||||||
__author__ = "MelisaDev"
|
__author__ = "MelisaDev"
|
||||||
__license__ = "MIT"
|
__license__ = "MIT"
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -4,8 +4,8 @@
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
from enum import IntEnum, Enum, Flag
|
from enum import IntEnum, Enum
|
||||||
from typing import Optional, Tuple, List, Literal
|
from typing import List, Any
|
||||||
|
|
||||||
from ...utils import Snowflake
|
from ...utils import Snowflake
|
||||||
from ...utils import APIModelBase
|
from ...utils import APIModelBase
|
||||||
|
@ -141,19 +141,27 @@ class Guild(APIModelBase):
|
||||||
default_message_notifications: APINullable[int] = None
|
default_message_notifications: APINullable[int] = None
|
||||||
explicit_content_filter: APINullable[int] = None
|
explicit_content_filter: APINullable[int] = None
|
||||||
features: APINullable[List[GuildFeatures]] = 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
|
mfa_level: APINullable[int] = None
|
||||||
application_id: APINullable[Snowflake] = None
|
application_id: APINullable[Snowflake] = None
|
||||||
system_channel_id: APINullable[Snowflake] = None
|
system_channel_id: APINullable[Snowflake] = None
|
||||||
system_channel_flags: APINullable[int] = None
|
system_channel_flags: APINullable[int] = None
|
||||||
rules_channel_id: APINullable[Snowflake] = 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
|
large: APINullable[bool] = None
|
||||||
unavailable: APINullable[bool] = None
|
unavailable: APINullable[bool] = None
|
||||||
member_count: APINullable[int] = 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_presences: APINullable[int] = None
|
||||||
max_members: APINullable[int] = None
|
max_members: APINullable[int] = None
|
||||||
|
@ -169,90 +177,16 @@ class Guild(APIModelBase):
|
||||||
approximate_presence_count: APINullable[int] = None
|
approximate_presence_count: APINullable[int] = None
|
||||||
nsfw_level: APINullable[int] = None
|
nsfw_level: APINullable[int] = None
|
||||||
premium_progress_bar_enabled: APINullable[bool] = 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
|
||||||
|
|
||||||
|
# TODO: Make a structure for welcome_screen, stage_instances,
|
||||||
async def get_guild(self, _id: id, with_counts: bool = False ):
|
# stickers and guild_scheduled_events
|
||||||
""""""
|
|
||||||
|
|
||||||
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)
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
@dataclass(repr=False)
|
@dataclass(repr=False)
|
||||||
class UnavailableGuild(APIModelBase):
|
class UnavailableGuild(APIModelBase):
|
||||||
|
|
||||||
id: APINullable[Snowflake] = None
|
id: APINullable[Snowflake] = None
|
||||||
unavailable: APINullable[bool] = True
|
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