diff options
-rw-r--r-- | Doc/lib/libuuid.tex | 27 | ||||
-rw-r--r-- | Lib/test/test_uuid.py | 16 | ||||
-rw-r--r-- | Lib/uuid.py | 15 |
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: |