Configuration

The client is configured via RMPClientConfig. All fields have sensible defaults.

from rmp_client import RMPClientConfig, RMPClient

config = RMPClientConfig(
    base_url="https://www.ratemyprofessors.com/graphql",
    timeout_seconds=10.0,
    max_retries=3,
)
with RMPClient(config) as client:
    ...

Available Options #

Option Type Default Description
base_url str https://...graphql GraphQL endpoint URL
timeout_seconds float 10.0 HTTP request timeout
max_retries int 3 Number of retry attempts for failed requests
user_agent str Firefox UA User-Agent header
default_headers Mapping[str, str] UA + Accept-Language Default headers for all requests

Rate Limiting #

The client uses a token-bucket algorithm fixed at 60 requests per minute. Tokens replenish continuously at 1 per second. Each request consumes one token; if none are available the request blocks until one becomes available. This limit is not configurable.

Retries #

On 5xx errors or network failures, the client retries up to max_retries times. 4xx errors are not retried. After exhausting retries, a RetryError is raised. Each retry attempt consumes a token from the rate limiter before firing.

Situation Retried?
Network error (timeout, connection reset) Yes
5xx server error Yes
4xx client error (400, 401, 403, 404) No — raises HttpError immediately
429 Too Many Requests Yes — exponential back-off, up to max_retries times
GraphQL errors in a 200 response No — raises RMPAPIError immediately
config = RMPClientConfig(max_retries=5)

Timeouts #

The timeout_seconds value applies to each individual HTTP request (connect + read).

config = RMPClientConfig(timeout_seconds=30.0)