|
1 |
|
2 :mod:`uuid` --- UUID objects according to RFC 4122 |
|
3 ================================================== |
|
4 |
|
5 .. module:: uuid |
|
6 :synopsis: UUID objects (universally unique identifiers) according to RFC 4122 |
|
7 .. moduleauthor:: Ka-Ping Yee <ping@zesty.ca> |
|
8 .. sectionauthor:: George Yoshida <quiver@users.sourceforge.net> |
|
9 |
|
10 |
|
11 .. versionadded:: 2.5 |
|
12 |
|
13 This module provides immutable :class:`UUID` objects (the :class:`UUID` class) |
|
14 and the functions :func:`uuid1`, :func:`uuid3`, :func:`uuid4`, :func:`uuid5` for |
|
15 generating version 1, 3, 4, and 5 UUIDs as specified in :rfc:`4122`. |
|
16 |
|
17 If all you want is a unique ID, you should probably call :func:`uuid1` or |
|
18 :func:`uuid4`. Note that :func:`uuid1` may compromise privacy since it creates |
|
19 a UUID containing the computer's network address. :func:`uuid4` creates a |
|
20 random UUID. |
|
21 |
|
22 |
|
23 .. class:: UUID([hex[, bytes[, bytes_le[, fields[, int[, version]]]]]]) |
|
24 |
|
25 Create a UUID from either a string of 32 hexadecimal digits, a string of 16 |
|
26 bytes as the *bytes* argument, a string of 16 bytes in little-endian order as |
|
27 the *bytes_le* argument, a tuple of six integers (32-bit *time_low*, 16-bit |
|
28 *time_mid*, 16-bit *time_hi_version*, 8-bit *clock_seq_hi_variant*, 8-bit |
|
29 *clock_seq_low*, 48-bit *node*) as the *fields* argument, or a single 128-bit |
|
30 integer as the *int* argument. When a string of hex digits is given, curly |
|
31 braces, hyphens, and a URN prefix are all optional. For example, these |
|
32 expressions all yield the same UUID:: |
|
33 |
|
34 UUID('{12345678-1234-5678-1234-567812345678}') |
|
35 UUID('12345678123456781234567812345678') |
|
36 UUID('urn:uuid:12345678-1234-5678-1234-567812345678') |
|
37 UUID(bytes='\x12\x34\x56\x78'*4) |
|
38 UUID(bytes_le='\x78\x56\x34\x12\x34\x12\x78\x56' + |
|
39 '\x12\x34\x56\x78\x12\x34\x56\x78') |
|
40 UUID(fields=(0x12345678, 0x1234, 0x5678, 0x12, 0x34, 0x567812345678)) |
|
41 UUID(int=0x12345678123456781234567812345678) |
|
42 |
|
43 Exactly one of *hex*, *bytes*, *bytes_le*, *fields*, or *int* must be given. |
|
44 The *version* argument is optional; if given, the resulting UUID will have its |
|
45 variant and version number set according to RFC 4122, overriding bits in the |
|
46 given *hex*, *bytes*, *bytes_le*, *fields*, or *int*. |
|
47 |
|
48 :class:`UUID` instances have these read-only attributes: |
|
49 |
|
50 |
|
51 .. attribute:: UUID.bytes |
|
52 |
|
53 The UUID as a 16-byte string (containing the six integer fields in big-endian |
|
54 byte order). |
|
55 |
|
56 |
|
57 .. attribute:: UUID.bytes_le |
|
58 |
|
59 The UUID as a 16-byte string (with *time_low*, *time_mid*, and *time_hi_version* |
|
60 in little-endian byte order). |
|
61 |
|
62 |
|
63 .. attribute:: UUID.fields |
|
64 |
|
65 A tuple of the six integer fields of the UUID, which are also available as six |
|
66 individual attributes and two derived attributes: |
|
67 |
|
68 +------------------------------+-------------------------------+ |
|
69 | Field | Meaning | |
|
70 +==============================+===============================+ |
|
71 | :attr:`time_low` | the first 32 bits of the UUID | |
|
72 +------------------------------+-------------------------------+ |
|
73 | :attr:`time_mid` | the next 16 bits of the UUID | |
|
74 +------------------------------+-------------------------------+ |
|
75 | :attr:`time_hi_version` | the next 16 bits of the UUID | |
|
76 +------------------------------+-------------------------------+ |
|
77 | :attr:`clock_seq_hi_variant` | the next 8 bits of the UUID | |
|
78 +------------------------------+-------------------------------+ |
|
79 | :attr:`clock_seq_low` | the next 8 bits of the UUID | |
|
80 +------------------------------+-------------------------------+ |
|
81 | :attr:`node` | the last 48 bits of the UUID | |
|
82 +------------------------------+-------------------------------+ |
|
83 | :attr:`time` | the 60-bit timestamp | |
|
84 +------------------------------+-------------------------------+ |
|
85 | :attr:`clock_seq` | the 14-bit sequence number | |
|
86 +------------------------------+-------------------------------+ |
|
87 |
|
88 |
|
89 .. attribute:: UUID.hex |
|
90 |
|
91 The UUID as a 32-character hexadecimal string. |
|
92 |
|
93 |
|
94 .. attribute:: UUID.int |
|
95 |
|
96 The UUID as a 128-bit integer. |
|
97 |
|
98 |
|
99 .. attribute:: UUID.urn |
|
100 |
|
101 The UUID as a URN as specified in RFC 4122. |
|
102 |
|
103 |
|
104 .. attribute:: UUID.variant |
|
105 |
|
106 The UUID variant, which determines the internal layout of the UUID. This will be |
|
107 one of the integer constants :const:`RESERVED_NCS`, :const:`RFC_4122`, |
|
108 :const:`RESERVED_MICROSOFT`, or :const:`RESERVED_FUTURE`. |
|
109 |
|
110 |
|
111 .. attribute:: UUID.version |
|
112 |
|
113 The UUID version number (1 through 5, meaningful only when the variant is |
|
114 :const:`RFC_4122`). |
|
115 |
|
116 The :mod:`uuid` module defines the following functions: |
|
117 |
|
118 |
|
119 .. function:: getnode() |
|
120 |
|
121 Get the hardware address as a 48-bit positive integer. The first time this |
|
122 runs, it may launch a separate program, which could be quite slow. If all |
|
123 attempts to obtain the hardware address fail, we choose a random 48-bit number |
|
124 with its eighth bit set to 1 as recommended in RFC 4122. "Hardware address" |
|
125 means the MAC address of a network interface, and on a machine with multiple |
|
126 network interfaces the MAC address of any one of them may be returned. |
|
127 |
|
128 .. index:: single: getnode |
|
129 |
|
130 |
|
131 .. function:: uuid1([node[, clock_seq]]) |
|
132 |
|
133 Generate a UUID from a host ID, sequence number, and the current time. If *node* |
|
134 is not given, :func:`getnode` is used to obtain the hardware address. If |
|
135 *clock_seq* is given, it is used as the sequence number; otherwise a random |
|
136 14-bit sequence number is chosen. |
|
137 |
|
138 .. index:: single: uuid1 |
|
139 |
|
140 |
|
141 .. function:: uuid3(namespace, name) |
|
142 |
|
143 Generate a UUID based on the MD5 hash of a namespace identifier (which is a |
|
144 UUID) and a name (which is a string). |
|
145 |
|
146 .. index:: single: uuid3 |
|
147 |
|
148 |
|
149 .. function:: uuid4() |
|
150 |
|
151 Generate a random UUID. |
|
152 |
|
153 .. index:: single: uuid4 |
|
154 |
|
155 |
|
156 .. function:: uuid5(namespace, name) |
|
157 |
|
158 Generate a UUID based on the SHA-1 hash of a namespace identifier (which is a |
|
159 UUID) and a name (which is a string). |
|
160 |
|
161 .. index:: single: uuid5 |
|
162 |
|
163 The :mod:`uuid` module defines the following namespace identifiers for use with |
|
164 :func:`uuid3` or :func:`uuid5`. |
|
165 |
|
166 |
|
167 .. data:: NAMESPACE_DNS |
|
168 |
|
169 When this namespace is specified, the *name* string is a fully-qualified domain |
|
170 name. |
|
171 |
|
172 |
|
173 .. data:: NAMESPACE_URL |
|
174 |
|
175 When this namespace is specified, the *name* string is a URL. |
|
176 |
|
177 |
|
178 .. data:: NAMESPACE_OID |
|
179 |
|
180 When this namespace is specified, the *name* string is an ISO OID. |
|
181 |
|
182 |
|
183 .. data:: NAMESPACE_X500 |
|
184 |
|
185 When this namespace is specified, the *name* string is an X.500 DN in DER or a |
|
186 text output format. |
|
187 |
|
188 The :mod:`uuid` module defines the following constants for the possible values |
|
189 of the :attr:`variant` attribute: |
|
190 |
|
191 |
|
192 .. data:: RESERVED_NCS |
|
193 |
|
194 Reserved for NCS compatibility. |
|
195 |
|
196 |
|
197 .. data:: RFC_4122 |
|
198 |
|
199 Specifies the UUID layout given in :rfc:`4122`. |
|
200 |
|
201 |
|
202 .. data:: RESERVED_MICROSOFT |
|
203 |
|
204 Reserved for Microsoft compatibility. |
|
205 |
|
206 |
|
207 .. data:: RESERVED_FUTURE |
|
208 |
|
209 Reserved for future definition. |
|
210 |
|
211 |
|
212 .. seealso:: |
|
213 |
|
214 :rfc:`4122` - A Universally Unique IDentifier (UUID) URN Namespace |
|
215 This specification defines a Uniform Resource Name namespace for UUIDs, the |
|
216 internal format of UUIDs, and methods of generating UUIDs. |
|
217 |
|
218 |
|
219 .. _uuid-example: |
|
220 |
|
221 Example |
|
222 ------- |
|
223 |
|
224 Here are some examples of typical usage of the :mod:`uuid` module:: |
|
225 |
|
226 >>> import uuid |
|
227 |
|
228 # make a UUID based on the host ID and current time |
|
229 >>> uuid.uuid1() |
|
230 UUID('a8098c1a-f86e-11da-bd1a-00112444be1e') |
|
231 |
|
232 # make a UUID using an MD5 hash of a namespace UUID and a name |
|
233 >>> uuid.uuid3(uuid.NAMESPACE_DNS, 'python.org') |
|
234 UUID('6fa459ea-ee8a-3ca4-894e-db77e160355e') |
|
235 |
|
236 # make a random UUID |
|
237 >>> uuid.uuid4() |
|
238 UUID('16fd2706-8baf-433b-82eb-8c7fada847da') |
|
239 |
|
240 # make a UUID using a SHA-1 hash of a namespace UUID and a name |
|
241 >>> uuid.uuid5(uuid.NAMESPACE_DNS, 'python.org') |
|
242 UUID('886313e1-3b8a-5372-9b90-0c9aee199e5d') |
|
243 |
|
244 # make a UUID from a string of hex digits (braces and hyphens ignored) |
|
245 >>> x = uuid.UUID('{00010203-0405-0607-0809-0a0b0c0d0e0f}') |
|
246 |
|
247 # convert a UUID to a string of hex digits in standard form |
|
248 >>> str(x) |
|
249 '00010203-0405-0607-0809-0a0b0c0d0e0f' |
|
250 |
|
251 # get the raw 16 bytes of the UUID |
|
252 >>> x.bytes |
|
253 '\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f' |
|
254 |
|
255 # make a UUID from a 16-byte string |
|
256 >>> uuid.UUID(bytes=x.bytes) |
|
257 UUID('00010203-0405-0607-0809-0a0b0c0d0e0f') |
|
258 |