Skip to content

Commit

Permalink
refactor: role and meta models and fix imports
Browse files Browse the repository at this point in the history
Refactored the role and meta models by making `RoleUser` part of the user model, enhancing type hints, and adding missing properties. Also, fixed import statements to improve code maintainability and readability.
  • Loading branch information
yupix committed Nov 8, 2024
1 parent cac07d1 commit 4d09893
Show file tree
Hide file tree
Showing 7 changed files with 147 additions and 89 deletions.
9 changes: 6 additions & 3 deletions mipac/actions/admins/roles.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,9 @@
from typing import TYPE_CHECKING, Any, Literal, override

from mipac import IRolePolicies
from mipac.http import HTTPClient, Route
from mipac.models.roles import Role, RoleUser
from mipac.http import Route
from mipac.models.roles import Role
from mipac.models.user import RoleUser
from mipac.types.roles import IRole, IRoleUser
from mipac.utils.format import remove_dict_missing
from mipac.utils.pagination import Pagination
Expand Down Expand Up @@ -302,7 +303,9 @@ async def get_list(self) -> list[Role]:
)
return [Role(i, client=self._client) for i in res]

async def update_default_policies(self, policies: IRolePolicies): # TODO: ここあとでキー追加する
async def update_default_policies(
self, policies: IRolePolicies
): # TODO: ここあとでキー追加する
body = {
"policies": {
"gtlAvailable": policies.get("gtl_available"),
Expand Down
3 changes: 2 additions & 1 deletion mipac/actions/role.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@
from mipac.abstract.action import AbstractAction
from mipac.http import HTTPClient, Route
from mipac.models.note import Note
from mipac.models.roles import Role, RoleUser
from mipac.models.user import RoleUser
from mipac.models.roles import Role
from mipac.types.note import INote
from mipac.types.roles import IRole, IRoleUser
from mipac.utils.pagination import Pagination
Expand Down
106 changes: 73 additions & 33 deletions mipac/models/lite/meta.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from __future__ import annotations

from typing import TYPE_CHECKING, Any
from typing import TYPE_CHECKING, Any, Literal

from mipac.models.lite.ad import PartialAd
from mipac.models.roles import RolePolicies
Expand Down Expand Up @@ -48,17 +48,25 @@ def langs(self) -> list[str]:
return self._raw_meta["langs"]

@property
def tos_url(self) -> str:
def tos_url(self) -> str | None:
return self._raw_meta["tos_url"]

@property
def repository_url(self) -> str:
def repository_url(self) -> str | None:
return self._raw_meta["repository_url"]

@property
def feedback_url(self) -> str:
def feedback_url(self) -> str | None:
return self._raw_meta["feedback_url"]

@property
def default_dark_theme(self) -> str | None:
return self._raw_meta["default_dark_theme"]

@property
def default_light_theme(self) -> str | None:
return self._raw_meta["default_light_theme"]

@property
def disable_registration(self) -> bool:
return self._raw_meta["disable_registration"]
Expand All @@ -75,29 +83,41 @@ def enable_hcaptcha(self) -> bool:
def hcaptcha_site_key(self) -> str | None:
return self._raw_meta["hcaptcha_site_key"]

@property
def enable_mcaptcha(self) -> bool:
return self._raw_meta["enable_mcaptcha"]

@property
def mcaptcha_site_key(self) -> str | None:
return self._raw_meta["mcaptcha_site_key"]

@property
def mcaptcha_instance_url(self) -> str | None:
return self._raw_meta["mcaptcha_instance_url"]

@property
def enable_recaptcha(self) -> bool:
return self._raw_meta["enable_recaptcha"]

@property
def recaptcha_site_key(self) -> str:
def recaptcha_site_key(self) -> str | None:
return self._raw_meta["recaptcha_site_key"]

@property
def enable_turnstile(self) -> bool:
return self._raw_meta["enable_turnstile"]

@property
def turnstile_site_key(self) -> str:
def turnstile_site_key(self) -> str | None:
return self._raw_meta["turnstile_site_key"]

@property
def sw_publickey(self) -> str | None:
return self._raw_meta["sw_publickey"]
def enable_testcaptcha(self) -> bool:
return self._raw_meta["enable_testcaptcha"]

@property
def theme_color(self) -> str:
return self._raw_meta["theme_color"]
def sw_publickey(self) -> str | None:
return self._raw_meta["sw_publickey"]

@property
def mascot_image_url(self) -> str:
Expand All @@ -107,14 +127,14 @@ def mascot_image_url(self) -> str:
def banner_url(self) -> str | None:
return self._raw_meta["banner_url"]

@property
def info_image_url(self) -> str | None:
return self._raw_meta["info_image_url"]

@property
def server_error_image_url(self) -> str | None:
return self._raw_meta["server_error_image_url"]

@property
def info_image_url(self) -> str | None:
return self._raw_meta["info_image_url"]

@property
def not_found_image_url(self) -> str | None:
return self._raw_meta["not_found_image_url"]
Expand All @@ -123,30 +143,18 @@ def not_found_image_url(self) -> str | None:
def icon_url(self) -> str | None:
return self._raw_meta["icon_url"]

@property
def background_image_url(self) -> str | None:
return self._raw_meta["background_image_url"]

@property
def logo_image_url(self) -> str | None:
return self._raw_meta["logo_image_url"]

@property
def max_note_text_length(self) -> int:
return self._raw_meta["max_note_text_length"]

@property
def default_light_theme(self) -> str | None:
return self._raw_meta["default_light_theme"]

@property
def default_dark_theme(self) -> str | None:
return self._raw_meta["default_dark_theme"]

@property
def ads(self) -> list[PartialAd]:
return [PartialAd(raw_ad, client=self.__client) for raw_ad in self._raw_meta["ads"]]

@property
def notes_per_one_ad(self) -> int:
return self._raw_meta["notes_per_one_ad"]

@property
def enable_email(self) -> bool:
return self._raw_meta["enable_email"]
Expand All @@ -160,20 +168,52 @@ def translator_available(self) -> bool:
return self._raw_meta["translator_available"]

@property
def inquiry_url(self) -> str | None:
def media_proxy(self) -> bool:
return self._raw_meta["media_proxy"]

@property
def enable_url_preview(self) -> bool:
return self._raw_meta["enable_url_preview"]

@property
def background_image_url(self) -> str | None:
return self._raw_meta["background_image_url"]

@property
def impressum_url(self) -> bool:
return self._raw_meta["impressum_url"]

@property
def logo_image_url(self) -> bool:
return self._raw_meta["logo_image_url"]

@property
def privacy_policy_url(self) -> bool:
return self._raw_meta["privacy_policy_url"]

@property
def inquiry_url(self) -> bool:
return self._raw_meta["inquiry_url"]

@property
def server_rules(self) -> list[str]:
return self._raw_meta["server_rules"]

@property
def theme_color(self) -> str:
return self._raw_meta["theme_color"]

@property
def policies(self) -> RolePolicies:
return RolePolicies(self._raw_meta["policies"])

@property
def media_proxy(self) -> str:
return self._raw_meta["media_proxy"]
def note_searchable_scope(self) -> Literal["local", "global"]:
return self._raw_meta["note_searchable_scope"]

@property
def max_file_size(self) -> int:
return self._raw_meta["max_file_size"]

def _get(self, key: str) -> Any | None:
return self._raw_meta.get(key)
41 changes: 27 additions & 14 deletions mipac/models/meta.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
IFeatures,
IMeta,
ISensitiveMediaDetection,
ISensitiveMediaDetectionSentivity,
ISensitiveMediaDetectionSentivity, IMetaDetailed, IMetaDetailedOnly,
)

if TYPE_CHECKING:
Expand All @@ -28,17 +28,25 @@ def email_required_for_signup(self) -> bool:
return self.__raw_features["email_required_for_signup"]

@property
def hcaptcha(self) -> bool:
return self.__raw_features["hcaptcha"]
def local_timeline(self) -> bool:
return self.__raw_features["local_timeline"]

@property
def recaptcha(self) -> bool:
return self.__raw_features["recaptcha"]
def global_timeline(self) -> bool:
return self.__raw_features["global_timeline"]

@property
def hcaptcha(self) -> bool:
return self.__raw_features["hcaptcha"]

@property
def turnstile(self) -> bool:
return self.__raw_features["turnstile"]

@property
def recaptcha(self) -> bool:
return self.__raw_features["recaptcha"]

@property
def object_storage(self) -> bool:
return self.__raw_features["object_storage"]
Expand All @@ -55,14 +63,22 @@ def _get(self, key: str) -> Any | None:
return self.__raw_features.get(key)


class Meta(PartialMeta[IMeta]):
def __init__(self, instance_metadata: IMeta, *, client: ClientManager) -> None:
super().__init__(instance_metadata, client=client)
class MetaDetailedOnly:
def __init__(self, raw_meta: IMetaDetailedOnly, *, client: ClientManager):
self._raw_meta: IMetaDetailedOnly = raw_meta

@property
def features(self) -> Features:
return Features(self._raw_meta["features"])

@property
def proxy_account_name(self) -> str:
return self._raw_meta["proxy_account_name"]

@property
def require_setup(self) -> bool:
return self._raw_meta["require_setup"]

@property
def cache_remote_files(self) -> bool:
return self._raw_meta["cache_remote_files"]
Expand All @@ -71,13 +87,10 @@ def cache_remote_files(self) -> bool:
def cache_remote_sensitive_files(self) -> bool:
return self._raw_meta["cache_remote_sensitive_files"]

@property
def require_setup(self) -> bool:
return self._raw_meta["require_setup"]

@property
def proxy_account_name(self) -> str:
return self._raw_meta["proxy_account_name"]
class Meta(PartialMeta[IMetaDetailed], MetaDetailedOnly):
def __init__(self, instance_metadata: IMetaDetailed, *, client: ClientManager) -> None:
super().__init__(instance_metadata, client=client)


class AdminMeta:
Expand Down
37 changes: 1 addition & 36 deletions mipac/models/roles.py
Original file line number Diff line number Diff line change
@@ -1,50 +1,15 @@
from __future__ import annotations

from datetime import datetime
from typing import TYPE_CHECKING, Any

from mipac.models.lite.role import PartialRole
from mipac.models.user import MeDetailed, UserDetailedNotMe, packed_user
from mipac.types.roles import IRole, IRolePolicies, IRoleUser
from mipac.utils.format import str_to_datetime
from mipac.types.roles import IRole, IRolePolicies

if TYPE_CHECKING:
from mipac.manager.client import ClientManager


class RoleUser:
def __init__(self, role_user: IRoleUser, *, client: ClientManager) -> None:
self.__role_user = role_user
self.__client = client

@property
def id(self) -> str:
return self.__role_user["id"]

@property
def created_at(self) -> datetime:
return str_to_datetime(self.__role_user["created_at"])

@property
def user(self) -> UserDetailedNotMe | MeDetailed:
return packed_user(self.__role_user["user"], client=self.__client)

@property
def expires_at(self) -> datetime | None:
return (
str_to_datetime(self.__role_user["expires_at"])
if self.__role_user["expires_at"]
else None
)

def _get(self, key: str) -> Any | None:
return self.__role_user.get(key)

def __eq__(self, __value: object) -> bool:
return isinstance(__value, RoleUser) and self.id == __value.id

def __ne__(self, __value: object) -> bool:
return not self.__eq__(__value)


class RolePolicies:
Expand Down
Loading

0 comments on commit 4d09893

Please sign in to comment.