Source code for ddf.object_id_utils

from datetime import datetime
import math
import uuid_utils
from uuid_utils import uuid7
from uuid import UUID


[docs] def convert_epoch(epoch_in_s: float) -> tuple[int, int]: """Convert epoch to seconds and nanoseconds. Should be fine until year=6429 """ fractional_part, seconds = math.modf(epoch_in_s) nanos = round(fractional_part * 1_000_000_000) return int(seconds), nanos
[docs] def create_uuidv7_from_epoch(epoch_in_s: float) -> UUID: uuid = UUID(bytes=uuid7(*convert_epoch(epoch_in_s)).bytes) return uuid
[docs] def create_uuidv7_from_datetime(dt: datetime) -> UUID: uuid = uuid7(int(dt.timestamp()), dt.microsecond * 1_000) return UUID(bytes=uuid.bytes)
[docs] def zero_non_timestamp_fields(uuid: UUID) -> UUID: """Zero out the non-timestamp fields of a UUIDv7.""" return UUID(fields=(uuid.time_low, uuid.time_mid, 0x7000, 0x80, 0, 0))
[docs] def read_datetime_from_uuidv7(uuid: UUID) -> datetime: uuid_copy = uuid_utils.UUID(bytes=uuid.bytes) return datetime.fromtimestamp(uuid_copy.timestamp / 1000.0)