Mercurial > p > roundup > code
annotate roundup/anypy/random_.py @ 7178:db06d4aeb978
unshadow stdlib token from roundup's token.
This bites me every now and again when running pytest and pdb. Some
submodules want to load the stdlib python and end up getting roundup's
python and thing break with N_TOKENS not defined etc.
So rename token.py to token_r.py (token_r(oundup)... hey naming things
is hard) an change code as needed.
| author | John Rouillard <rouilj@ieee.org> |
|---|---|
| date | Sun, 26 Feb 2023 12:00:35 -0500 |
| parents | adf54478cdaf |
| children | 07ce4e4110f5 |
| rev | line source |
|---|---|
|
5488
52cb53eedf77
reworked random number use
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff
changeset
|
1 try: |
|
52cb53eedf77
reworked random number use
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff
changeset
|
2 from secrets import choice, randbelow, token_bytes |
|
6029
adf54478cdaf
flake8 cleanup: whitspeace format changes.
John Rouillard <rouilj@ieee.org>
parents:
5488
diff
changeset
|
3 |
|
adf54478cdaf
flake8 cleanup: whitspeace format changes.
John Rouillard <rouilj@ieee.org>
parents:
5488
diff
changeset
|
4 def seed(v=None): |
|
5488
52cb53eedf77
reworked random number use
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff
changeset
|
5 pass |
|
52cb53eedf77
reworked random number use
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff
changeset
|
6 |
|
52cb53eedf77
reworked random number use
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff
changeset
|
7 is_weak = False |
|
52cb53eedf77
reworked random number use
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff
changeset
|
8 except ImportError: |
|
52cb53eedf77
reworked random number use
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff
changeset
|
9 import os as _os |
|
52cb53eedf77
reworked random number use
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff
changeset
|
10 import random as _random |
|
52cb53eedf77
reworked random number use
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff
changeset
|
11 |
|
52cb53eedf77
reworked random number use
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff
changeset
|
12 # prefer to use SystemRandom if it is available |
|
52cb53eedf77
reworked random number use
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff
changeset
|
13 if hasattr(_random, 'SystemRandom'): |
|
6029
adf54478cdaf
flake8 cleanup: whitspeace format changes.
John Rouillard <rouilj@ieee.org>
parents:
5488
diff
changeset
|
14 def seed(v=None): |
|
5488
52cb53eedf77
reworked random number use
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff
changeset
|
15 pass |
|
52cb53eedf77
reworked random number use
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff
changeset
|
16 |
|
52cb53eedf77
reworked random number use
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff
changeset
|
17 _r = _random.SystemRandom() |
|
52cb53eedf77
reworked random number use
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff
changeset
|
18 is_weak = False |
|
52cb53eedf77
reworked random number use
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff
changeset
|
19 else: |
|
52cb53eedf77
reworked random number use
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff
changeset
|
20 # don't completely throw away the existing state, but add some |
|
52cb53eedf77
reworked random number use
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff
changeset
|
21 # more random state to the existing state |
|
6029
adf54478cdaf
flake8 cleanup: whitspeace format changes.
John Rouillard <rouilj@ieee.org>
parents:
5488
diff
changeset
|
22 def seed(v=None): |
|
5488
52cb53eedf77
reworked random number use
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff
changeset
|
23 import os, time |
|
52cb53eedf77
reworked random number use
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff
changeset
|
24 _r.seed((_r.getstate(), |
|
52cb53eedf77
reworked random number use
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff
changeset
|
25 v, |
|
52cb53eedf77
reworked random number use
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff
changeset
|
26 hasattr(os, 'getpid') and os.getpid(), |
|
52cb53eedf77
reworked random number use
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff
changeset
|
27 time.time())) |
|
52cb53eedf77
reworked random number use
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff
changeset
|
28 |
|
52cb53eedf77
reworked random number use
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff
changeset
|
29 # create our own instance so we don't mess with the global |
|
52cb53eedf77
reworked random number use
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff
changeset
|
30 # random number generator |
|
52cb53eedf77
reworked random number use
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff
changeset
|
31 _r = _random.Random() |
|
52cb53eedf77
reworked random number use
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff
changeset
|
32 seed() |
|
52cb53eedf77
reworked random number use
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff
changeset
|
33 is_weak = True |
|
52cb53eedf77
reworked random number use
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff
changeset
|
34 |
|
52cb53eedf77
reworked random number use
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff
changeset
|
35 choice = _r.choice |
|
52cb53eedf77
reworked random number use
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff
changeset
|
36 |
|
52cb53eedf77
reworked random number use
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff
changeset
|
37 def randbelow(i): |
|
52cb53eedf77
reworked random number use
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff
changeset
|
38 return _r.randint(0, i - 1) |
|
52cb53eedf77
reworked random number use
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff
changeset
|
39 |
|
52cb53eedf77
reworked random number use
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff
changeset
|
40 if hasattr(_os, 'urandom'): |
|
52cb53eedf77
reworked random number use
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff
changeset
|
41 def token_bytes(l): |
|
52cb53eedf77
reworked random number use
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff
changeset
|
42 return _os.urandom(l) |
|
52cb53eedf77
reworked random number use
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff
changeset
|
43 else: |
|
52cb53eedf77
reworked random number use
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff
changeset
|
44 def token_bytes(l): |
|
52cb53eedf77
reworked random number use
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff
changeset
|
45 _bchr = chr if str == bytes else lambda x: bytes((x,)) |
|
52cb53eedf77
reworked random number use
Christof Meerwald <cmeerw@cmeerw.org>
parents:
diff
changeset
|
46 return b''.join([_bchr(_r.getrandbits(8)) for i in range(l)]) |
