uuid — UUID объектов в соответствии с RFC 4122

Источник: Lib/uuid.py


Этот модуль предоставляет неизменяемые объекты UUID (класс UUID) и функции uuid1(), uuid3(), uuid4(), uuid5() для генерации UUID версий 1, 3, 4 и 5, как указано в RFC 4122.

Если вам нужен только уникальный идентификатор, то лучше вызвать uuid1() или uuid4(). Обратите внимание, что uuid1() может нарушить конфиденциальность, поскольку создает UUID, содержащий сетевой адрес компьютера. uuid4() создает случайный UUID.

В зависимости от поддержки базовой платформы, uuid1() может возвращать или не возвращать «безопасный» UUID. Безопасный UUID - это тот, который генерируется с использованием методов синхронизации, гарантирующих, что два процесса не смогут получить один и тот же UUID. Все экземпляры UUID имеют атрибут is_safe, который передает любую информацию о безопасности UUID, используя это перечисление:

class uuid.SafeUUID

Added in version 3.7.

safe

UUID был сгенерирован платформой безопасным для многопроцессорной обработки способом.

unsafe

UUID не был сгенерирован безопасным для многопроцессорной обработки способом.

unknown

Платформа не предоставляет информации о том, был ли UUID сгенерирован безопасно или нет.

class uuid.UUID(hex=None, bytes=None, bytes_le=None, fields=None, int=None, version=None, *, is_safe=SafeUUID.unknown)

Создайте UUID либо из строки из 32 шестнадцатеричных цифр, либо из строки из 16 байт в старшем порядке в качестве аргумента bytes, либо из строки из 16 байт в младшем порядке в качестве аргумента bytes_le, кортеж из шести целых чисел (32-битное time_low, 16-битное time_mid, 16-битное time_hi_version, 8-битное clock_seq_hi_variant, 8-битное clock_seq_low, 48-битное node) в качестве аргумента fields, или одно 128-битное целое число в качестве аргумента int. Если задана строка шестнадцатеричных цифр, фигурные скобки, дефисы и префикс URN необязательны. Например, все эти выражения дают один и тот же UUID:

UUID('{12345678-1234-5678-1234-567812345678}')
UUID('12345678123456781234567812345678')
UUID('urn:uuid:12345678-1234-5678-1234-567812345678')
UUID(bytes=b'\x12\x34\x56\x78'*4)
UUID(bytes_le=b'\x78\x56\x34\x12\x34\x12\x78\x56' +
              b'\x12\x34\x56\x78\x12\x34\x56\x78')
UUID(fields=(0x12345678, 0x1234, 0x5678, 0x12, 0x34, 0x567812345678))
UUID(int=0x12345678123456781234567812345678)

Должно быть указано ровно одно из hex, bytes, bytes_le, fields или int. Аргумент version является необязательным; если он указан, результирующий UUID будет иметь свой вариант и номер версии, установленные в соответствии с RFC 4122, переопределяя биты в заданных hex, bytes, bytes_le, fields, или int.

Сравнение UUID-объектов осуществляется путем сравнения их атрибутов UUID.int. Сравнение с объектом, не являющимся UUID, приводит к появлению TypeError.

str(uuid) возвращает строку в виде 12345678-1234-5678-1234-567812345678, где 32 шестнадцатеричные цифры представляют UUID.

Экземпляры UUID имеют эти атрибуты, доступные только для чтения:

UUID.bytes

UUID в виде 16-байтовой строки (содержащей шесть целочисленных полей в старшем порядке байт).

UUID.bytes_le

UUID в виде 16-байтовой строки (с time_low, time_mid и time_hi_version в младшем порядке байт).

UUID.fields

Кортеж из шести целочисленных полей UUID, которые также доступны в виде шести отдельных атрибутов и двух производных атрибутов:

Поле

Значение

UUID.time_low

Первые 32 бита UUID.

UUID.time_mid

Следующие 16 бит UUID.

UUID.time_hi_version

Следующие 16 бит UUID.

UUID.clock_seq_hi_variant

Следующие 8 бит UUID.

UUID.clock_seq_low

Следующие 8 бит UUID.

UUID.node

Последние 48 бит UUID.

UUID.time

60-битная временная метка.

UUID.clock_seq

14-битный номер последовательности.

UUID.hex

UUID в виде 32-символьной шестнадцатеричной строки в нижнем регистре.

UUID.int

UUID в виде 128-битного целого числа.

UUID.urn

UUID в качестве URN, как указано в RFC 4122.

UUID.variant

Вариант UUID, определяющий внутреннее расположение UUID. Это будет одна из констант RESERVED_NCS, RFC_4122, RESERVED_MICROSOFT или RESERVED_FUTURE.

UUID.version

Номер версии UUID (от 1 до 5, имеет смысл только в том случае, если вариант равен RFC_4122).

UUID.is_safe

Перечисление SafeUUID, указывающее, сгенерировала ли платформа UUID безопасным для многопроцессорной обработки способом.

Added in version 3.7.

Модуль uuid определяет следующие функции:

uuid.getnode()

Получите аппаратный адрес в виде 48-битного положительного целого числа. При первом запуске может быть запущена отдельная программа, что может быть довольно медленным. Если все попытки получить аппаратный адрес не увенчались успехом, мы выбираем случайное 48-битное число с многоадресным битом (наименее значимый бит первого октета), установленным в 1, как рекомендовано в RFC 4122. Под «аппаратным адресом» понимается MAC-адрес сетевого интерфейса. На машине с несколькими сетевыми интерфейсами универсально управляемые MAC-адреса (т. е. где второй наименее значимый бит первого октета неустановлен) будут предпочтительнее локально управляемых MAC-адресов, но без каких-либо других гарантий упорядочивания.

Изменено в версии 3.7: Универсальные MAC-адреса предпочтительнее локальных, поскольку первые гарантированно уникальны в глобальном масштабе, а вторые - нет.

uuid.uuid1(node=None, clock_seq=None)

Генерирует UUID из идентификатора узла, порядкового номера и текущего времени. Если node не задан, для получения аппаратного адреса используется getnode(). Если задан clock_seq, он используется в качестве номера последовательности; в противном случае выбирается случайный 14-битный номер последовательности.

uuid.uuid3(namespace, name)

Сгенерируйте UUID на основе MD5-хэша идентификатора пространства имен (который является UUID) и имени (которое является объектом bytes или строкой, которая будет закодирована с помощью UTF-8).

uuid.uuid4()

Сгенерируйте случайный UUID.

uuid.uuid5(namespace, name)

Сгенерируйте UUID на основе SHA-1 хэша идентификатора пространства имен (который является UUID) и имени (которое является объектом bytes или строкой, которая будет закодирована с помощью UTF-8).

Модуль uuid определяет следующие идентификаторы пространства имен для использования с uuid3() или uuid5().

uuid.NAMESPACE_DNS

Если указано это пространство имен, строка name представляет собой полное доменное имя.

uuid.NAMESPACE_URL

Если указано это пространство имен, строка name представляет собой URL.

uuid.NAMESPACE_OID

Если указано это пространство имен, строка name представляет собой ISO OID.

uuid.NAMESPACE_X500

Если указано это пространство имен, строка name представляет собой X.500 DN в формате DER или текстовом формате вывода.

Модуль uuid определяет следующие константы для возможных значений атрибута variant:

uuid.RESERVED_NCS

Зарезервировано для совместимости с NCS.

uuid.RFC_4122

Указывает макет UUID, заданный в RFC 4122.

uuid.RESERVED_MICROSOFT

Зарезервировано для совместимости с Microsoft.

uuid.RESERVED_FUTURE

Зарезервировано для будущего определения.

См.также

RFC 4122 - Универсальный уникальный идентификатор (UUID) Пространство имен URN

Эта спецификация определяет пространство имен Uniform Resource Name для UUID, внутренний формат UUID и методы генерации UUID.

Использование командной строки

Added in version 3.12.

Модуль uuid может быть выполнен как сценарий из командной строки.

python -m uuid [-h] [-u {uuid1,uuid3,uuid4,uuid5}] [-n NAMESPACE] [-N NAME]

Принимаются следующие варианты:

-h, --help

Покажите сообщение о помощи и выйдите.

-u <uuid>
--uuid <uuid>

Укажите имя функции, которую следует использовать для генерации uuid. По умолчанию используется uuid4().

-n <namespace>
--namespace <namespace>

Пространство имен - это UUID или @ns, где ns - известный предопределенный UUID, адресуемый по имени пространства имен. Например, @dns, @url, @oid и @x500. Требуется только для uuid3() / uuid5() функций.

-N <name>
--name <name>

Имя, используемое при генерации uuid. Требуется только для функций uuid3() / uuid5() функций.

Пример

Вот несколько примеров типичного использования модуля uuid:

>>> import uuid

>>> # make a UUID based on the host ID and current time
>>> uuid.uuid1()
UUID('a8098c1a-f86e-11da-bd1a-00112444be1e')

>>> # make a UUID using an MD5 hash of a namespace UUID and a name
>>> uuid.uuid3(uuid.NAMESPACE_DNS, 'python.org')
UUID('6fa459ea-ee8a-3ca4-894e-db77e160355e')

>>> # make a random UUID
>>> uuid.uuid4()
UUID('16fd2706-8baf-433b-82eb-8c7fada847da')

>>> # make a UUID using a SHA-1 hash of a namespace UUID and a name
>>> uuid.uuid5(uuid.NAMESPACE_DNS, 'python.org')
UUID('886313e1-3b8a-5372-9b90-0c9aee199e5d')

>>> # make a UUID from a string of hex digits (braces and hyphens ignored)
>>> x = uuid.UUID('{00010203-0405-0607-0809-0a0b0c0d0e0f}')

>>> # convert a UUID to a string of hex digits in standard form
>>> str(x)
'00010203-0405-0607-0809-0a0b0c0d0e0f'

>>> # get the raw 16 bytes of the UUID
>>> x.bytes
b'\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f'

>>> # make a UUID from a 16-byte string
>>> uuid.UUID(bytes=x.bytes)
UUID('00010203-0405-0607-0809-0a0b0c0d0e0f')

Пример командной строки

Вот несколько примеров типичного использования интерфейса командной строки uuid:

# generate a random uuid - by default uuid4() is used
$ python -m uuid

# generate a uuid using uuid1()
$ python -m uuid -u uuid1

# generate a uuid using uuid5
$ python -m uuid -u uuid5 -n @url -N example.com