
    -iK                         d dl Z d dlmZ d dlmZmZ d dlmZ d dlm	Z	  G d de          Z
 G d d	e
          Z G d
 de          Z G d de          ZdS )    N)getrandbits)UniqueHashIndex	HashIndex)ShardedIndex)IndexPreconditionsExceptionc                   X     e Zd ZdZ fdZed
d            Zd Zd Zd Z	d Z
d	 Z xZS )IU_ShardedUniqueHashIndexz_import uuid
from random import getrandbits
from codernitydb3.sharded_index import ShardedIndex
c                     |                     dd          dk    rt          d          t          |d<    t          t          |           j        ||g|R i | | j                            | j                   d S )Nsh_numsr      zToo many shards	ind_class)	getr   r   superr	   __init__patchersappendwrap_insert_id_indexselfdb_pathnameargskwargs	__class__s        W/var/www/html/speakWrite/venv/lib/python3.11/site-packages/codernitydb3/sharded_hash.pyr   z"IU_ShardedUniqueHashIndex.__init__"   s    ::i##c))-.?@@@-{	'	 	Wd	=-1	= 	= 	=5;	= 	= 	=T677777    Fc                       fd}|sHt           d          rt          d          t           d j                   t           d|           d S t           d j                   t           d           d S )Nc                     j                             |          \  }}|dd         }j         j        |         j        }|                    |          \  }}j                             || ||           |S )z:
            Performs insert on **id** index.
            N   )id_indmake_key_valueshards_rstorageinsert)	_revdata_idvalue	trg_shardr#   startsizedb_objs	           r   _insert_id_indexzHIU_ShardedUniqueHashIndex.wrap_insert_id_index.<locals>._insert_id_index,   ss      55d;;JCBQBIm,Y7?G!..//KE4M  dE4888Jr   _insert_id_index_origz%Already patched, something went wrongr-   )hasattrr   setattrr-   r.   delattr)r,   ind_objcleanr-   s   `   r   r   z.IU_ShardedUniqueHashIndex.wrap_insert_id_index*   s    		 		 		 		 		  	5v677 =1;= = =F3V5LMMMF.0@AAAAAF.0LMMMF344444r   c                     t          j        t          d          d          j        }| j        dz   }|| j        k    rd}|| _        d||dd          fz  }|                    d          S )	N      )intversion   r   z%02x%30sr   utf8)uuidUUIDr   hex	last_usedr   encode)r   htrgs      r   
create_keyz$IU_ShardedUniqueHashIndex.create_keyA   sn    I+c**A666:nq $,C#qu%xxr   c                 x    |                      |d d                   }| j        |         } |j        |g|R i |S )Nr   )make_keyr"   deleter   keyr   r   r)   ops         r   rE   z IU_ShardedUniqueHashIndex.deleteJ   sI    MM#bqb'**	]9%ry.t...v...r   c                     |                      |d d                   }t          |d          | _        | j        |         } |j        |g|R i |S Nr      )rD   r7   r>   r"   updaterF   s         r   rL   z IU_ShardedUniqueHashIndex.updateO   sZ    MM#bqb'**	Y++]9%ry.t...v...r   c                     |                      |d d                   }t          |d d         d          | _        | j        |         } |j        |g|R i |S rJ   )rD   r7   r>   r"   r$   rF   s         r   r$   z IU_ShardedUniqueHashIndex.insertU   sg    MMG 	S!Wb))]9%ry.t...v...r   c                     |                      |d d                   }t          |d          | _        | j        |         } |j        |g|R i |S rJ   )rD   r7   r>   r"   r   rF   s         r   r   zIU_ShardedUniqueHashIndex.get\   sZ    MM#bqb'**	Y++]9%rvc+D+++F+++r   )F)__name__
__module____qualname__custom_headerr   staticmethodr   rB   rE   rL   r$   r   __classcell__r   s   @r   r	   r	      s        M
8 8 8 8 8 5 5 5 \5,     / / /
/ / // / /, , , , , , ,r   r	   c                       e Zd ZdZdS )ShardedUniqueHashIndexz?from codernitydb3.sharded_hash import IU_ShardedUniqueHashIndexN)rO   rP   rQ   rR    r   r   rW   rW   c   s         VMDr   rW   c                   @     e Zd ZdZ fdZd Zd Zd Zd Zd Z	 xZ
S )IU_ShardedHashIndexz3from codernitydb3.sharded_index import ShardedIndexc                 f    t           |d<    t          t          |           j        ||g|R i | d S )Nr   )r   r   rZ   r   r   s        r   r   zIU_ShardedHashIndex.__init__o   sV    '{1!4((1'4 	<$ 	< 	< 	<4:	< 	< 	< 	< 	<r   c                     t                      )z
        Must be implemented. It has to return shard to be used by key

        :param key: key
        :returns: target shard
        :rtype: int
        )NotImplementedError)r   rG   s     r   calculate_shardz#IU_ShardedHashIndex.calculate_shardt   s     "###r   c                 j    |                      |          }| j        |         } |j        ||g|R i |S N)r^   r"   rE   r   doc_idrG   r   r   r)   rH   s          r   rE   zIU_ShardedHashIndex.delete~   E    ((--	]9%ry6t666v666r   c                 j    |                      |          }| j        |         } |j        ||g|R i |S r`   r^   r"   r$   ra   s          r   r$   zIU_ShardedHashIndex.insert   rc   r   c                 j    |                      |          }| j        |         } |j        ||g|R i |S r`   re   ra   s          r   rL   zIU_ShardedHashIndex.update   rc   r   c                 h    |                      |          }| j        |         } |j        |g|R i |S r`   )r^   r"   r   rF   s         r   r   zIU_ShardedHashIndex.get   sC    ((--	]9%rvc+D+++F+++r   )rO   rP   rQ   rR   r   r^   rE   r$   rL   r   rT   rU   s   @r   rZ   rZ   k   s        MM< < < < <
$ $ $7 7 7
7 7 7
7 7 7
, , , , , , ,r   rZ   c                       e Zd ZdS )ShardedHashIndexN)rO   rP   rQ   rX   r   r   ri   ri      s        Dr   ri   )r;   randomr   codernitydb3.hash_indexr   r   codernitydb3.sharded_indexr   codernitydb3.indexr   r	   rW   rZ   ri   rX   r   r   <module>rn      s  &        > > > > > > > > 3 3 3 3 3 3 : : : : : :E, E, E, E, E, E, E, E,P	 	 	 	 	6 	 	 	%, %, %, %, %,, %, %, %,P	 	 	 	 	* 	 	 	 	 	r   