flexget.utils.requests module#

class flexget.utils.requests.DomainLimiter(domain)[source]#

Bases: ABC

Parameters:

domain (str)

_abc_impl = <_abc._abc_data object>#
class flexget.utils.requests.Session(timeout=30, max_retries=1, **kwargs)[source]#

Bases: Session

Subclass of requests Session class which defines some of our own defaults, records unresponsive sites, and raises errors by default.

Parameters:
  • timeout (int)

  • max_retries (int)

add_cookiejar(cookiejar)[source]#

Merge cookies from cookiejar into cookiejar for this session.

Parameters:

cookiejar – CookieJar instance to add to the session.

add_domain_limiter(limiter, replace=True)[source]#

Add a limiter to throttle requests to a specific domain.

Parameters:
  • limiter (DomainLimiter) – The DomainLimiter to add to the session.

  • replace (bool) – If True, an existing domain limiter for this domain will be replaced. If False, no changes will be made.

Return type:

None

request(method, url, *args, **kwargs)[source]#

Do a request, but raise Timeout immediately if site is known to timeout, and record sites that timeout.

Also raises errors getting the content by default.

Parameters:
  • raise_status (bool) – If True, non-success status code responses will be raised as errors (True by default)

  • disable_limiters – If True, any limiters configured for this session will be ignored for this request.

  • method (str)

  • url (str)

Return type:

Response

set_domain_delay(domain, delay)[source]#

Do not use this anymore as it is DEPRECATED. Use add_domain_limiter.

Register a minimum interval between requests to domain

Parameters:
  • domain – The domain to set the interval on

  • delay – The amount of time between requests, can be a timedelta or string like ‘3 seconds’

domain_limiters: dict[str, DomainLimiter]#
class flexget.utils.requests.TimedLimiter(domain, interval)[source]#

Bases: TokenBucketLimiter

Enforces a minimum interval between requests to a given domain.

Parameters:
  • domain (str)

  • interval (str | timedelta)

_abc_impl = <_abc._abc_data object>#
class flexget.utils.requests.TokenBucketLimiter(domain, tokens, rate, wait=True)[source]#

Bases: DomainLimiter

A token bucket rate limiter for domains.

New instances for the same domain will restore previous values.

Parameters:
_abc_impl = <_abc._abc_data object>#
property last_update: datetime#
state_cache: dict[str, StateCacheDict] = {'alpharatio.cc': {'last_update': datetime.datetime(2026, 6, 1, 19, 56, 24, 457666), 'tokens': 1}, 'api.broadcasthe.net/': {'last_update': datetime.datetime(2026, 6, 1, 19, 56, 24, 648704), 'tokens': 100}, 'api.rottentomatoes.com': {'last_update': datetime.datetime(2026, 6, 1, 19, 56, 34, 710401), 'tokens': 1}, 'appspot.com': {'last_update': datetime.datetime(2026, 6, 1, 19, 56, 20, 408327), 'tokens': 1}, 'discord.com': {'last_update': datetime.datetime(2026, 6, 1, 19, 56, 20, 121218), 'tokens': 6}, 'imdb.com': {'last_update': datetime.datetime(2026, 6, 1, 19, 56, 15, 973408), 'tokens': 1}, 'letterboxd.com': {'last_update': datetime.datetime(2026, 6, 1, 19, 56, 34, 160666), 'tokens': 1}, 'morethantv.me': {'last_update': datetime.datetime(2026, 6, 1, 19, 56, 25, 373401), 'tokens': 1}, 'ncore.pro/': {'last_update': datetime.datetime(2026, 6, 1, 19, 56, 25, 447317), 'tokens': 100}, 'npo.nl': {'last_update': datetime.datetime(2026, 6, 1, 19, 56, 34, 351027), 'tokens': 1}, 'npostart.nl': {'last_update': datetime.datetime(2026, 6, 1, 19, 56, 34, 351018), 'tokens': 1}, 'prowlapp.com': {'last_update': datetime.datetime(2026, 6, 1, 19, 56, 20, 620705), 'tokens': 1}, 'pushalot.com': {'last_update': datetime.datetime(2026, 6, 1, 19, 56, 20, 648055), 'tokens': 1}, 'pushbullet.com': {'last_update': datetime.datetime(2026, 6, 1, 19, 56, 20, 673788), 'tokens': 1}, 'pushover.net': {'last_update': datetime.datetime(2026, 6, 1, 19, 56, 20, 707040), 'tokens': 1}, 'pushsafer.com': {'last_update': datetime.datetime(2026, 6, 1, 19, 56, 20, 737846), 'tokens': 1}, 'rapidpush.net': {'last_update': datetime.datetime(2026, 6, 1, 19, 56, 20, 764966), 'tokens': 1}, 'sms.ru': {'last_update': datetime.datetime(2026, 6, 1, 19, 56, 20, 833035), 'tokens': 1}}#
property tokens: float | int#
flexget.utils.requests._wrap_urlopen(url, timeout=None)[source]#

Handle alternate schemes using urllib, wrap the response in a requests.Response.

This is not installed as an adapter in requests, since urls without network locations (e.g. file:///somewhere) will cause errors

Parameters:
  • url (str)

  • timeout (int | None)

Return type:

Response

flexget.utils.requests.get(url, **kwargs)[source]#

Send a GET request. Return Response object.

Parameters:
  • url (str) – URL for the new Request object.

  • kwargs – Optional arguments that request takes.

Return type:

Response

flexget.utils.requests.head(url, **kwargs)[source]#

Send a HEAD request. Return Response object.

Parameters:
  • url (str) – URL for the new Request object.

  • kwargs – Optional arguments that request takes.

Return type:

Response

flexget.utils.requests.is_unresponsive(url)[source]#

Check if host of given url has timed out within WAIT_TIME.

Parameters:

url (str) – The url to check

Returns:

True if the host has timed out within WAIT_TIME

Return type:

bool

flexget.utils.requests.limit_domains(url, limit_dict)[source]#

If this url matches a domain in limit_dict, run the limiter.

This is separated in to its own function so that limits can be disabled during unit tests with VCR.

Parameters:
Return type:

None

flexget.utils.requests.parse_header(header)[source]#

Parse a MIME header (such as Content-Type) into a main value and a dictionary of parameters.

Replaces function in the deprecated cgi stdlib module.

Parameters:

header (str)

Return type:

tuple[str, Mapping]

flexget.utils.requests.post(url, data=None, **kwargs)[source]#

Send a POST request. Return Response object.

Parameters:
  • url (str) – URL for the new Request object.

  • data – (optional) Dictionary or bytes to send in the body of the Request.

  • kwargs – Optional arguments that request takes.

Return type:

Response

flexget.utils.requests.request(method, url, **kwargs)[source]#
Parameters:
Return type:

Response

flexget.utils.requests.set_unresponsive(url)[source]#

Mark the host of a given url as unresponsive.

Parameters:

url (str) – The url that timed out

Return type:

None