Module zenora.impl.userapi

Expand source code
# Copyright (c) 2022 DevGuyAhnaf

# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:

# The above copyright notice and this permission notice shall be included in all
# copies or substantial portions of the Software.

# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.

from zenora.deserializers import deserialize_model
from zenora.utils import convert_image_to_data, extract_snowflake_from_object
from zenora.routes import (
    BASE_URL,
    GET_CURRENT_USER,
    GET_USER,
    GET_USER_CONNECTIONS,
    DM_URL,
    GET_USER_GUILDS,
)
from zenora.request import Request
from zenora import (
    OwnUser,
    User,
    Connection,
    UserAPI,
    SnowflakeOr,
    DMChannel,
    Guild,
)
from typing import List, Final, Optional

__all__: Final[List[str]] = ["UserAPIImpl"]


class UserAPIImpl(UserAPI):
    _token: str

    def __init__(self, app) -> None:  # type: ignore[no-untyped-def]
        self._token = app._token
        self._app = app

    def get_current_user(self) -> OwnUser:
        url = BASE_URL + GET_CURRENT_USER
        payload = Request.make_request(self._token, url, "GET")

        return deserialize_model(OwnUser, payload)

    def get_user(self, user_id: SnowflakeOr[str]) -> User:
        url = BASE_URL + GET_USER.format(user_id)
        payload = Request.make_request(self._token, url, "GET")
        return deserialize_model(User, payload)

    def modify_current_user(
        self,
        username: Optional[str] = None,
        avatar: Optional[str] = None,
    ) -> OwnUser:
        url = BASE_URL + GET_CURRENT_USER

        json_payload = {}

        if username:
            json_payload["username"] = username
        if avatar:
            json_payload["avatar"] = convert_image_to_data(avatar)

        payload = Request.make_request(
            self._token, url, "PATCH", json_data=json_payload
        )
        if "token" in payload:
            self._token = self._app._token = payload["token"]
            del payload["token"]
        return deserialize_model(OwnUser, payload)

    def get_current_user_connections(self) -> List[Connection]:
        url = BASE_URL + GET_USER_CONNECTIONS

        payload = Request.make_request(self._token, url, "GET")

        return_data: list = []
        for x in payload:
            return_data.append(deserialize_model(Connection, x))

        return return_data

    def create_dm(self, user: SnowflakeOr[User]) -> DMChannel:
        url = BASE_URL + DM_URL
        payload = Request.make_request(
            self._token,
            url,
            extract_snowflake_from_object(user),
        )

        return deserialize_model(DMChannel, payload)

    def get_my_guilds(self) -> List[Guild]:
        url = BASE_URL + GET_USER_GUILDS
        payload = Request.make_request(
            self._token,
            url,
            "GET",
        )
        return [deserialize_model(Guild, i) for i in payload]

Classes

class UserAPIImpl (app)

A client for using all the user related API functionality

Expand source code
class UserAPIImpl(UserAPI):
    _token: str

    def __init__(self, app) -> None:  # type: ignore[no-untyped-def]
        self._token = app._token
        self._app = app

    def get_current_user(self) -> OwnUser:
        url = BASE_URL + GET_CURRENT_USER
        payload = Request.make_request(self._token, url, "GET")

        return deserialize_model(OwnUser, payload)

    def get_user(self, user_id: SnowflakeOr[str]) -> User:
        url = BASE_URL + GET_USER.format(user_id)
        payload = Request.make_request(self._token, url, "GET")
        return deserialize_model(User, payload)

    def modify_current_user(
        self,
        username: Optional[str] = None,
        avatar: Optional[str] = None,
    ) -> OwnUser:
        url = BASE_URL + GET_CURRENT_USER

        json_payload = {}

        if username:
            json_payload["username"] = username
        if avatar:
            json_payload["avatar"] = convert_image_to_data(avatar)

        payload = Request.make_request(
            self._token, url, "PATCH", json_data=json_payload
        )
        if "token" in payload:
            self._token = self._app._token = payload["token"]
            del payload["token"]
        return deserialize_model(OwnUser, payload)

    def get_current_user_connections(self) -> List[Connection]:
        url = BASE_URL + GET_USER_CONNECTIONS

        payload = Request.make_request(self._token, url, "GET")

        return_data: list = []
        for x in payload:
            return_data.append(deserialize_model(Connection, x))

        return return_data

    def create_dm(self, user: SnowflakeOr[User]) -> DMChannel:
        url = BASE_URL + DM_URL
        payload = Request.make_request(
            self._token,
            url,
            extract_snowflake_from_object(user),
        )

        return deserialize_model(DMChannel, payload)

    def get_my_guilds(self) -> List[Guild]:
        url = BASE_URL + GET_USER_GUILDS
        payload = Request.make_request(
            self._token,
            url,
            "GET",
        )
        return [deserialize_model(Guild, i) for i in payload]

Ancestors

Inherited members