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:
SessionSubclass of requests Session class which defines some of our own defaults, records unresponsive sites, and raises errors by default.
- 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.
- 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:
TokenBucketLimiterEnforces a minimum interval between requests to a given domain.
- _abc_impl = <_abc._abc_data object>#
- class flexget.utils.requests.TokenBucketLimiter(domain, tokens, rate, wait=True)[source]#
Bases:
DomainLimiterA token bucket rate limiter for domains.
New instances for the same domain will restore previous values.
- _abc_impl = <_abc._abc_data object>#
- 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}}#
- 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
- flexget.utils.requests.is_unresponsive(url)[source]#
Check if host of given url has timed out within WAIT_TIME.
- 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:
url (str)
limit_dict (dict[str, DomainLimiter])
- 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.
- flexget.utils.requests.post(url, data=None, **kwargs)[source]#
Send a POST request. Return
Responseobject.