uuid — UUID объекты согласно RFC 4122


Данный модуль предоставляет неизменяемые 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

Добавлено в версии 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, которые также доступны в виде шести отдельных атрибутов и двух производных атрибутов:

Поле Разъяснение
time_low первые 32 бита UUID
time_mid следующие 16 битов UUID
time_hi_version следующие 16 битов UUID
clock_seq_hi_variant следующие 8 битов UUID
clock_seq_low следующие 8 битов UUID
node последние 48 битов UUID
time 60-битная временная метка
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 безопасным для многопроцессорной обработки способом.

Добавлено в версии 3.7.

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

uuid.getnode()

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

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

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

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

uuid.uuid3(namespace, name)

Создать UUID на основе MD5 хэша идентификатора пространства имён (который является UUID) и имени (который является строкой).

uuid.uuid4()

Создать случайный UUID.

uuid.uuid5(namespace, name)

Создать UUID на основе хэша SHA-1 идентификатора пространства имён (который является UUID) и имени (который является строкой).

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

uuid.NAMESPACE_DNS

Когда указано это пространство имён, строка name является полным доменным именем.

uuid.NAMESPACE_URL

Когда указано данное пространство имён, строка name является URL-адресом.

uuid.NAMESPACE_OID

Когда указано данное пространство имён, строка name является ISO OID.

uuid.NAMESPACE_X500

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

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

uuid.RESERVED_NCS

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

uuid.RFC_4122

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

uuid.RESERVED_MICROSOFT

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

uuid.RESERVED_FUTURE

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

См.также

RFC 4122 — пространство имён универсального уникального идентификатора (UUID)
Спецификация определяет Единое пространство имён ресурсов для UUID, внутренний формат UUID и методов генерации UUID.

Пример

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

>>> import uuid

>>> # создать UUID на основе идентификатора хоста и текущего времени
>>> uuid.uuid1()
UUID('a8098c1a-f86e-11da-bd1a-00112444be1e')

>>> # создать UUID, используя MD5-хэш UUID пространства имен и имени
>>> uuid.uuid3(uuid.NAMESPACE_DNS, 'digitology.tech')
UUID('8a726b3d-1bd8-3f04-a96c-08ee394b75cc')

>>> # создать случайный UUID
>>> uuid.uuid4()
UUID('16fd2706-8baf-433b-82eb-8c7fada847da')

>>> # создать UUID, используя хэш SHA-1 из UUID пространства имен и имени
>>> uuid.uuid5(uuid.NAMESPACE_DNS, 'digitology.tech')
UUID('1c8ee55a-fd31-5fdf-b54f-da3a34cb5b3b')

>>> # создать UUID из строки шестнадцатеричных цифр (фигурные скобки и дефисы игнорируются)
>>> x = uuid.UUID('{00010203-0405-0607-0809-0a0b0c0d0e0f}')

>>> # преобразовать UUID в строку шестнадцатеричных цифр в стандартной форме
>>> str(x)
'00010203-0405-0607-0809-0a0b0c0d0e0f'

>>> # получить необработанные 16 байт UUID
>>> x.bytes
b'\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f'

>>> # создать UUID из 16-байтовой строки
>>> uuid.UUID(bytes=x.bytes)
UUID('00010203-0405-0607-0809-0a0b0c0d0e0f')