
    j                         d dl m Z  d dlmZ d dlZd dlZd dlZd dlZddee    defdZde	defdZ
d	e d
edej                  fdZy)    )datetime)OptionalN	timestampreturnc                     | r2t        t        j                               }t        t        | |            S t        t	        j
                               S N)struuiduuid4uuid4_to_uuid7uuid6uuid7)r   r   s     h/Users/manta/Documents/Projects/TheRoad-I1/backend/.venv/lib/python3.12/site-packages/opik/id_helpers.pygenerate_idr   	   s8    DJJL!>)U344u{{}    lengthc                     | dk  rt        d      t        j                  t        j                  z   dj	                  fdt        |       D              S )zGenerate a random alphanumeric string of the specified length.

    Args:
        length: The length of the string to generate.

    Returns:
        A random string containing only alphanumeric characters (a-z, A-Z, 0-9).
    r   zLength must be non-negative c              3   H   K   | ]  }t        j                          y wr   )randomchoice).0_
characterss     r   	<genexpr>z6generate_random_alphanumeric_string.<locals>.<genexpr>   s     Dm6==,ms   ")
ValueErrorstringascii_lettersdigitsjoinrange)r   r   s    @r   #generate_random_alphanumeric_stringr"      sE     z677%%5J77DeFmDDDr   user_datetime	user_uuidc                    t        | j                         dz        }t        j                  |      }|j                  dk7  rt        d      t        d      }|j                  dd      |dd d	|j                  d   d
z  z  |d<   |j                  d   |d<   d|j                  d   dz  z  |d<   |j                  dd |dd t        j                  t        |            S )zCConvert a UUID v4 into a UUID v7 following RFC draft specification.i     zInput UUID must be version 4      big)	byteorderr   p               ?   	   )bytes)	intr   r
   UUIDversionr   	bytearrayto_bytesr2   )r#   r$   
unix_ts_msuuidv4
uuid_bytess        r   r   r   !   s     ],,.56JYYy!F~~788 2J !))!u)=JqO FLLOd23JqM LLOJqM FLLOd23JqM ||Ab)Jq995,--r   r   )r   typingr   r   r   r
   r   r	   r   r3   r"   r4   r    r   r   <module>r=      sc         8H-  E E E .( .s .tyy .r   