Ë
    pPêjó!  ã                  óÄ   — d Z ddlmZ ddlZddlZddlZddlmZ ddlm	Z	 ddl
mZmZ ddlmZmZ erddlZ G d„ d	«      Zdd
„Z G d„ de«      ZdZdd„Z G d„ de«      Zy)a:  Interfaces for accessing metadata.

We provide two implementations.
 * The "classic" file system implementation, which uses a directory
   structure of files.
 * A hokey sqlite backed implementation, which basically simulates
   the file system in an effort to work around poor file system performance
   on OS X.
é    )ÚannotationsN)Úabstractmethod)ÚIterable)ÚTYPE_CHECKINGÚAny)Úhash_path_stemÚos_path_joinc                  ó˜   — e Zd ZdZedd„«       Zedd„«       Zeddd„«       Zedd„«       Zedd„«       Z	dd„Z
edd	„«       Zedd
„«       Zy)ÚMetadataStorez'Generic interface for metadata storage.c                 ó   — y)zfRead the mtime of a metadata entry.

        Raises FileNotFound if the entry does not exist.
        N© ©ÚselfÚnames     úS/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/mypy/metastore.pyÚgetmtimezMetadataStore.getmtime   ó   � ó    c                 ó   — y)ziRead the contents of a metadata entry.

        Raises FileNotFound if the entry does not exist.
        Nr   r   s     r   ÚreadzMetadataStore.read&   r   r   Nc                 ó   — y)zÜWrite a metadata entry.

        If mtime is specified, set it as the mtime of the entry. Otherwise,
        the current time is used.

        Returns True if the entry is successfully written, False otherwise.
        Nr   )r   r   ÚdataÚmtimes       r   ÚwritezMetadataStore.write-   r   r   c                 ó   — y)zDelete a metadata entryNr   r   s     r   ÚremovezMetadataStore.remove7   r   r   c                 ó   — y)zÏIf the backing store requires a commit, do it.

        But N.B. that this is not *guaranteed* to do anything, and
        there is no guarantee that changes are not made until it is
        called.
        Nr   ©r   s    r   ÚcommitzMetadataStore.commit;   r   r   c                ó$   — | j                  «        y)zºCommit changes related to a specific cache path.

        For sharded stores, this commits only the shard containing the path.
        Default implementation commits everything.
        N)r   r   s     r   Úcommit_pathzMetadataStore.commit_pathD   s   € ð 	�‰�r   c                 ó   — y ©Nr   r   s    r   Úlist_allzMetadataStore.list_allL   s   € Ø),r   c                 ó   — y)z0Release any resources held by the backing store.Nr   r   s    r   ÚclosezMetadataStore.closeO   r   r   ©r   ÚstrÚreturnÚfloat©r   r(   r)   Úbytesr#   ©r   r(   r   r,   r   zfloat | Noner)   Úbool©r   r(   r)   ÚNone©r)   r0   ©r)   zIterable[str])Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r   r   r!   r$   r&   r   r   r   r   r      sŽ   „ Ù1àòó ðð òó ðð óó ðð ò&ó ð&ð òó ðóð Ú,ó Ø,àò?ó ñ?r   r   c                 óp   — t        j                  t        j                  d«      «      j	                  d«      S )Né   Úascii)ÚbinasciiÚhexlifyÚosÚurandomÚdecoder   r   r   Úrandom_stringr?   T   s&   € Ü×ÑœBŸJ™J q›MÓ*×1Ñ1°'Ó:Ð:r   c                  óN   — e Zd Zd
d„Zdd„Zdd„Zddd„Zdd„Zdd„Zdd„Z	dd	„Z
y)ÚFilesystemMetadataStorec                ó`   — |j                  t        j                  «      rd | _        y || _        y r#   )Ú
startswithr<   ÚdevnullÚcache_dir_prefix)r   rE   s     r   Ú__init__z FilesystemMetadataStore.__init__Y   s&   € ð ×&Ñ&¤r§z¡zÔ2Ø$(ˆDÕ!à$4ˆDÕ!r   c                ó¦   — | j                   s
t        «       ‚t        t        j                  j                  t        | j                   |«      «      «      S r#   )rE   ÚFileNotFoundErrorÚintr<   Úpathr   r	   r   s     r   r   z FilesystemMetadataStore.getmtimeb   s;   € Ø×$Ò$Ü#Ó%Ð%ä”2—7‘7×#Ñ#¤L°×1FÑ1FÈÓ$MÓNÓOÐOr   c                ó
  — t         j                  j                  |«      rJ d«       ‚| j                  s
t	        «       ‚t        t        | j                  |«      dd¬«      5 }|j                  «       cd d d «       S # 1 sw Y   y xY w)NúDon't use absolute paths!Úrbr   )Ú	buffering)r<   rJ   ÚisabsrE   rH   Úopenr	   r   )r   r   Úfs      r   r   zFilesystemMetadataStore.readh   sj   € Ü—7‘7—=‘= Ô&ÐCÐ(CÓCÐ&à×$Ò$Ü#Ó%Ð%ä”,˜t×4Ñ4°dÓ;¸TÈQÔOð 	ÐSTØ—6‘6“8÷	÷ 	ò 	ús   ÁA9Á9BNc                ó  — t         j                  j                  |«      rJ d«       ‚| j                  syt	        | j                  |«      }|dz   t        «       z   }	 t        j                  t         j                  j                  |«      d¬«       t        |d«      5 }|j                  |«       d d d «       t        j                  ||«       |�t        j                  |||f¬«       y# 1 sw Y   Œ;xY w# t        $ r Y yw xY w)NrL   Fú.T©Úexist_okÚwb)Útimes)r<   rJ   rO   rE   r	   r?   ÚmakedirsÚdirnamerP   r   ÚreplaceÚutimeÚOSError)r   r   r   r   rJ   Útmp_filenamerQ   s          r   r   zFilesystemMetadataStore.writeq   sÖ   € Ü—7‘7—=‘= Ô&ÐCÐ(CÓCÐ&à×$Ò$Øä˜D×1Ñ1°4Ó8ˆØ˜c‘z¤M£OÑ3ˆð		Ü�K‰KœŸ™Ÿ™¨Ó-¸Õ=Ü�l DÓ)ð ¨QØ—‘˜”÷ä�J‰J�| TÔ*ØÐ Ü—‘˜ e¨U ^Õ4ð ÷ð ûô ò 	Ùð	ús+   ÁA C3 ÂC'Â-9C3 Ã'C0Ã,C3 Ã3	C?Ã>C?c                ó‚   — | j                   s
t        «       ‚t        j                  t	        | j                   |«      «       y r#   )rE   rH   r<   r   r	   r   s     r   r   zFilesystemMetadataStore.remove…   s-   € Ø×$Ò$Ü#Ó%Ð%ä
�	‰	”,˜t×4Ñ4°dÓ;Õ<r   c                 ó   — y r#   r   r   s    r   r   zFilesystemMetadataStore.commit‹   ó   € Ør   c              #  ó.  K  — | j                   sy t        j                  | j                   «      D ]b  \  }}}t        j                  j	                  || j                   «      }|D ]-  }t        j                  j                  t        ||«      «      –— Œ/ Œd y ­wr#   )rE   r<   ÚwalkrJ   ÚrelpathÚnormpathr	   )r   ÚdirÚ_ÚfilesÚfiles        r   r$   z FilesystemMetadataStore.list_allŽ   s   è ø€ Ø×$Ò$ØäŸW™W T×%:Ñ%:Ó;ò 	@‰MˆC��EÜ—'‘'—/‘/ # t×'<Ñ'<Ó=ˆCØò @�Ü—g‘g×&Ñ&¤|°C¸Ó'>Ó?Ó?ñ@ñ	@ùs   ‚BBc                 ó   — y r#   r   r   s    r   r&   zFilesystemMetadataStore.close—   r`   r   )rE   r(   r)   r0   r'   r+   r#   r-   r/   r1   r2   )r3   r4   r5   rF   r   r   r   r   r   r$   r&   r   r   r   rA   rA   X   s,   „ ó5óPóôó(=óó@ôr   rA   zš
CREATE TABLE IF NOT EXISTS files2 (
    path TEXT UNIQUE NOT NULL,
    mtime REAL,
    data BLOB
);
CREATE INDEX IF NOT EXISTS path_idx on files2(path);
c                óº   — dd l }|j                  j                  | d¬«      }|j                  d«       |r|j                  d«       |j	                  t
        «       |S )Nr   F)Úcheck_same_threadzPRAGMA synchronous=OFFzPRAGMA journal_mode=WAL)Úsqlite3.dbapi2Údbapi2ÚconnectÚexecuteÚexecutescriptÚSCHEMA)Údb_fileÚset_journal_modeÚsqlite3Údbs       r   Ú
connect_dbrv   ¥   sP   € Ûà	�‰×	Ñ	 ¸5Ð	Ó	A€Bð ‡J�JÐ'Ô(ÙØ
�
‰
Ð,Ô-Ø×Ñ”VÔØ€Ir   c                  óˆ   — e Zd Z	 d	 	 	 	 	 	 	 dd„Zdd„Zdd„Zdd„Zdd„Zdd„Zddd„Z	dd	„Z
dd
„Zdd„Zdd„Zdd„Zdd„Zy)ÚSqliteMetadataStorec                óœ  — g | _         || _        t        «       | _        |j	                  t
        j                  «      ry t        j                  |d¬«       |dk  r0| j                   j                  t        t        |d«      |«      «       y t        |«      D ]5  }| j                   j                  t        t        |d|› d�«      |«      «       Œ7 y )NTrT   é   zcache.dbzcache.z.db)ÚdbsÚ
num_shardsÚsetÚdirty_shardsrC   r<   rD   rX   Úappendrv   r	   Úrange)r   rE   rs   r|   Úis        r   rF   zSqliteMetadataStore.__init__´   s«   € ð .0ˆŒØ$ˆŒÜ&)£eˆÔØ×&Ñ&¤r§z¡zÔ2Øä
�‰Ð$¨tÕ4Ø˜Š?Ø�H‰H�O‰OÜœ<Ð(8¸*ÓEÐGWÓXõô ˜:Ó&ò �Ø—‘—‘Üœ|Ð,<ÀÀqÀcÈ¸oÓNÐP`Óaõñr   c                óR   — | j                   dk  ryt        |«      | j                   z  S )Nrz   r   )r|   r   r   s     r   Ú_shard_indexz SqliteMetadataStore._shard_indexË   s%   € Ø�?‰?˜aÒØÜ˜dÓ# d§o¡oÑ5Ð5r   c                ój   — | j                   s
t        «       ‚| j                   | j                  |«         S r#   )r{   rH   rƒ   r   s     r   Ú_db_forzSqliteMetadataStore._db_forÐ   s,   € Ø�xŠxÜ#Ó%Ð%Ø�x‰x˜×)Ñ)¨$Ó/Ñ0Ð0r   c                óº   — | j                  |«      }|j                  d|› d�|f«      }|j                  «       }|s
t        «       ‚t	        |«      dk(  sJ ‚|d   d   S )NzSELECT z FROM files2 WHERE path = ?rz   r   )r…   ro   ÚfetchallrH   Úlen)r   r   Úfieldru   ÚcurÚresultss         r   Ú_queryzSqliteMetadataStore._queryÕ   sc   € à�\‰\˜$ÓˆØ�j‰j˜7 5 'Ð)DÐEÈÀwÓOˆØ—,‘,“.ˆÙÜ#Ó%Ð%Ü�7‹|˜qÒ Ð Ð Ø�q‰z˜!‰}Ðr   c                óN   — | j                  |d«      }t        |t        «      sJ ‚|S )Nr   )rŒ   Ú
isinstancer*   )r   r   r   s      r   r   zSqliteMetadataStore.getmtimeß   s'   € Ø—‘˜D 'Ó*ˆÜ˜%¤Ô'Ð'Ð'Øˆr   c                óN   — | j                  |d«      }t        |t        «      sJ ‚|S )Nr   )rŒ   rŽ   r,   )r   r   r   s      r   r   zSqliteMetadataStore.readä   s'   € Ø�{‰{˜4 Ó(ˆÜ˜$¤Ô&Ð&Ð&Øˆr   Nc                ó  — dd l }| j                  sy	 |€t        j                  «       }| j                  |«      }|j	                  d|||f«       | j
                  j                  | j                  |«      «       y# |j                  $ r Y yw xY w)Nr   Fz@INSERT OR REPLACE INTO files2(path, mtime, data) VALUES(?, ?, ?)T)	rt   r{   Útimer…   ro   r~   Úaddrƒ   ÚOperationalError)r   r   r   r   rt   ru   s         r   r   zSqliteMetadataStore.writeé   s‹   € Ûà�xŠxØð
	Øˆ}ÜŸ	™	›�Ø—‘˜dÓ#ˆBØ�J‰JØRØ�u˜dÐ#ôð ×Ñ×!Ñ! $×"3Ñ"3°DÓ"9Ô:ð øð ×'Ñ'ò 	Ùð	ús   “A&A: Á:BÂBc                ó    — | j                  |«      }|j                  d|f«       | j                  j                  | j	                  |«      «       y )Nz!DELETE FROM files2 WHERE path = ?)r…   ro   r~   r’   rƒ   )r   r   ru   s      r   r   zSqliteMetadataStore.removeû   s@   € Ø�\‰\˜$ÓˆØ
�
‰
Ð6¸¸Ô@Ø×Ñ×Ñ˜d×/Ñ/°Ó5Õ6r   c                ó”   — | j                   D ]  }| j                  |   j                  «        Œ! | j                   j                  «        y r#   )r~   r{   r   Úclear)r   r�   s     r   r   zSqliteMetadataStore.commit   s=   € Ø×"Ñ"ò 	!ˆAØ�H‰H�Q‰K×ÑÕ ð	!à×Ñ×ÑÕ!r   c                ó´   — | j                  |«      }|| j                  v r9| j                  |   j                  «        | j                  j	                  |«       y y r#   )rƒ   r~   r{   r   Údiscard)r   r   r�   s      r   r!   zSqliteMetadataStore.commit_path  sM   € Ø×Ñ˜dÓ#ˆØ�×!Ñ!Ñ!Ø�H‰H�Q‰K×ÑÔ Ø×Ñ×%Ñ% aÕ(ð "r   c              #  óh   K  — | j                   D ]  }|j                  d«      D ]	  }|d   –— Œ Œ! y ­w)NzSELECT path FROM files2r   )r{   ro   )r   ru   Úrows      r   r$   zSqliteMetadataStore.list_all  s;   è ø€ Ø—(‘(ò 	ˆBØ—z‘zÐ";Ó<ò �Ø˜!‘f“ññ	ùs   ‚02c                óz   — | j                   D ]  }|j                  «        Œ | j                   j                  «        y r#   )r{   r&   r–   )r   ru   s     r   r&   zSqliteMetadataStore.close  s,   € Ø—(‘(ò 	ˆBØ�H‰H�Jð	à�‰�‰Õr   c                ó$   — | j                  «        y r#   )r&   r   s    r   Ú__del__zSqliteMetadataStore.__del__  s   € Ø�
‰
�r   )Frz   )rE   r(   rs   r.   r|   rI   r)   r0   )r   r(   r)   rI   )r   r(   r)   úsqlite3.Connection)r   r(   r‰   r(   r)   r   r'   r+   r#   r-   r/   r1   r2   )r3   r4   r5   rF   rƒ   r…   rŒ   r   r   r   r   r   r!   r$   r&   r�   r   r   r   rx   rx   ³   sf   „ àWXðØ #ðØ7;ðØQTðà	óó.6ó
1ó
óó
ô
ó$7ó
"ó
)óó
ô
r   rx   )r)   r(   )rr   r(   rs   r.   r)   rž   )r6   Ú
__future__r   r:   r<   r‘   Úabcr   Úcollections.abcr   Útypingr   r   Ú	mypy.utilr   r	   rt   r   r?   rA   rq   rv   rx   r   r   r   ú<module>r¤      se   ðñõ #ã Û 	Û Ý Ý $ß %ç 2áó ÷5?ñ 5?óp;ô@˜mô @ðF
€óôc˜-õ cr   