[Python-checkins] r87124 - in python/branches/py3k: Doc/whatsnew/3.2.rst Lib/random.py Lib/test/test_random.py

raymond.hettinger python-checkins at python.org
Wed Dec 8 02:13:53 CET 2010


Author: raymond.hettinger
Date: Wed Dec  8 02:13:53 2010
New Revision: 87124

Log:
Update whatsnew.  Salt the random number seed.

Modified:
   python/branches/py3k/Doc/whatsnew/3.2.rst
   python/branches/py3k/Lib/random.py
   python/branches/py3k/Lib/test/test_random.py

Modified: python/branches/py3k/Doc/whatsnew/3.2.rst
==============================================================================
--- python/branches/py3k/Doc/whatsnew/3.2.rst	(original)
+++ python/branches/py3k/Doc/whatsnew/3.2.rst	Wed Dec  8 02:13:53 2010
@@ -125,8 +125,8 @@
 
     >>> parser.parse_args('-h'.split())
 
-    usage: tmp_argparse_example.py [-h] -u USER
-                                   {deploy,start,stop} HOSTNAME [HOSTNAME ...]
+    usage: manage_cloud.py [-h] -u USER
+                           {deploy,start,stop} HOSTNAME [HOSTNAME ...]
 
     Manage servers
 
@@ -321,10 +321,10 @@
       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.
 
 * New functions :func:`~email.message_from_bytes` and
@@ -832,6 +832,7 @@
 
   (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: Various ConfigParser changes
 .. XXX: Mention inspect.getattr_static (Michael Foord)
@@ -902,7 +903,7 @@
             platbase = "C:\Python32"
             prefix = "C:\Python32"
             projectbase = "C:\Python32"
-            py_version = "3.2b1"
+            py_version = "3.2"
             py_version_nodot = "32"
             py_version_short = "3.2"
             srcdir = "C:\Python32"
@@ -1151,3 +1152,8 @@
 
  * The :func:`sys.setfilesystemencoding` function was removed because
    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)``.

Modified: python/branches/py3k/Lib/random.py
==============================================================================
--- python/branches/py3k/Lib/random.py	(original)
+++ python/branches/py3k/Lib/random.py	Wed Dec  8 02:13:53 2010
@@ -43,6 +43,7 @@
 from math import sqrt as _sqrt, acos as _acos, cos as _cos, sin as _sin
 from os import urandom as _urandom
 import collections as _collections
+from hashlib import sha512 as _sha512
 
 __all__ = ["Random","seed","random","uniform","randint","choice","sample",
            "randrange","shuffle","normalvariate","lognormvariate",
@@ -110,10 +111,12 @@
                 import time
                 a = int(time.time() * 256) # use fractional seconds
 
-        if version == 2 and isinstance(a, (str, bytes, bytearray)):
-            if isinstance(a, str):
-                a = a.encode("utf8")
-            a = int.from_bytes(a, 'big')
+        if version == 2:
+            if isinstance(a, (str, bytes, bytearray)):
+                if isinstance(a, str):
+                    a = a.encode("utf8")
+                a += _sha512(a).digest()
+                a = int.from_bytes(a, 'big')
 
         super().seed(a)
         self.gauss_next = None

Modified: python/branches/py3k/Lib/test/test_random.py
==============================================================================
--- python/branches/py3k/Lib/test/test_random.py	(original)
+++ python/branches/py3k/Lib/test/test_random.py	Wed Dec  8 02:13:53 2010
@@ -246,8 +246,8 @@
              '0x1.1ebb4352e4c4dp-1', '0x1.1a7422abf9c11p-1'])
         self.gen.seed("the quick brown fox", version=2)
         self.assertEqual([self.gen.random().hex() for i in range(4)],
-            ['0x1.1294009b9eda4p-2', '0x1.2ff96171b0010p-1',
-             '0x1.459e0989bd8e0p-5', '0x1.8b5f55892ddcbp-1'])
+            ['0x1.1239ddfb11b7cp-3', '0x1.b3cbb5c51b120p-4',
+             '0x1.8c4f55116b60fp-1', '0x1.63eb525174a27p-1'])
 
     def test_setstate_first_arg(self):
         self.assertRaises(ValueError, self.gen.setstate, (1, None, None))


More information about the Python-checkins mailing list