
    Bec                        d dl mZ d dlZd dlZd dlmZmZ d dlmZm	Z	 d dl
mZ ddZddZ G d d	eeef         Z G d
 deeef         Z G d de	e         Zy)    )annotationsN)IterableIterator)	ItemsView
ValuesView)ZictBasec                $    | j                  d      S Nzutf-8)encodekeys    )lib/python3.12/site-packages/zict/lmdb.py_encode_keyr          ::g    c                $    | j                  d      S r
   )decoder   s    r   _decode_keyr      r   r   c                  v     e Zd ZdZdd fdZddZddZddZddZddZ	ddZ
dd	Zdd
ZddZddZ xZS )LMDBa  Mutable Mapping interface to a LMDB database.

    Keys must be strings, values must be bytes

    Parameters
    ----------
    directory: str
    map_size: int
        On Linux and MacOS, maximum size of the database file on disk.
        Defaults to 1 TiB on 64 bit systems and 1 GiB on 32 bit ones.

        On Windows, preallocated total size of the database file on disk. Defaults to
        10 MiB to encourage explicitly setting it.

    Notes
    -----
    None of this class is thread-safe - not even normally trivial methods such as
    ``__len__ `` or ``__contains__``.

    Examples
    --------
    >>> z = LMDB('/tmp/somedir/')  # doctest: +SKIP
    >>> z['x'] = b'123'  # doctest: +SKIP
    >>> z['x']  # doctest: +SKIP
    b'123'
    c                    dd l }t        | 	          |3t        j                  dk7  rt        dt        j                  dz        }nd}|j                  t        |      d|dd      | _	        y )	Nr   win32l           i   TF)subdirmap_sizesyncwritemap)
lmdbsuper__init__sysplatformminmaxsizeopenstrdb)self	directoryr   r   	__class__s       r   r    zLMDB.__init__2   se    ||w&uckkQ&67%))	N  
r   c                    t        |t              st        |      | j                  j	                         5 }|j                  t        |            }d d d        t        |      |S # 1 sw Y   xY wN)
isinstancer&   KeyErrorr'   begingetr   )r(   r   txnvalues       r   __getitem__zLMDB.__getitem__D   sa    #s#3-WW]]_ 	.GGK,-E	.=3-		. 	.s   A((A1c                   t        |t              st        |      t        |t              st        |      | j                  j                  d      5 }|j                  t        |      |       d d d        y # 1 sw Y   y xY wNT)write)r-   r&   	TypeErrorbytesr'   r/   putr   )r(   r   r2   r1   s       r   __setitem__zLMDB.__setitem__M   sg    #s#C. %'E""WW]]]& 	-#GGK$e,	- 	- 	-s   A88Bc                    t        |t              sy| j                  j                         5 }|j	                         j                  t        |            cd d d        S # 1 sw Y   y xY wNF)r-   r&   r'   r/   cursorset_keyr   r(   r   r1   s      r   __contains__zLMDB.__contains__U   sL    #s#WW]]_ 	:::<''C(89	: 	: 	:s   (AA'c                    | j                   j                         j                         }d |j                  dd      D        S )Nc              3  2   K   | ]  }t        |        y wr,   r   ).0ks     r   	<genexpr>z LMDB.__iter__.<locals>.<genexpr>]   s     Q1AQs   TFkeysvalues)r'   r/   r=   iternextr(   r=   s     r   __iter__zLMDB.__iter__[   s2    '')QT%(PQQr   c                    t        |       S r,   )LMDBItemsViewr(   s    r   itemsz
LMDB.items_   s    T""r   c                    t        |       S r,   )LMDBValuesViewrO   s    r   rI   zLMDB.valuesb   s    d##r   c                   g }|D ]W  \  }}t        |t              st        |      t        |t              st        |      |j	                  t        |      |f       Y | j                  j                  d      5 }|j                         j                  |      \  }}||cxk(  rt        |      k(  sJ  J 	 d d d        y # 1 sw Y   y xY wr5   )r-   r&   r7   r8   appendr   r'   r/   r=   putmultilen)r(   rP   	items_encr   r2   r1   consumedaddeds           r   
_do_updatezLMDB._do_updatee   s    	 	8JCc3'n$eU+&&k#.67	8 WW]]]& 	7#!jjl33I>OHeu6I66666	7 	7 	7s   ;<CC
c                    t        |t              st        |      | j                  j	                  d      5 }|j                  t        |            st        |      	 d d d        y # 1 sw Y   y xY wr5   )r-   r&   r.   r'   r/   deleter   r?   s      r   __delitem__zLMDB.__delitem__s   s_    #s#3-WW]]]& 	$#::k#./sm# 0	$ 	$ 	$s   &A((A1c                <    | j                   j                         d   S )Nentries)r'   statrO   s    r   __len__zLMDB.__len__z   s    ww||~i((r   c                8    | j                   j                          y r,   )r'   closerO   s    r   rc   z
LMDB.close}   s    r   r,   )r)   zstr | pathlib.Pathr   z
int | Noner   r&   returnr8   )r   r&   r2   r8   re   None)r   objectre   bool)re   zIterator[str])re   zItemsView[str, bytes])re   zValuesView[bytes])rP   zIterable[tuple[str, bytes]]re   rf   )r   r&   re   rf   )re   int)re   rf   )__name__
__module____qualname____doc__r    r3   r:   r@   rL   rP   rI   rZ   r]   ra   rc   __classcell__)r*   s   @r   r   r      s@    6
$-:R#$7$)r   r   c                  ,    e Zd ZU ded<   dZddZddZy)	rN   r   _mapping c                T    |\  }}	 | j                   |   }||k(  S # t        $ r Y yw xY wr<   )rp   r.   )r(   itemr   r2   vs        r   r@   zLMDBItemsView.__contains__   s@     
U	c"A :  		s    	''c                    | j                   j                  j                         j                         }d |j	                  dd      D        S )Nc              3  <   K   | ]  \  }}t        |      |f  y wr,   rC   )rD   rE   rt   s      r   rF   z)LMDBItemsView.__iter__.<locals>.<genexpr>   s     X1Q#Xs   TrG   rp   r'   r/   r=   rJ   rK   s     r   rL   zLMDBItemsView.__iter__   s<    !!'')002XTRV0WXXr   N)rs   rg   re   rh   )re   zIterator[tuple[str, bytes]]rj   rk   rl   __annotations__	__slots__r@   rL   rq   r   r   rN   rN      s    NI	Yr   rN   c                  ,    e Zd ZU ded<   dZddZddZy)	rR   r   rp   rq   c                ,    t        fd| D              S )Nc              3  (   K   | ]	  }|k(    y wr,   rq   )rD   rt   r2   s     r   rF   z.LMDBValuesView.__contains__.<locals>.<genexpr>   s     ,!5A:,s   )any)r(   r2   s    `r   r@   zLMDBValuesView.__contains__   s    ,t,,,r   c                    | j                   j                  j                         j                         }|j	                  dd      S )NFTrG   rw   rK   s     r   rL   zLMDBValuesView.__iter__   s6    !!'')002E$77r   N)r2   rg   re   rh   )re   zIterator[bytes]rx   rq   r   r   rR   rR      s    NI-8r   rR   rd   )r   r8   re   r&   )
__future__r   pathlibr!   collections.abcr   r   typingr   r   zict.commonr   r   r   r&   r8   r   rN   rR   rq   r   r   <module>r      se    "  
 .
 !h8CJ hVYIc5j) Y(	8Z& 	8r   