ó
    Ö›‘h1)  ã                  ó¦   • S r SSKJr  SSKrSSKrSSKrSSKrSSKJrJ	r	J
r
JrJr  SSKJr  \" SSS9r " S S	5      r " S
 S\5      rSS jr/ SQrg)aw  
A L{DirDBM} is a L{dbm}-style interface to a directory.

Each key is stored as a single file.  This is not expected to be very fast or
efficient, but it's good for easy debugging.

L{DirDBM}s are *not* thread-safe, they should only be accessed by one thread at
a time.

No files should be placed in the working directory of a DirDBM save those
created by the DirDBM itself!
é    )ÚannotationsN)ÚAnyStrÚIterableÚMappingÚTypeVarÚoverload)ÚFilePathÚ_T)Úboundc                  ó  • \ rS rSrSrSS jrSS jrSS jrSS jrSS jr	S S jr
S!S	 jrSS
 jrS"S jrS#S jrS#S jrS$S jrS%S jrS&S jr\S'S j5       r\S(S j5       rS)S*S jjrS%S jrS+S jrS,S jrS-S jrS-S jrS.S jrSrg)/ÚDirDBMé    zž
A directory with a DBM interface.

This class presents a hash-like interface to a directory of small,
flat files. It can only use strings as keys or values.
c                ó¾  • [         R                  R                  U5      U l        [	        U5      U l        U R
                  R                  5       (       d  U R
                  R                  5         g[        R                  " U R
                  R                  S5      R                  5       H  n[         R                  " U5        M     [        R                  " U R
                  R                  S5      R                  5      nU HZ  nUSS n[         R                  R                  U5      (       a  [         R                  " U5        MD  [         R                  " X$5        M\     g)z:
@param name: Base path to use for the directory storage.
z*.newz*.rplNéüÿÿÿ)ÚosÚpathÚabspathÚdnamer	   Ú
_dnamePathÚisdirÚcreateDirectoryÚglobÚchildÚremoveÚexistsÚrename)ÚselfÚnameÚfÚreplacementsÚolds        Ú\C:\Users\psant\Downloads\Noiseback\school\venv\Lib\site-packages\twisted/persisted/dirdbm.pyÚ__init__ÚDirDBM.__init__(   sÞ   € ô —W‘W—_‘_ TÓ*ˆŒ
Ü" 4›.ˆŒØ�‰×$Ñ$×&Ñ&Ø�O‰O×+Ñ+Õ-ô —Y’Y˜tŸ™×4Ñ4°WÓ=×BÑBÖC�Ü—	’	˜!–ñ DäŸ9š9 T§_¡_×%:Ñ%:¸7Ó%C×%HÑ%HÓIˆLÛ!�Ø˜˜�f�Ü—7‘7—>‘> #×&Ñ&Ü—I’I˜a–Lä—I’I˜aÖ%ò "ó    c                ón   • [         R                  " U5      R                  SS5      R                  SS5      $ )z/
Encode a key so it can be used as a filename.
ó   
ó   _ó   /ó   -)Úbase64ÚencodebytesÚreplace©r   Úks     r"   Ú_encodeÚDirDBM._encodeC   s/   € ô
 ×!Ò! !Ó$×,Ñ,¨U°DÓ9×AÑAÀ$ÈÓMÐMr%   c                ón   • [         R                  " UR                  SS5      R                  SS5      5      $ )z#
Decode a filename to get the key.
r(   r'   r*   r)   )r+   Údecodebytesr-   r.   s     r"   Ú_decodeÚDirDBM._decodeJ   s-   € ô ×!Ò! !§)¡)¨D°%Ó"8×"@Ñ"@ÀÀtÓ"LÓMÐMr%   c                ó|   • UR                  5        nUR                  5       nSSS5        U$ ! , (       d  f       W$ = f)zi
Read in the contents of a file.

Override in subclasses to e.g. provide transparently encrypted dirdbm.
N)ÚopenÚread)r   r   r   Úss       r"   Ú	_readFileÚDirDBM._readFileP   s1   € ð �Y‰YŒ[˜AØ—‘“ˆA÷ àˆ÷ Œ[àˆús   ‘,¬
;c                óœ   • UR                  S5       nUR                  U5        UR                  5         SSS5        g! , (       d  f       g= f)z_
Write data to a file.

Override in subclasses to e.g. provide transparently encrypted dirdbm.
ÚwN)r7   ÚwriteÚflush)r   r   Údatar   s       r"   Ú
_writeFileÚDirDBM._writeFileZ   s/   € ð �Y‰Y�sŒ^˜qØ�G‰G�DŒMØ�G‰GŒI÷ �^Ž^ús	   ’"=½
Ac                óH   • [        U R                  R                  5       5      $ )z6
@return: The number of key/value pairs in this Shelf
)Úlenr   Úlistdir©r   s    r"   Ú__len__ÚDirDBM.__len__d   s   € ô �4—?‘?×*Ñ*Ó,Ó-Ð-r%   c                ó  • [        U5      [        :X  d  [        S5      e[        U5      [        :X  d  [        S5      eU R                  U5      nU R                  R                  U5      nUR                  5       (       a  UR                  S5      nOUR                  S5      n U R                  XB5        UR                  5       (       a  UR                  5         UR                  U5        g! [         a    UR                  5         e f = f)zœ
C{dirdbm[k] = v}
Create or modify a textfile in this directory

@type k: bytes
@param k: key to set

@type v: bytes
@param v: value to associate with C{k}
úDirDBM key must be byteszDirDBM value must be bytesz.rplz.newN)ÚtypeÚbytesÚ	TypeErrorr0   r   r   r   ÚsiblingExtensionrA   r   ÚmoveToÚBaseException)r   r/   Úvr!   Únews        r"   Ú__setitem__ÚDirDBM.__setitem__j   sÑ   € ô �A‹wœ%ÓÜÐ6Ó7Ð7Ü�A‹wœ%ÓÜÐ8Ó9Ð9Ø�L‰L˜‹Oˆð �o‰o×#Ñ# AÓ&ˆØ�:‰:�<‰<Ø×&Ñ& vÓ.‰Cà×&Ñ& vÓ.ˆCð	Ø�O‰O˜CÔ#ð
 �z‰z�|‰|Ø—
‘
”Ø�J‰J�s�Oøô ó 	Ø�J‰JŒLØð	ús   Â"C* Ã*Dc                óè   • [        U5      [        :X  d  [        S5      eU R                  R	                  U R                  U5      5      n U R                  U5      $ ! [         a    [        U5      ef = f)z½
C{dirdbm[k]} Get the contents of a file in this directory as a string.

@param k: key to lookup

@return: The value associated with C{k}

@raise KeyError: Raised when there is no such key
rJ   )	rK   rL   rM   r   r   r0   r:   ÚOSErrorÚKeyError)r   r/   r   s      r"   Ú__getitem__ÚDirDBM.__getitem__Œ   se   € ô �A‹wœ%ÓÜÐ6Ó7Ð7Ø�‰×$Ñ$ T§\¡\°!£_Ó5ˆð	Ø—>‘> $Ó'Ð'øÜó 	Ü˜1“+Ðð	ús   Á
A ÁA1c                ó  • [        U5      [        :X  d  [        S5      eU R                  U5      n U R                  R                  U5      R                  5         g! [         a    [        U R                  U5      5      ef = f)z�
C{del dirdbm[foo]}
Delete a file in this directory.

@type k: bytes
@param k: key to delete

@raise KeyError: Raised when there is no such key
rJ   N)
rK   rL   rM   r0   r   r   r   rV   rW   r4   r.   s     r"   Ú__delitem__ÚDirDBM.__delitem__ž   sk   € ô �A‹wœ%ÓÜÐ6Ó7Ð7Ø�L‰L˜‹Oˆð	,Ø�O‰O×!Ñ! !Ó$×+Ñ+Õ-øÜó 	,Ü˜4Ÿ<™<¨›?Ó+Ð+ð	,ús   ±)A Á%B c                óŒ   • [        [        U R                  U R                  R	                  5       R                  5       5      5      $ )z)
@return: a L{list} of filenames (keys).
)ÚlistÚmapr4   r   ÚasBytesModerE   rF   s    r"   ÚkeysÚDirDBM.keys°   s0   € ô ”C˜Ÿ™ d§o¡o×&AÑ&AÓ&C×&KÑ&KÓ&MÓNÓOÐOr%   c                ób   • / nU R                  5       nU H  nUR                  X   5        M     U$ )z/
@return: a L{list} of file-contents (values).
©ra   Úappend)r   Úvalsra   Úkeys       r"   ÚvaluesÚDirDBM.values¶   s1   € ð ˆØ�y‰y‹{ˆÛˆCØ�K‰K˜™	Ö"ñ àˆr%   c                óf   • / nU R                  5       nU H  nUR                  X0U   45        M     U$ )z<
@return: a L{list} of 2-tuples containing key/value pairs.
rd   )r   Úitemsra   rg   s       r"   rk   ÚDirDBM.itemsÀ   s6   € ð ˆØ�y‰y‹{ˆÛˆCØ�L‰L˜# C™yÐ)Ö*ñ àˆr%   c                ó²   • [        U5      [        :X  d  [        S5      eU R                  U5      nU R                  R                  U5      R                  5       $ )z„
@type key: bytes
@param key: The key to test

@return: A true value if this dirdbm has the specified key, a false
value otherwise.
rJ   )rK   rL   rM   r0   r   r   Úisfile©r   rg   s     r"   Úhas_keyÚDirDBM.has_keyÊ   sH   € ô �C‹yœEÓ!ÜÐ6Ó7Ð7Ø�l‰l˜3ÓˆØ�‰×$Ñ$ SÓ)×0Ñ0Ó2Ð2r%   c                ó    • X;  a  X U'   U$ X   $ )zŽ
@type key: bytes
@param key: The key to lookup

@param value: The value to associate with key if key is not already
associated with a value.
© )r   rg   Úvalues      r"   Ú
setdefaultÚDirDBM.setdefault×   s   € ð ‹?Ø�‰IØˆLØ‰yÐr%   c                ó   • g ©Nrs   ro   s     r"   ÚgetÚ
DirDBM.getä   ó   € àr%   c                ó   • g rx   rs   ©r   rg   Údefaults      r"   ry   rz   è   r{   r%   Nc                ó   • X;   a  X   $ U$ )z¿
@param key: The key to lookup

@param default: The value to return if the given key does not exist

@return: The value associated with C{key} or C{default} if not
    L{DirDBM.has_key(key)}
rs   r}   s      r"   ry   rz   ì   s   € ð ‹;Ø‘9ÐàˆNr%   c                ó$   • U R                  U5      $ )z
@see: L{DirDBM.has_key}
)rp   ro   s     r"   Ú__contains__ÚDirDBM.__contains__ú   s   € ð �|‰|˜CÓ Ð r%   c                ó>   • UR                  5        H	  u  p#X0U'   M     g)zÂ
Add all the key/value pairs in L{dict} to this dirdbm.  Any conflicting
keys will be overwritten with the values from L{dict}.

@param dict: A mapping of key/value pairs to add to this dirdbm.
N)rk   )r   Úotherrg   Úvals       r"   ÚupdateÚDirDBM.update   s   € ð Ÿ™ž‰HˆCØ�‹Iò &r%   c                óÎ   • [        U5      nX R                  :w  d   eU R                  UR                  5      nUR	                  5         U R                  5        H	  nX   X4'   M     U$ )zñ
Copy the contents of this dirdbm to the dirdbm at C{path}.

@param path: The path of the dirdbm to copy to.  If a dirdbm
exists at the destination path, it is cleared first.

@rtype: C{DirDBM}
@return: The dirdbm this dirdbm was copied to.
)r	   r   Ú	__class__r   Úclearra   )r   r   ÚfpathÚdr/   s        r"   ÚcopyToÚDirDBM.copyTo
  sV   € ô ˜“ˆØŸ™Ó'Ð'Ð'à�N‰N˜5Ÿ:™:Ó&ˆØ	�‰Œ	Ø—‘–ˆAØ‘7ˆA‹Dñ àˆr%   c                ó6   • U R                  5        H  nX	 M     g)z,
Delete all key/value pairs in this dirdbm.
N)ra   r.   s     r"   rŠ   ÚDirDBM.clear  s   € ð —‘–ˆAØ’ò r%   c                ó   • g)z<
Close this dbm: no-op, for dbm-style interface compliance.
Nrs   rF   s    r"   ÚcloseÚDirDBM.close$  s   � r%   c                óò   • [        U5      [        :X  d  [        S5      eU R                  R	                  U R                  U5      5      nUR                  5       (       a  UR                  5       $ [        U5      e)z¡
Returns modification time of an entry.

@return: Last modification date (seconds since epoch) of entry C{key}
@raise KeyError: Raised when there is no such key
rJ   )	rK   rL   rM   r   r   r0   rn   ÚgetModificationTimerW   )r   rg   r   s      r"   r•   ÚDirDBM.getModificationTime)  s]   € ô �C‹yœEÓ!ÜÐ6Ó7Ð7Ø�‰×$Ñ$ T§\¡\°#Ó%6Ó7ˆØ�;‰;�=‰=Ø×+Ñ+Ó-Ð-ä˜3“-Ðr%   )r   r   )r   rL   ÚreturnÚNone)r/   rL   r—   rL   )r   úFilePath[AnyStr]r—   rL   )r   r™   r@   rL   r—   r˜   )r—   Úint)r/   rL   rQ   rL   r—   r˜   )r/   rL   r—   r˜   )r—   zIterable[bytes])r—   zIterable[tuple[bytes, bytes]])rg   rL   r—   Úbool)rg   rL   rt   rL   r—   rL   )rg   rL   r—   rL   )rg   rL   r~   r
   r—   z
bytes | _Trx   )rg   rL   r~   z	_T | Noner—   zbytes | _T | None)r„   zMapping[bytes, bytes]r—   r˜   )r   rL   r—   r   )r—   r˜   )rg   rL   r—   Úfloat)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r#   r0   r4   r:   rA   rG   rS   rX   r[   ra   rh   rk   rp   ru   r   ry   r�   r†   r�   rŠ   r’   r•   Ú__static_attributes__rs   r%   r"   r   r       sœ   † ñô&ô6NôNôôô.ô ôDô$,ô$Pôôô3ôð óó ðð óó ðöô!ôôô&ô÷
 r%   r   c                  ó$   • \ rS rSrSrS rS rSrg)ÚShelfi9  z³
A directory with a DBM shelf interface.

This class presents a hash-like interface to a directory of small,
flat files. Keys must be strings, but values can be any given object.
c                ó\   • [         R                  " U5      n[        R                  XU5        g)z™
C{shelf[foo] = bar}
Create or modify a textfile in this directory.

@type k: str
@param k: The key to set

@param v: The value to associate with C{key}
N)ÚpickleÚdumpsr   rS   )r   r/   rQ   s      r"   rS   ÚShelf.__setitem__A  s!   € ô �LŠL˜‹OˆÜ×Ñ˜4 AÕ&r%   c                óT   • [         R                  " [        R                  X5      5      $ )zá
C{dirdbm[foo]}
Get and unpickle the contents of a file in this directory.

@type k: bytes
@param k: The key to lookup

@return: The value associated with the given key
@raise KeyError: Raised if the given key does not exist
)r¦   Úloadsr   rX   r.   s     r"   rX   ÚShelf.__getitem__N  s   € ô �|Š|œF×.Ñ.¨tÓ7Ó8Ð8r%   rs   N)r�   rž   rŸ   r    r¡   rS   rX   r¢   rs   r%   r"   r¤   r¤   9  s   † ñò'õ9r%   r¤   c                ó   • [        U 5      $ )z�
This is for 'anydbm' compatibility.

@param file: The parameter to pass to the DirDBM constructor.

@param flag: ignored
@param mode: ignored
)r   )ÚfileÚflagÚmodes      r"   r7   r7   \  s   € ô �$‹<Ðr%   )r7   r   r¤   )NN)r¡   Ú
__future__r   r+   r   r   r¦   Útypingr   r   r   r   r   Útwisted.python.filepathr	   r
   r   r¤   r7   Ú__all__rs   r%   r"   Ú<module>r´      sV   ðñõ #ã Û Û 	Û ß ?Õ ?å ,áˆT˜Ñ€÷V ñ V ôr 9ˆFô  9ôF	ò &�r%   