Skip to main content

Reusable and richly typed wrapper over the Discord REST API

Project description

Wumpy-rest

Richly and accurately typed wrapper around the Discord REST API.

Usage

The best way to use wumpy-rest is to import APIClient:

import anyio
from wumpy.rest import APIClient


TOKEN = 'ABC123.XYZ789'


async def main():
    async with APIClient(headers={'Authentication': f'Bot {TOKEN}'}) as api:
        print(await api.fetch_my_user())


anyio.run(main)

APIClient is a class that implements all routes of the Discord API. This is made up of multiple route classes. You can create your own class with the routes you use:

from wumpy.rest import ApplicationCommandRequester, InteractionRequester


class MyAPIClient(ApplicationCommandRequester, InteractionRequester):

    __slots__ = ()  # Save some memory for this class

Files

Some endpoints support uploading files, for these a file-like object is expected that's been opened in binary-mode (for example 'rb').

For the message/interaction endpoints, remember to include a matching attachment object with 'id' set to the index of the file.

Ratelimiter

You can pass a custom ratelimiter to the requester if you want to customize that behaviour. For more, read the documentation. Here's an example of a ratelimiter that does no ratelimiting and does not handle any kind of 429-responses.

from contextlib import asynccontextmanager
from typing import (
    Any, AsyncContextManager, AsyncGenerator, Awaitable, Callable, Coroutine,
    Mapping
)

import anyio
from wumpy.rest import APIClient


class NoOpRatelimiter:
    """Ratelimiter implementation that does nothing; a no-op implementation."""

    async def __aenter__(self) -> Callable[
        [Route], AsyncContextManager[
            Callable[[Mapping[str, str]], Awaitable]
        ]
    ]:
        return self.acquire

    async def __aexit__(
        self,
        exc_type: Optional[Type[BaseException]],
        exc_val: Optional[BaseException],
        exc_tb: Optional[TracebackType]
    ) -> object:
        pass

    async def update(self, headers: Mapping[str, str]) -> object:
        pass

    @asynccontextmanager
    async def acquire(self, route: Route) -> AsyncGenerator[
        Callable[[Mapping[str, str]], Coroutine[Any, Any, object]],
        None
    ]:
        # The return type may look a little weird, but this is how
        # @asynccontextmanager works. You pass it a function that returns an
        # async generator (which yields what the asynchronous context manager
        # then returns).
        yield self.update


async def main():
    async with APIClient(
        NoOpRatelimiter(),
        headers={'Authentication': f'Bot {TOKEN}'}
    ) as api:
        print(await api.fetch_my_user())


anyio.run(main)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

wumpy-rest-0.1.2.tar.gz (36.8 kB view details)

Uploaded Source

Built Distribution

wumpy_rest-0.1.2-py3-none-any.whl (43.4 kB view details)

Uploaded Python 3

File details

Details for the file wumpy-rest-0.1.2.tar.gz.

File metadata

  • Download URL: wumpy-rest-0.1.2.tar.gz
  • Upload date:
  • Size: 36.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: python-requests/2.26.0

File hashes

Hashes for wumpy-rest-0.1.2.tar.gz
Algorithm Hash digest
SHA256 304a3a80f72914a6c0cb9663c3290198e51949b193b4f1370862bc175bba877d
MD5 42f9db3eec7b4ff9ddc66d8642b51a56
BLAKE2b-256 14d6ab2bc70a839140dd4cbe6193e14b7fff89286c9363a34efeef8ba6451422

See more details on using hashes here.

File details

Details for the file wumpy_rest-0.1.2-py3-none-any.whl.

File metadata

  • Download URL: wumpy_rest-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 43.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: python-requests/2.26.0

File hashes

Hashes for wumpy_rest-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 d55d4747bd7de04de831332652fdc67bbb42f413588b3be0f4fac5ef6a5d9554
MD5 056a636d9054d974a159d8ba1b6d233f
BLAKE2b-256 2a0dd4ab995f8b9a294bc328aa9177e28d3eaadc8f004622c019f00bf555f6b4

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page