
    [ec                        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dS )    )annotationsN)IterableIterator)	ItemsView
ValuesView)ZictBasekeystrreturnbytesc                ,    |                      d          S Nzutf-8)encoder	   s    )lib/python3.11/site-packages/zict/lmdb.py_encode_keyr          ::g    c                ,    |                      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'
    N	directorystr | pathlib.Pathmap_size
int | Nonec                   dd l }t                                                       |0t          j        dk    rt          dt          j        dz            }nd}|                    t          |          d|dd          | _	        d S )	Nr   win32l           i   TF)subdirr   syncwritemap)
lmdbsuper__init__sysplatformminmaxsizeopenr
   db)selfr   r   r$   	__class__s       r   r&   zLMDB.__init__2   s    |w&&uckQ&677%))	NN  
 
r   r	   r
   r   r   c                   t          |t                    st          |          | j                                        5 }|                    t          |                    }d d d            n# 1 swxY w Y   |t          |          |S N)
isinstancer
   KeyErrorr,   begingetr   )r-   r	   txnvalues       r   __getitem__zLMDB.__getitem__D   s    #s## 	 3--W]]__ 	.GGK,,--E	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.=3--s   #A--A14A1r6   Nonec                D   t          |t                    st          |          t          |t                    st          |          | j                            d          5 }|                    t          |          |           d d d            d S # 1 swxY w Y   d S NT)write)r1   r
   	TypeErrorr   r,   r3   putr   )r-   r	   r6   r5   s       r   __setitem__zLMDB.__setitem__M   s    #s## 	!C.. %'' 	#E"""W]]]&& 	-#GGK$$e,,,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-s   $$BBBobjectboolc                    t          |t                    sdS | j                                        5 }|                                                    t          |                    cd d d            S # 1 swxY w Y   d S NF)r1   r
   r,   r3   cursorset_keyr   r-   r	   r5   s      r   __contains__zLMDB.__contains__U   s    #s## 	5W]]__ 	:::<<''C(8(899	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	:s   4A22A69A6Iterator[str]c                    | j                                                                         }d |                    dd          D             S )Nc              3  4   K   | ]}t          |          V  d S r0   r   ).0ks     r   	<genexpr>z LMDB.__iter__.<locals>.<genexpr>]   s(      QQ1AQQQQQQr   TFkeysvalues)r,   r3   rC   iternextr-   rC   s     r   __iter__zLMDB.__iter__[   sA    ''))QQT%(P(PQQQQr   ItemsView[str, bytes]c                     t          |           S r0   )LMDBItemsViewr-   s    r   itemsz
LMDB.items_   s    T"""r   ValuesView[bytes]c                     t          |           S r0   )LMDBValuesViewrW   s    r   rP   zLMDB.valuesb   s    d###r   rX   Iterable[tuple[str, bytes]]c                   g }|D ]q\  }}t          |t                    st          |          t          |t                    st          |          |                    t          |          |f           r| j                            d          5 }|                                	                    |          \  }}||cxk    rt          |          k    sn J 	 d d d            d S # 1 swxY w Y   d S r:   )r1   r
   r<   r   appendr   r,   r3   rC   putmultilen)r-   rX   	items_encr	   r6   r5   consumedaddeds           r   
_do_updatezLMDB._do_updatee   s@   	 	8 	8JCc3'' %nn$eU++ '&&&k#..67777W]]]&& 	7#!jjll33I>>OHeu6666I6666666	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7s   A	C))C-0C-c                   t          |t                    st          |          | j                            d          5 }|                    t          |                    st          |          	 d d d            d S # 1 swxY w Y   d S r:   )r1   r
   r2   r,   r3   deleter   rE   s      r   __delitem__zLMDB.__delitem__s   s    #s## 	 3--W]]]&& 	$#::k#..// $smm#$	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$s    2B  BBintc                @    | j                                         d         S )Nentries)r,   statrW   s    r   __len__zLMDB.__len__z   s    w||~~i((r   c                8    | j                                          d S r0   )r,   closerW   s    r   rn   z
LMDB.close}   s    r   r0   )r   r   r   r   r	   r
   r   r   )r	   r
   r6   r   r   r8   )r	   r?   r   r@   )r   rG   )r   rT   )r   rY   )rX   r\   r   r8   )r	   r
   r   r8   )r   rh   )r   r8   )__name__
__module____qualname____doc__r&   r7   r>   rF   rS   rX   rP   rd   rg   rl   rn   __classcell__)r.   s   @r   r   r      s        6
 
 
 
 
 
 
$   - - - -: : : :R R R R# # # #$ $ $ $7 7 7 7$ $ $ $) ) ) )       r   r   c                  .    e Zd ZU ded<   dZddZdd
ZdS )rV   r   _mapping itemr?   r   r@   c                V    |\  }}	 | j         |         }||k    S # t          $ r Y dS w xY wrB   )rv   r2   )r-   rx   r	   r6   vs        r   rF   zLMDBItemsView.__contains__   sN     
U	c"A :  	 	 	55	s    
((Iterator[tuple[str, bytes]]c                    | j         j                                                                        }d |                    dd          D             S )Nc              3  >   K   | ]\  }}t          |          |fV  d S r0   rJ   )rK   rL   rz   s      r   rM   z)LMDBItemsView.__iter__.<locals>.<genexpr>   s1      XX1Q#XXXXXXr   TrN   rv   r,   r3   rC   rQ   rR   s     r   rS   zLMDBItemsView.__iter__   sI    !''))0022XXTRV0W0WXXXXr   N)rx   r?   r   r@   )r   r{   rp   rq   rr   __annotations__	__slots__rF   rS   rw   r   r   rV   rV      sR         NNNI	 	 	 	Y Y Y Y Y Yr   rV   c                  .    e Zd ZU ded<   dZddZdd
ZdS )r[   r   rv   rw   r6   r?   r   r@   c                :    t          fd| D                       S )Nc              3  $   K   | ]
}|k    V  d S r0   rw   )rK   rz   r6   s     r   rM   z.LMDBValuesView.__contains__.<locals>.<genexpr>   s'      ,,!5A:,,,,,,r   )any)r-   r6   s    `r   rF   zLMDBValuesView.__contains__   s&    ,,,,t,,,,,,r   Iterator[bytes]c                    | j         j                                                                        }|                    dd          S )NFTrN   r~   rR   s     r   rS   zLMDBValuesView.__iter__   s:    !''))0022E$777r   N)r6   r?   r   r@   )r   r   r   rw   r   r   r[   r[      sL         NNNI- - - -8 8 8 8 8 8r   r[   ro   )r	   r   r   r
   )
__future__r   pathlibr'   collections.abcr   r   typingr   r   zict.commonr   r   r   r
   r   r   rV   r[   rw   r   r   <module>r      sU   " " " " " "  



 . . . . . . . .       
 !                h h h h h8CJ h h hVY Y Y Y YIc5j) Y Y Y(	8 	8 	8 	8 	8Z& 	8 	8 	8 	8 	8r   