o
    `jK
                     @   s0   d dl Z ddlmZ G dd deZdd ZdS )    N   )Partitionerc                   @   s   e Zd ZdZdd ZdS )DefaultPartitionerzDefault partitioner.

    Hashes key to partition using murmur2 hashing (from java client)
    If key is None, selects partition randomly from available,
    or from all partitions if none are currently available
    c                 C   sx   ||  vrtd|f t||}t||}|d ur1t|}	|	dM }	|	t|; }	||	 S |r5|n|}
t	|
S )Nz%Topic %s not found in ClusterMetadatai)
topics
ValueErrorsortedpartitions_for_topiclistavailable_partitions_for_topicmurmur2lenrandomchoice)selftopickeyserialized_keyvalueserialized_valueclusterall_partitions	availableidxpool r   W/home/djax/ivt_ai_plugin/venv/lib/python3.10/site-packages/kafka/partitioner/default.py	partition   s   
zDefaultPartitioner.partitionN)__name__
__module____qualname____doc__r   r   r   r   r   r      s    r   c                 C   s  t | }d}d}d}||A }|d }t|D ]\}|d }| |d  d@ | |d  d@ d>  | |d	  d@ d
>  | |d  d@ d>  }	|	dM }	|	|9 }	|	dM }	|	|	d |? N }	|	dM }	|	|9 }	|	dM }	||9 }|dM }||	N }|dM }q|d }
|
dkr|| |d@ d	  d@ d
> N }|dM }|
d	kr|| |d@ d  d@ d> N }|dM }|
dkr|| |d@  d@ N }|dM }||9 }|dM }||d d? N }|dM }||9 }|dM }||d d? N }|dM }|S )zPure-python Murmur2 implementation.

    Based on java client, see org.apache.kafka.common.utils.Utils.murmur2

    Args:
        data (bytes): opaque bytes

    Returns: MurmurHash2 of data
    l   2. i[      r      r               l    l              )r   range)datalengthseedmrhlength4ii4kextra_bytesr   r   r   r      sZ   

r   )r   abcr   r   r   r   r   r   r   <module>   s    