Skip to main content

Ratelimit components

Project description

CrowdStrike cs.ratelimit

cs.ratelimit

This provides a threadsafe configurable rate limiter to a Python callable.

It's easy to create a rate limited function

>>> from datetime import datetime, timedelta
>>> from cs import ratelimit
>>> @ratelimit.ratelimited(max_count=1, interval=timedelta(seconds=1), block=False)
... def my_func():
...     pass
>>> my_func()
>>> try:
...     my_func()
... except ratelimit.RateLimitExceeded:
...     print(u"Too fast!")
Too fast!

We can just as easily make it a blocking rate limiter

>>> @ratelimit.ratelimited(max_count=1, interval=timedelta(seconds=1), block=True)
... def my_func():
...     pass
>>> my_func()
>>> my_func() # blocks, doesn't raise

It's also easy to create a class-level rate limited method

>>> class MyClass1:
...     @ratelimit.ratelimitedmethod(max_count=1, interval=timedelta(seconds=1), block=False)
...     def my_method(self):
...         pass
>>> instance1 = MyClass1()
>>> instance2 = MyClass1()
>>> instance1.my_method()
>>> try:
...     instance2.my_method()
... except ratelimit.RateLimitExceeded:
...     print(u"Too fast!")
Too fast!

A more advanced use case is per-instance limiters

>>> from operator import attrgetter
>>> class MyClass2:
...     def __init__(self):
...         self.rl = ratelimit.RateLimitProperties(max_count=1,
...                                       interval=timedelta(seconds=1),
...                                       block=False)
...     @ratelimit.ratelimitedmethod(attrgetter('rl'))
...     def my_method(self):
...         pass
>>> instance1 = MyClass2()
>>> instance2 = MyClass2()

The rate limiters in these instances are independent
>>> instance1.my_method()
>>> instance2.my_method()
>>> try:
...     instance1.my_method()
... except ratelimit.RateLimitExceeded:
...     print(u"Too fast!")
Too fast!

They can also be updated at any time

>>> with instance2.rl.rlock: #needed in threaded environments
...     instance2.rl.max_count = 2
>>> instance2.my_method()


WE STOP BREACHES

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

cs.ratelimit-1.3.1.tar.gz (17.8 kB view details)

Uploaded Source

Built Distribution

cs.ratelimit-1.3.1-py3-none-any.whl (12.9 kB view details)

Uploaded Python 3

File details

Details for the file cs.ratelimit-1.3.1.tar.gz.

File metadata

  • Download URL: cs.ratelimit-1.3.1.tar.gz
  • Upload date:
  • Size: 17.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.5

File hashes

Hashes for cs.ratelimit-1.3.1.tar.gz
Algorithm Hash digest
SHA256 4403909c5d0ae4ef458f2865f5699f89b05d6a6e253008356f6975e0149a69f0
MD5 96dc5db59d0c425a05d588b805a99a75
BLAKE2b-256 1b4b855dcecdbc10fce1a9e8c4f9f393f8265167c719aad70a647712581f47c1

See more details on using hashes here.

File details

Details for the file cs.ratelimit-1.3.1-py3-none-any.whl.

File metadata

  • Download URL: cs.ratelimit-1.3.1-py3-none-any.whl
  • Upload date:
  • Size: 12.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.5

File hashes

Hashes for cs.ratelimit-1.3.1-py3-none-any.whl
Algorithm Hash digest
SHA256 6f021744ee9bcc8a57f61b77808d0752d1f1622f657fc0adab422d64625a5ae4
MD5 60d0ee021323076cb1a50e5677a4b82c
BLAKE2b-256 16954ed2bdec7ff63af529d61f1d6b1126f0fa3bb46730bc1569314734428d05

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