summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Doc/lib/libuuid.tex27
-rw-r--r--Lib/test/test_uuid.py16
-rw-r--r--Lib/uuid.py15
3 files changed, 38 insertions, 20 deletions
diff --git a/Doc/lib/libuuid.tex b/Doc/lib/libuuid.tex
index e2b429c..a9d5295 100644
--- a/Doc/lib/libuuid.tex
+++ b/Doc/lib/libuuid.tex
@@ -32,7 +32,7 @@ fields\optional{, int\optional{, version}}}}}}
Create a UUID from either a string of 32 hexadecimal digits,
a string of 16 bytes as the \var{bytes} argument, a tuple of six
-integers (32-bit \var{time_low}, 16-bit \var{time_mid},
+integers (32-bit \var{time_low}, 16-bit \var{time_mid},
16-bit \var{time_hi_version},
8-bit \var{clock_seq_hi_variant}, 8-bit \var{clock_seq_low}, 48-bit \var{node})
as the \var{fields} argument, or a single 128-bit integer as the \var{int}
@@ -109,10 +109,13 @@ when the variant is \constant{RFC_4122}).
The \module{uuid} module defines the following functions
\begin{funcdesc}{getnode}{}
-Get the hardware address as a 48-bit integer. The first time this runs,
-it may launch a separate program, which could be quite slow. If all
+Get the hardware address as a 48-bit positive integer. The first time this
+runs, it may launch a separate program, which could be quite slow. If all
attempts to obtain the hardware address fail, we choose a random 48-bit
-number with its eighth bit set to 1 as recommended in RFC 4122.
+number with its eighth bit set to 1 as recommended in RFC 4122. "Hardware
+address" means the MAC address of a network interface, and on a machine
+with multiple network interfaces the MAC address of any one of them may
+be returned.
\end{funcdesc}
\index{getnode}
@@ -126,10 +129,10 @@ otherwise a random 14-bit sequence number is chosen.
\index{uuid1}
\begin{funcdesc}{uuid3}{namespace, name}
-Generate a UUID based upon a MD5 hash of the \var{name} string value
-drawn from a specified namespace. \var{namespace}
+Generate a UUID based upon a MD5 hash of the \var{name} string value
+drawn from a specified namespace. \var{namespace}
must be one of \constant{NAMESPACE_DNS},
-\constant{NAMESPACE_URL}, \constant{NAMESPACE_OID},
+\constant{NAMESPACE_URL}, \constant{NAMESPACE_OID},
or \constant{NAMESPACE_X500}.
\end{funcdesc}
\index{uuid3}
@@ -140,15 +143,15 @@ Generate a random UUID.
\index{uuid4}
\begin{funcdesc}{uuid5}{namespace, name}
-Generate a UUID based upon a SHA-1 hash of the \var{name} string value
-drawn from a specified namespace. \var{namespace}
+Generate a UUID based upon a SHA-1 hash of the \var{name} string value
+drawn from a specified namespace. \var{namespace}
must be one of \constant{NAMESPACE_DNS},
-\constant{NAMESPACE_URL}, \constant{NAMESPACE_OID},
+\constant{NAMESPACE_URL}, \constant{NAMESPACE_OID},
or \constant{NAMESPACE_X500}.
\end{funcdesc}
\index{uuid5}
-The \module{uuid} module defines the following namespace constants
+The \module{uuid} module defines the following namespace constants
for use with \function{uuid3()} or \function{uuid5()}.
\begin{datadesc}{NAMESPACE_DNS}
@@ -167,7 +170,7 @@ ISO OID namespace UUID.
X.500 DN namespace UUID.
\end{datadesc}
-The \module{uuid} module defines the following constants
+The \module{uuid} module defines the following constants
for the possible values of the \member{variant} attribute:
\begin{datadesc}{RESERVED_NCS}
diff --git a/Lib/test/test_uuid.py b/Lib/test/test_uuid.py
index 3842bb9..36266e1 100644
--- a/Lib/test/test_uuid.py
+++ b/Lib/test/test_uuid.py
@@ -284,7 +284,11 @@ class TestUUID(TestCase):
msg = "different sources disagree on node:\n"
for s, n in TestUUID.source2node.iteritems():
msg += " from source %r, node was %012x\n" % (s, n)
- self.fail(msg)
+ # There's actually no reason to expect the MAC addresses
+ # to agree across various methods -- e.g., a box may have
+ # multiple network interfaces, and different ways of getting
+ # a MAC address may favor different HW.
+ ##self.fail(msg)
else:
TestUUID.last_node = node
@@ -309,7 +313,7 @@ class TestUUID(TestCase):
def test_random_getnode(self):
node = uuid._random_getnode()
self.assert_(0 <= node)
- self.assert_(node < 1<<48L)
+ self.assert_(node < (1L <<48))
def test_unixdll_getnode(self):
import os
@@ -322,10 +326,14 @@ class TestUUID(TestCase):
self.check_node(uuid._windll_getnode(), 'windll')
def test_getnode(self):
- self.check_node(uuid.getnode(), "getnode1")
+ node1 = uuid.getnode()
+ self.check_node(node1, "getnode1")
# Test it again to ensure consistency.
- self.check_node(uuid.getnode(), "getnode2")
+ node2 = uuid.getnode()
+ self.check_node(node2, "getnode2")
+
+ self.assertEqual(node1, node2)
def test_uuid1(self):
equal = self.assertEqual
diff --git a/Lib/uuid.py b/Lib/uuid.py
index 11e0da3..dabe22e 100644
--- a/Lib/uuid.py
+++ b/Lib/uuid.py
@@ -362,6 +362,10 @@ try:
# hardware address. On Windows 2000 and later, UuidCreate makes a
# random UUID and UuidCreateSequential gives a UUID containing the
# hardware address. These routines are provided by the RPC runtime.
+ # NOTE: at least on Tim's WinXP Pro SP2 desktop box, while the last
+ # 6 bytes returned by UuidCreateSequential are fixed, they don't appear
+ # to bear any relationship to the MAC address of any network device
+ # on the box.
try:
lib = ctypes.windll.rpcrt4
except:
@@ -389,10 +393,13 @@ def _random_getnode():
_node = None
def getnode():
- """Get the hardware address as a 48-bit integer. The first time this
- runs, it may launch a separate program, which could be quite slow. If
- all attempts to obtain the hardware address fail, we choose a random
- 48-bit number with its eighth bit set to 1 as recommended in RFC 4122."""
+ """Get the hardware address as a 48-bit positive integer.
+
+ The first time this runs, it may launch a separate program, which could
+ be quite slow. If all attempts to obtain the hardware address fail, we
+ choose a random 48-bit number with its eighth bit set to 1 as recommended
+ in RFC 4122.
+ """
global _node
if _node is not None: