Update whatsnew. Salt the random number seed.

This commit is contained in:
Raymond Hettinger 2010-12-08 01:13:53 +00:00
parent 10e05e17a3
commit 3fcf002994
3 changed files with 21 additions and 12 deletions

View File

@ -125,7 +125,7 @@ Example of the parser's automatically generated help::
>>> parser.parse_args('-h'.split()) >>> parser.parse_args('-h'.split())
usage: tmp_argparse_example.py [-h] -u USER usage: manage_cloud.py [-h] -u USER
{deploy,start,stop} HOSTNAME [HOSTNAME ...] {deploy,start,stop} HOSTNAME [HOSTNAME ...]
Manage servers Manage servers
@ -321,10 +321,10 @@ module::
PEP written by Barry Warsaw. PEP written by Barry Warsaw.
Email 5.1 Email
========= =====
The email package is extended to be able to parse and generate email messages The email package has been extended to parse and generate email messages
in bytes format. in bytes format.
* New functions :func:`~email.message_from_bytes` and * New functions :func:`~email.message_from_bytes` and
@ -832,6 +832,7 @@ New, Improved, and Deprecated Modules
(Contributed by Rodolpho Eckhardt and Nick Coghlan, :issue:`10220`.) (Contributed by Rodolpho Eckhardt and Nick Coghlan, :issue:`10220`.)
.. XXX: notes on new random.seed() version 2
.. XXX: Create a new section for all changes relating to context managers. .. XXX: Create a new section for all changes relating to context managers.
.. XXX: Various ConfigParser changes .. XXX: Various ConfigParser changes
.. XXX: Mention inspect.getattr_static (Michael Foord) .. XXX: Mention inspect.getattr_static (Michael Foord)
@ -902,7 +903,7 @@ New, Improved, and Deprecated Modules
platbase = "C:\Python32" platbase = "C:\Python32"
prefix = "C:\Python32" prefix = "C:\Python32"
projectbase = "C:\Python32" projectbase = "C:\Python32"
py_version = "3.2b1" py_version = "3.2"
py_version_nodot = "32" py_version_nodot = "32"
py_version_short = "3.2" py_version_short = "3.2"
srcdir = "C:\Python32" srcdir = "C:\Python32"
@ -1151,3 +1152,8 @@ require changes to your code:
* The :func:`sys.setfilesystemencoding` function was removed because * The :func:`sys.setfilesystemencoding` function was removed because
it had a flawed design. it had a flawed design.
* The :func:`random.seed` function and method now performing salting for
string seeds. To access the previous version of *seed* in order to
reproduce Python 3.1 sequences, set the *version* argument to *1*,
``random.seed(s, version=1)``.

View File

@ -43,6 +43,7 @@ from math import log as _log, exp as _exp, pi as _pi, e as _e, ceil as _ceil
from math import sqrt as _sqrt, acos as _acos, cos as _cos, sin as _sin from math import sqrt as _sqrt, acos as _acos, cos as _cos, sin as _sin
from os import urandom as _urandom from os import urandom as _urandom
import collections as _collections import collections as _collections
from hashlib import sha512 as _sha512
__all__ = ["Random","seed","random","uniform","randint","choice","sample", __all__ = ["Random","seed","random","uniform","randint","choice","sample",
"randrange","shuffle","normalvariate","lognormvariate", "randrange","shuffle","normalvariate","lognormvariate",
@ -110,9 +111,11 @@ class Random(_random.Random):
import time import time
a = int(time.time() * 256) # use fractional seconds a = int(time.time() * 256) # use fractional seconds
if version == 2 and isinstance(a, (str, bytes, bytearray)): if version == 2:
if isinstance(a, (str, bytes, bytearray)):
if isinstance(a, str): if isinstance(a, str):
a = a.encode("utf8") a = a.encode("utf8")
a += _sha512(a).digest()
a = int.from_bytes(a, 'big') a = int.from_bytes(a, 'big')
super().seed(a) super().seed(a)

View File

@ -246,8 +246,8 @@ class MersenneTwister_TestBasicOps(TestBasicOps):
'0x1.1ebb4352e4c4dp-1', '0x1.1a7422abf9c11p-1']) '0x1.1ebb4352e4c4dp-1', '0x1.1a7422abf9c11p-1'])
self.gen.seed("the quick brown fox", version=2) self.gen.seed("the quick brown fox", version=2)
self.assertEqual([self.gen.random().hex() for i in range(4)], self.assertEqual([self.gen.random().hex() for i in range(4)],
['0x1.1294009b9eda4p-2', '0x1.2ff96171b0010p-1', ['0x1.1239ddfb11b7cp-3', '0x1.b3cbb5c51b120p-4',
'0x1.459e0989bd8e0p-5', '0x1.8b5f55892ddcbp-1']) '0x1.8c4f55116b60fp-1', '0x1.63eb525174a27p-1'])
def test_setstate_first_arg(self): def test_setstate_first_arg(self):
self.assertRaises(ValueError, self.gen.setstate, (1, None, None)) self.assertRaises(ValueError, self.gen.setstate, (1, None, None))