[Python-Dev] how about adding ping's uuid module to the standard lib ?

Phillip J. Eby pje at telecommunity.com
Tue Mar 7 17:01:00 CET 2006


At 06:29 AM 3/7/2006 +0100, Fredrik Lundh wrote:
>see subject and http://python.org/sf/1368955
>
>comments ?

Why can't the UUIDs be immutable, so they can be dictionary keys?  Also, it 
would be nice if you could just call UUID() to create a generic UUID in a 
platform-appropriate way.  PEAK's uuid module does this such that if 
win32all is present, you get a Windows GUID, or if you have a FreeBSD 5+ or 
NetBSD 2+ kernel you use the local platform uuidgen API.  See e.g.:

http://svn.eby-sarna.com/PEAK/src/peak/util/_uuidgen.c?view=markup

and:

http://svn.eby-sarna.com/PEAK/src/peak/util/uuid.py?view=markup

for details.  This implementation also has unit tests:

http://svn.eby-sarna.com/PEAK/src/peak/util/tests/uuid.py?view=markup

and has been in production use for several years now.

On the other hand, Ping's implementation is a lot simpler than ours; ours 
does a lot of stuff to support e.g. /dev/urandom or fallback seeding, 
whereas Python 2.4 offers os.urandom.  We also use different fallback 
algorithms for getting the MAC address, including a fallback to a 
randomly-generated address if a system one could not be obtained.  Ping's 
version will fail if there is no way to get the address (e.g. on Windows 
9X, which has no ipconfig.exe), and does not cache the address for repeated 
uses, making its generation of verion-1 UUIDs *very* expensive.

I like the idea of having RFC-compliant UUIDs in the stdlib, but I really 
want immutable ones, preferably without {} in their standard string 
representation.  And efficient use of platform-local UUID generation APIs 
would also be preferable.  (Note that using the Windows C API for UUIDs 
would make it unnecessary to execute a separate program in order to get 
version 1 UUIDs, and the same is true for the BSD variants with a UUID API.)

(In addition to the PEAK UUID implementation, OSAF's Chandler also has a 
compliant UUID implementation that's written entirely in C, but I haven't 
played with it much.  I don't know whether it supports using platform APIs 
for generation, but it does implement hashable, immutable UUID objects.)



More information about the Python-Dev mailing list