Mercurial > p > roundup > code
view roundup/anypy/random_.py @ 8408:e882a5d52ae5
refactor: move RateLimitExceeded to roundup.cgi.exceptions
RateLimitExceeded is an HTTP exception that raises code 429. Move it
to roundup.cgi.exceptions where all the other exceptions that result
in http status codes are located. Also make it inherit from
HTTPException since it is one.
Also add docstrings for all HTTP exceptions and order HTTPExceptions
by status code.
BREAKING CHANGE: if somebody is importing RateLimitExceeded they will
need to change their import. I consider it unlikely anybody is using
RateLimitExceeded. Detectors and extensions are unlikely to raise
RateLimitExceeded. So I am leaving it out of the upgrading doc. Just
doc in change log.
| author | John Rouillard <rouilj@ieee.org> |
|---|---|
| date | Sun, 10 Aug 2025 21:27:06 -0400 |
| parents | f002747b6773 |
| children |
line wrap: on
line source
# ruff: noqa: ARG001 try: from secrets import choice, randbelow, token_bytes def seed(v=None): pass is_weak = False except ImportError: import os as _os import random as _random # prefer to use SystemRandom if it is available if hasattr(_random, 'SystemRandom'): def seed(v=None): pass _r = _random.SystemRandom() is_weak = False else: # don't completely throw away the existing state, but add some # more random state to the existing state def seed(v=None): # ruff: noqa: PLC0415 import os import time _r.seed((_r.getstate(), v, hasattr(os, 'getpid') and os.getpid(), time.time())) # create our own instance so we don't mess with the global # random number generator _r = _random.Random() seed() is_weak = True choice = _r.choice def randbelow(i): return _r.randint(0, i - 1) if hasattr(_os, 'urandom'): def token_bytes(size): return _os.urandom(size) else: def token_bytes(size): _bchr = chr if str is bytes else lambda x: bytes((x,)) return b''.join([_bchr(_r.getrandbits(8)) for i in range(size)])
