Skip to content

HTTP

Internal API

These classes are for internal use only.

Users should interact with Client and other public API classes instead.


Key:
    A:B = map
    [A] = step
    [A]-->[B] = flow
    [A]--|N|-->[B] = flow using N
    F(X) = input X, output F

R = request
EP = endpoint
L = Lock
Q = Queue
H = header
B = bucket

HTTP(EP) = [R:EP]--|L|-->[Q:EP]--|send R|-->[add/update H:B]

http

logger = logging.getLogger('scurrypy.http') module-attribute

RequestItem dataclass

method: str instance-attribute

endpoint: str instance-attribute

data: Serialized | list[Serialized] instance-attribute

params: JSON | None instance-attribute

files: list[str] | None instance-attribute

assets: Serialized | None instance-attribute

future: asyncio.Future[HTTPResponse] instance-attribute

Bucket dataclass

remaining: int instance-attribute

reset_after: float instance-attribute

reset_on: float instance-attribute

sleep_task: asyncio.Task[None] | None = None class-attribute instance-attribute

HttpClient

BASE = 'https://discord.com/api/v10' class-attribute instance-attribute

session: aiohttp.ClientSession | None = None instance-attribute

queues: dict[str, asyncio.Queue[RequestItem]] = {} instance-attribute

queues_lock = asyncio.Lock() instance-attribute

workers: dict[str, asyncio.Task[None]] = {} instance-attribute

buckets: dict[str, Bucket] = {} instance-attribute

bucket_lock: dict[str, asyncio.Lock] = {} instance-attribute

buckets_lock = asyncio.Lock() instance-attribute

global_lock: asyncio.Lock = asyncio.Lock() instance-attribute

global_reset: float = 0.0 instance-attribute

start async

Start the HTTP session.

close async

Gracefully stop all workers and close the HTTP session.

request async

Queue a request for the given endpoint.

Parameters:

  • method (str) –

    HTTP method (e.g., POST, GET, DELETE, PATCH, etc.)

  • endpoint (str) –

    Discord endpoint (e.g., /channels/123/messages -- leading forward slash not required)

  • data (Serialized | list[Serialized], default: None ) –

    relevant data

  • params (JSON | None, default: None ) –

    relevant query params

  • files (list[str] | None, default: None ) –

    relevant files

  • assets (Serialized, default: None ) –

    relevant assets

Raises:

Returns:

  • HTTPResponse –

    result or promise of request or None if failed

request_json async

Queue a request for the given endpoint.

Parameters:

  • method (str) –

    HTTP method (e.g., POST, GET, DELETE, PATCH, etc.)

  • endpoint (str) –

    Discord endpoint (e.g., /channels/123/messages -- leading forward slash not required)

  • data (Serialized | list[Serialized], default: None ) –

    relevant data

  • params (JSON | None, default: None ) –

    relevant query params

  • files (list[str] | None, default: None ) –

    relevant files

  • assets (Serialized, default: None ) –

    relevant assets

Returns:

  • JSON –

    result or promise of request promising JSON

request_list async

Queue a request for the given endpoint.

Parameters:

  • method (str) –

    HTTP method (e.g., POST, GET, DELETE, PATCH, etc.)

  • endpoint (str) –

    Discord endpoint (e.g., /channels/123/messages -- leading forward slash not required)

  • data (Serialized | list[Serialized], default: None ) –

    relevant data

  • params (JSON | None, default: None ) –

    relevant query params

  • files (list[str] | None, default: None ) –

    relevant files

  • assets (Serialized, default: None ) –

    relevant assets

Returns:

  • list[JSON] –

    list result or promise of request promising list of JSON