
    F\h                         S SK r S SKrS SKJr  S SKJrJr  S SKJr  Sr	Sr
SrSrS	rS
r " S S\5      rSrSrS r " S S\5      rSS jrg)    N)Path)suppressclosing)MutableMappingz_
  CREATE TABLE IF NOT EXISTS Dict (
    key BLOB UNIQUE NOT NULL,
    value BLOB NOT NULL
  )
zSELECT COUNT (key) FROM Dictz2SELECT value FROM Dict WHERE key = CAST(? AS BLOB)zHREPLACE INTO Dict (key, value) VALUES (CAST(? AS BLOB), CAST(? AS BLOB))z,DELETE FROM Dict WHERE key = CAST(? AS BLOB)zSELECT key FROM Dictc                       \ rS rSrSrg)error    N)__name__
__module____qualname____firstlineno____static_attributes__r
       "/usr/lib/python3.13/dbm/sqlite3.pyr   r      s    r   r   z"DBM object has already been closedz,DBM object does not support reinitializationc                     [        U 5      n U R                  5       R                  5       nSU;   a  UR                  SS5      nSU;   a  M  U$ )Nz///)r   absoluteas_urireplace)pathuris     r   _normalize_urir      sD    :D
--/
 
 
"C
#+kk$$ #+Jr   c                   d   ^  \ rS rSrS rS rS rS rS rS r	S r
S	 rU 4S
 jrS rS rSrU =r$ )	_Database$   c                   [        U S5      (       a  [        [        5      e[        R                  " U5      nU=S:X  a    SnOu=S:X  a    SnOk=S:X  a    Sn[        U5      R                  USS	9  OHS
:X  a3  Sn[        U5      R                  SS9  [        U5      R                  US9  O [        SU< 35      e[        U5      nU SU 3n [        R                  " USSS9U l        [        [        R                   5         U R                  R#                  S5        S S S 5        US:X  a  U R%                  [&        5        g g ! [        R                   a  n[        [        U5      5      eS nAff = f! , (       d  f       N[= f)N_cxrrowrwcrwcT)modeexist_okn)
missing_ok)r%   z/Flag must be one of 'r', 'w', 'c', or 'n', not z?mode=)
autocommitr   zPRAGMA journal_mode = wal)hasattrr   _ERR_REINITosfsdecoder   touchunlink
ValueErrorr   sqlite3connectr   Errorstrr   OperationalErrorexecute_executeBUILD_TABLE)selfr   flagr%   r   excs         r   __init___Database.__init__&   sO   4$${{4 T
  dT :T
!!T!2T
  d +  "((,x"1 2 2 T"VD6"	"stFDH
 g../HH89 0 5=MM+&  }} 	"C/!	" 0/s$   
D? >E/?E,E''E,/
E=c                     U R                   (       d  [        [        5      e [        U R                   R                  " U0 UD65      $ ! [
        R                   a  n[        [        U5      5      eS nAff = fN)r   r   _ERR_CLOSEDr   r6   r1   r3   r4   )r9   argskwargsr;   s       r   r7   _Database._executeK   sZ    xx$$	"488++T<V<==}} 	"C/!	"s   $A A4A//A4c                     U R                  [        5       nUR                  5       nS S S 5        US   $ ! , (       d  f       WS   $ = fNr   )r7   GET_SIZEfetchone)r9   curows      r   __len___Database.__len__S   s;    ]]8$++-C %1v %$1vs	   4
Ac                     U R                  [        U45       nUR                  5       nS S S 5        W(       d  [        U5      eUS   $ ! , (       d  f       N%= frE   )r7   
LOOKUP_KEYrG   KeyError)r9   keyrH   rI   s       r   __getitem___Database.__getitem__X   sC    ]]:v."++-C /3-1v	 /.s   A
Ac                 2    U R                  [        X45        g r?   )r7   STORE_KV)r9   rO   values      r   __setitem___Database.__setitem___   s    h-r   c                     U R                  [        U45       nUR                  (       d  [        U5      e S S S 5        g ! , (       d  f       g = fr?   )r7   
DELETE_KEYrowcountrN   )r9   rO   rH   s      r   __delitem___Database.__delitem__b   s6    ]]:v.";;sm#  /..s	   ?
Ac              #      #     U R                  [        5       nU H
  nUS   v   M     S S S 5        g ! , (       d  f       g = f! [        R                   a  n[	        [        U5      5      eS nAff = f7frE   )r7   	ITER_KEYSr1   r3   r   r4   )r9   rH   rI   r;   s       r   __iter___Database.__iter__g   sY     	"y)RCa&L  *)) }} 	"C/!	"sF   A4A 3A A4
AA  A4A A1A,,A11A4c                 j    U R                   (       a"  U R                   R                  5         S U l         g g r?   )r   closer9   s    r   ra   _Database.closeo   s#    88HHNNDH r   c                 2   > [        [        TU ]	  5       5      $ r?   )listsuperkeys)r9   	__class__s    r   rg   _Database.keyst   s    EGLN##r   c                     U $ r?   r
   rb   s    r   	__enter___Database.__enter__w   s    r   c                 $    U R                  5         g r?   )ra   )r9   rA   s     r   __exit___Database.__exit__z   s    

r   )r   )r   r   r   r   r<   r7   rJ   rP   rU   rZ   r^   ra   rg   rk   rn   r   __classcell__)rh   s   @r   r   r   $   s@    #'J"
.$
"
$ r   r   c                    [        XUS9$ )a:  Open a dbm.sqlite3 database and return the dbm object.

The 'filename' parameter is the name of the database file.

The optional 'flag' parameter can be one of ...:
    'r' (default): open an existing database for read only access
    'w': open an existing database for read/write access
    'c': create a database if it does not exist; open for read/write access
    'n': always create a new, empty database; open for read/write access

The optional 'mode' parameter is the Unix file access mode of the database;
only used when creating a new database. Default: 0o666.
)r:   r%   )r   )filenamer:   r%   s      r   openrs   ~   s     Xt44r   )r   i  )r,   r1   pathlibr   
contextlibr   r   collections.abcr   r8   rF   rM   rS   rX   r]   OSErrorr   r@   r+   r   r   rs   r
   r   r   <module>rx      sg    	   ( * *A
U;
"		G 	 3<W Wt5r   