ó
    Ñ]j{"  ã                   óê   • S r SrSSKJr  SSKrSSKrSSKr SSKJr	   SSKrSSKrSSKrS r\" 5       r " S S\	R&                  5      r " S S	5      rg! \
 a    SSKr	 NCf = f! \
 a    SSKr NNf = f)
a]  
Vendoring of pickleshare, reduced to used functionalities.

---

PickleShare - a small 'shelve' like datastore with concurrency support

Like shelve, a PickleShareDB object acts like a normal dictionary. Unlike
shelve, many processes can access the database simultaneously. Changing a
value in database is immediately visible to other processes accessing the
same database.

Concurrency is possible because the values are stored in separate files. Hence
the "database" is a directory where *all* files are governed by PickleShare.

Example usage::

    from pickleshare import *
    db = PickleShareDB('~/testpickleshare')
    db.clear()
    print "Should be empty:",db.items()
    db['hello'] = 15
    db['aku ankka'] = [1,2,313]
    db['paths/are/ok/key'] = [1,(5,46)]
    print db.keys()
    del db['aku ankka']

This module is certainly not ZODB, but can be used for low-load
(non-mission-critical) situations where tiny code size trumps the
advanced features of a "real" object database.

Installation guide: pip install pickleshare

Author: Ville Vainio <vivainio@gmail.com>
License: MIT open source license.

z0.7.5é    )ÚPathNc                 ó<   • S[        [        U 5      S-  5      -  SS  $ )Nz%02xé   éþÿÿÿ)ÚabsÚhash)Úkeys    ÚY/home/mande/repo/quber/.venv/lib/python3.13/site-packages/IPython/external/pickleshare.pyÚgethashfiler   :   s!   € Ø”Sœ˜c› S™Ó)Ñ)¨2¨3Ð/Ð/ó    c                   óˆ   • \ rS rSrSrS rS rS rS r\	S4S jr
S	 rS
 rS rS rSS jrS rS rS rSS jrS rS rSrg)ÚPickleShareDBéA   z5The main 'connection' object for PickleShare databasec                 óÈ  • [        U[        5      (       d  [        U5      n[        R                  R	                  [        R                  R                  U5      5      n[        U5      U l        U R                  R                  5       (       d   U R                  R                  SS9  0 U l        g! [         a)  nUR                  [        R                  :w  a  e  SnAN6SnAff = f)z9Return a db object that will manage the specied directoryT©ÚparentsN)Ú
isinstanceÚstrÚosÚpathÚabspathÚ
expanduserr   ÚrootÚis_dirÚmkdirÚOSErrorÚerrnoÚEEXISTÚcache)Úselfr   Úes      r
   Ú__init__ÚPickleShareDB.__init__D   s¡   € ä˜$¤×$Ñ$Ü�t“9ˆDÜ�w‰w�‰œrŸw™w×1Ñ1°$Ó7Ó8ˆÜ˜“JˆŒ	Ø�y‰y×Ñ×!Ñ!ðØ—	‘	—‘¨�Ñ-ð
 ˆ�
øô	 ó Ø—7‘7œeŸl™lÓ*Øô +ûðús   ÂB. Â.
C!Â8CÃC!c                 óè  • U R                   U-  n UR                  5       [        R                     nX R
                  ;   a'  X0R
                  U   S   :X  a  U R
                  U   S   $  UR                  S5       n[        R                  " UR                  5       5      nSSS5        WU4U R
                  U'   U$ ! [         a    [	        U5      ef = f! , (       d  f       N:= f!   [	        U5      e= f)zdb['key'] readingé   r   ÚrbN)
r   ÚstatÚST_MTIMEr   ÚKeyErrorr   ÚopenÚpickleÚloadsÚread)r    r	   ÚfilÚmtimeÚfÚobjs         r
   Ú__getitem__ÚPickleShareDB.__getitem__U   sÏ   € à�i‰i˜#‰oˆð	 Ø—H‘H“JœtŸ}™}Ñ-ˆEð —*‘*Ó ¯*©*°S©/¸!Ñ*<Ó!<Ø—:‘:˜c‘? 1Ñ%Ð%ð	 à—‘˜$” 1Ü—l’l 1§6¡6£8Ó,�÷  ð
  ˜,ˆ�
‰
�3‰Øˆ
øô ó 	 Ü˜3“-Ðð	 ú÷  •ûð	 Ü˜3“-Ðús5   ‘!B: Á)C$ Á:%CÂC$ Â:CÃ
C!ÃC$ Ã!C$ Ã$C1c                 óÎ  • U R                   U-  nUR                  nU(       a$  UR                  5       (       d  UR                  SS9  UR	                  S5       n[
        R                  " X%SS9  SSS5         X#R                  5       R                  4U R                  U'   g! , (       d  f       N8= f! [         a)  nUR                  [        R                  :w  a  e  SnAgSnAff = f)zdb['key'] = 5Tr   Úwbé   )ÚprotocolN)r   Úparentr   r   r*   r+   Údumpr'   Úst_mtimer   r   r   ÚENOENT)r    r	   Úvaluer.   r8   r0   r!   s          r
   Ú__setitem__ÚPickleShareDB.__setitem__i   s§   € à�i‰i˜#‰oˆØ—‘ˆÞ˜&Ÿ-™-Ÿ/™/Ø�L‰L ˆLÑ&ð �X‰X�dŒ^˜qÜ�KŠK˜¨1Ò-÷ ð	Ø$§h¡h£j×&9Ñ&9Ð:ˆD�J‰J�sŠO÷ �^ûô ó 	Ø�w‰wœ%Ÿ,™,Ó&Øô 'ûð	ús$   ÁB Á7(B1 Â 
B.Â1
C$Â;CÃC$c                 óØ   • U R                   U-  nUR                  5       (       d  UR                  5         U[        U5      -  nU R	                  U0 5      nUR                  X#05        X`U'   g)z
hashed setN)r   r   r   r   ÚgetÚupdate)r    Úhashrootr	   r<   ÚhrootÚhfileÚds          r
   ÚhsetÚPickleShareDB.hsety   sX   € à—	‘	˜HÑ$ˆØ�|‰|�~‰~Ø�K‰KŒMØœ CÓ(Ñ(ˆØ�H‰H�U˜BÓˆØ	�‰�#�ÔØˆUŠr   Tc                 óø   • U R                   U-  nU[        U5      -  nU R                  U[        5      nU[        L a.  U(       a  U[        L a  [	        U5      eU$ U R                  U5      nUR                  X#5      $ )z
hashed get)r   r   r@   Ú	_sentinelr)   Úhdict)r    rB   r	   ÚdefaultÚ	fast_onlyrC   rD   rE   s           r
   ÚhgetÚPickleShareDB.hgetƒ   so   € à—	‘	˜HÑ$ˆØœ CÓ(Ñ(ˆà�H‰H�UœIÓ&ˆà”	Š>ÞØœiÒ'Ü" 3›-Ð'à�ð —
‘
˜8Ó$ˆAà�u‰u�SÓ"Ð"r   c                 ój  • U R                  US-   5      nUR                  5         [        U5      =(       a    US   =(       d    SnUR                  S5      (       a	  U/USS -   n0 nU H(  n UR	                  X   5        U R                  U5        M*     U$ ! [
         a    [        SUS5        X	  N2f = f)z<Get all data contained in hashed category 'hashroot' as dictú/*éÿÿÿÿÚ ÚxxNÚCorruptz!deleted - hset is not threadsafe!)ÚkeysÚsortÚlenÚendswithrA   r)   ÚprintÚuncache)r    rB   ÚhfilesÚlastÚallr0   s         r
   rJ   ÚPickleShareDB.hdict–   s®   € à—‘˜8 d™?Ó+ˆØ�‰ŒÜ�6‹{×)˜v b™z×/¨RˆØ�=‰=˜×Ñà�V˜f S b˜kÑ)ˆFàˆãˆAðØ—
‘
˜4™7Ô#ð
 �L‰L˜ŽOñ ð ˆ
øô ó Ü�i Ð$GÔHØ’Gðús   Á,BÂB2Â1B2c                 ó  • U R                  US-   5      n0 nU H'  nUR                  X   5        U R                  U5        M)     X0US-   '   U H4  nU R                  U-  nUR                  S:X  a  M$  UR                  5         M6     g)z’Compress category 'hashroot', so hset is fast again

hget will fail if fast_only is True for compressed items (that were
hset before hcompress).

rP   z/xxrS   N)rU   rA   rZ   r   ÚnameÚunlink)r    rB   r[   r]   r0   Úps         r
   Ú	hcompressÚPickleShareDB.hcompress­   s{   € ð —‘˜8 d™?Ó+ˆØˆÛˆAà�J‰J�t‘wÔØ�L‰L˜ŽOñ ð
 "%ˆX˜ÑÑÛˆAØ—	‘	˜A‘ˆAØ�v‰v˜‹~ÙØ�H‰HŽJò	 r   c                 óœ   • U R                   U-  nU R                  R                  US5         UR                  5         g! [         a     gf = f)zdel db["key"]N)r   r   Úpopra   r   )r    r	   r.   s      r
   Ú__delitem__ÚPickleShareDB.__delitem__Â   sC   € à�i‰i˜#‰oˆØ�
‰
�‰�s˜DÔ!ð	Ø�J‰J�LøÜó 	ñ ð	ús   ­> ¾
AÁ
Ac                 ój   • [        UR                  U R                  5      5      R                  SS5      $ )z#Make a key suitable for user's eyesÚ\Ú/)r   Úrelative_tor   Úreplace)r    rb   s     r
   Ú_normalizedÚPickleShareDB._normalizedÍ   s'   € ä�1—=‘= §¡Ó+Ó,×4Ñ4°T¸3Ó?Ð?r   Nc                 óð   • Uc  U R                   R                  S5      nOU R                   R                  U5      nU Vs/ s H*  o3R                  5       (       d  M  U R	                  U5      PM,     sn$ s  snf )z+All keys in DB, or all keys matching a globÚ*)r   ÚrglobÚglobÚis_filern   )r    ÚglobpatÚfilesrb   s       r
   rU   ÚPickleShareDB.keysÑ   sY   € ð ‰?Ø—I‘I—O‘O CÓ(‰Eà—I‘I—N‘N 7Ó+ˆEÙ-2ÓBªU¨·i±i·kÓ#�× Ñ  Ö#©UÑBÐBùÒBs   ¿A3ÁA3c                 ó4   • [        U R                  5       5      $ ©N)ÚiterrU   ©r    s    r
   Ú__iter__ÚPickleShareDB.__iter__Ú   s   € Ü�D—I‘I“KÓ Ð r   c                 ó4   • [        U R                  5       5      $ ry   )rW   rU   r{   s    r
   Ú__len__ÚPickleShareDB.__len__Ý   s   € Ü�4—9‘9“;ÓÐr   c                 ój   • U(       d  0 U l         U H  nU R                   R                  US5        M!     g)zªRemoves all, or specified items from cache

Use this after reading a large amount of large objects
to free up memory, when you won't be needing the objects
for a while.

N)r   rf   )r    ÚitemsÚits      r
   rZ   ÚPickleShareDB.uncacheà   s*   € ö ØˆDŒJÛˆBØ�J‰J�N‰N˜2˜tÖ$ò r   c                 óì   • S/S-  S/S-  -   S/-   nSnSn  X   nU$ ! [          a     Of = fXR:”  a  [        U5      e[        R                  " X4   5        XSU   -  nU[        U5      S-
  :  a  US-  nM_  )aÅ  Wait (poll) for a key to get a value

Will wait for `maxwaittime` seconds before raising a KeyError.
The call exits normally if the `key` field in db gets a value
within the timeout period.

Use this for synchronizing different processes or for ensuring
that an unfortunately timed "db['key'] = newvalue" operation
in another process (which causes all 'get' operation to cause a
KeyError for the duration of pickling) won't screw up your program
logic.
gš™™™™™É?é   g      à?r6   r%   r   )r)   ÚtimeÚsleeprW   )r    r	   ÚmaxwaittimeÚwtimesÚtriesÚwaitedÚvals          r
   ÚwaitgetÚPickleShareDB.waitgetí   s›   € ð �˜‘˜c˜U Q™YÑ&¨!¨Ñ,ˆØˆØˆØðØ‘i�Ø�
øÜó Ùðúð Ó#Ü˜s“mÐ#ä�JŠJ�v‘}Ô%Ø˜U‘mÑ#ˆFØ”s˜6“{ Q‘Ó&Ø˜‘
�ñ s   ˜ ž
+ª+c                 ó   • [        X5      $ )z)Get a convenient link for accessing items)ÚPickleShareLink)r    Úfolders     r
   ÚgetlinkÚPickleShareDB.getlink  s   € ä˜tÓ,Ð,r   c                 ó    • SU R                   -  $ )NzPickleShareDB('%s'))r   r{   s    r
   Ú__repr__ÚPickleShareDB.__repr__  s   € Ø$ t§y¡yÑ0Ð0r   )r   r   ry   )é<   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r"   r2   r=   rF   rI   rM   rJ   rc   rg   rn   rU   r|   r   rZ   rŽ   r“   r–   Ú__static_attributes__© r   r
   r   r   A   s_   † Ù?òò"ò(ò ð +4¸tô #ò&ò.ò*	ò@ôCò!ò ò%ôò@-õ1r   r   c                   ó0   • \ rS rSrSrS rS rS rS rSr	g)	r‘   i  zÇA shortdand for accessing nested PickleShare data conveniently.

Created through PickleShareDB.getlink(), example::

    lnk = db.getlink('myobjects/test')
    lnk.foo = 2
    lnk.bar = lnk.foo + 5

c                 óJ   • U R                   R                  [        5       5        g ry   )Ú__dict__rA   Úlocals)r    ÚdbÚkeydirs      r
   r"   ÚPickleShareLink.__init__   s   € Ø�‰×ÑœV›XÕ&r   c                 óL   • U R                   S   U R                   S   S-   U-      $ )Nr¤   r¥   rk   )r¢   )r    r	   s     r
   Ú__getattr__ÚPickleShareLink.__getattr__#  s)   € Ø�}‰}˜TÑ" 4§=¡=°Ñ#:¸SÑ#@À3Ñ#FÑGÐGr   c                 ó@   • X R                   U R                  S-   U-   '   g )Nrk   )r¤   r¥   )r    r	   r�   s      r
   Ú__setattr__ÚPickleShareLink.__setattr__&  s   € Ø+.�‰�—‘˜cÑ! CÑ'Ò(r   c                 ó
  • U R                   S   nUR                  U R                   S   S-   5      nSU R                   S   < SSR                  U Vs/ s H  n[        U5      R	                  5       PM     sn5      < S3$ s  snf )Nr¤   r¥   rP   z<PickleShareLink 'z': Ú;Ú>)r¢   rU   Újoinr   Úbasename)r    r¤   rU   Úks       r
   r–   ÚPickleShareLink.__repr__)  sm   € Ø�]‰]˜4Ñ ˆØ�w‰w�t—}‘} XÑ.°Ñ5Ó6‰à�M‰M˜(Ô#Ø�H‰H±$Ó7²$¨Q”d˜1“g×&Ñ&Ö(±$Ñ7Ö8ð
ð 	
ùâ7s   Á#B rŸ   N)
r™   rš   r›   rœ   r�   r"   r¨   r«   r–   rž   rŸ   r   r
   r‘   r‘     s   † ñò'òHò/õ
r   r‘   )r�   Ú__version__Úpathlibr   r   r'   r‡   Úcollections.abcÚabcÚcollections_abcÚImportErrorÚcollectionsÚcPickler+   r   Úsysr   ÚobjectrI   ÚMutableMappingr   r‘   rŸ   r   r
   Ú<module>r¿      sŠ   ðñ$ðL €å ÷ Ó ð*Ý-ðÛó Û 
ò0ñ ‹H€	ôQ1�O×2Ñ2ô Q1÷h
ò 
øðK ó *Ý)ð*ûð ó Ýðús"   ˜A ŸA% Á
A"Á!A"Á%
A2Á1A2