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(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,
    HTTPXRequester
)


class MyAPIClient(ApplicationCommandRequester, InteractionRequester, HTTPXRequester):

    __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):
        return self

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

    @asynccontextmanager
    async def __call__(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 update(self, headers: Mapping[str, str]) -> object:
        pass


async def main():
    async with APIClient(TOKEN, ratelimiter=NoOpRatelimiter()) 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.3.0.tar.gz (41.5 kB view details)

Uploaded Source

Built Distribution

wumpy_rest-0.3.0-py3-none-any.whl (49.2 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for wumpy-rest-0.3.0.tar.gz
Algorithm Hash digest
SHA256 2cbc1ea04321b76a2c9fa7bd369ad4624fd646f0769c0b3ef22478a8b095b7b5
MD5 aa967b74516a0e18583df4bd1a460478
BLAKE2b-256 1c4cd35d9d4a56d49f54c6d3e205222c76b5e6b13a777afebe93832ae9f50367

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for wumpy_rest-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 c6bcbfe08064475bdc2b80ad2ee8ae91d8a383a7cc582363d12aefed4b9bea24
MD5 be1c262c7bac3eaebfd139d1ca06b889
BLAKE2b-256 7cdbaf88c32aede19c3958129c0b4052e62cea1955ffd98c253f872dd260e112

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