Ë
    #täiP!  ã                   óF   — d dl Z ddlmZ ddlmZ ddlmZ  G d„ de«      Zy)	é    Né   )ÚAbstractFileSystem)Úinfer_storage_optionsé   )Ú
MemoryFilec                   óŽ   ‡ — e Zd ZdZdZdZdZ	 	 	 	 	 dˆ fd„	Zed„ «       Z	d„ Z
d„ Zed	„ «       Zed
„ «       Zdd„Zdd„Zdd„Zˆ xZS )ÚGistFileSystema  
    Interface to files in a single GitHub Gist.

    Provides read-only access to a gist's files. Gists do not contain
    subdirectories, so file listing is straightforward.

    Parameters
    ----------
    gist_id: str
        The ID of the gist you want to access (the long hex value from the URL).
    filenames: list[str] (optional)
        If provided, only make a file system representing these files, and do not fetch
        the list of all files for this gist.
    sha: str (optional)
        If provided, fetch a particular revision of the gist. If omitted,
        the latest revision is used.
    username: str (optional)
        GitHub username for authentication.
    token: str (optional)
        GitHub personal access token (required if username is given), or.
    timeout: (float, float) or float, optional
        Connect and read timeouts for requests (default 60s each).
    kwargs: dict
        Stored on `self.request_kw` and passed to `requests.get` when fetching Gist
        metadata or reading ("opening") a file.
    Úgistz&https://api.github.com/gists/{gist_id}z,https://api.github.com/gists/{gist_id}/{sha}c                 óä   •— t         ‰| �  «        || _        || _        || _        |�|€t        d«      ‚|| _        || _        || _        |�|nd| _	        | j                  «       | j                  d<   y )NzUser auth requires a token)é<   r   Ú )ÚsuperÚ__init__Úgist_idÚ	filenamesÚshaÚ
ValueErrorÚusernameÚtokenÚ
request_kwÚtimeoutÚ_fetch_file_listÚdircache)	Úselfr   r   r   r   r   r   ÚkwargsÚ	__class__s	           €új/Volumes/fast/ai/experiments/MLX_z-image/.venv/lib/python3.12/site-packages/fsspec/implementations/gist.pyr   zGistFileSystem.__init__(   sw   ø€ ô 	‰ÑÔØˆŒØ"ˆŒØˆŒØÐ E MÜÐ9Ó:Ð:Ø ˆŒØˆŒ
Ø ˆŒà")Ð"5‘w¸8ˆŒð !×1Ñ1Ó3ˆ�‰�bÒó    c                 óö   — ddddœi}|j                  | j                  «       | j                  r)| j                  r| j                  | j                  f|d<   |S | j                  rd| j                  › �|d   d<   |S )z?Auth parameters passed to 'requests' if we have username/token.Úheaderszapplication/vnd.github+jsonz
2022-11-28)ÚAcceptzX-GitHub-Api-VersionÚauthzBearer ÚAuthorization)Úupdater   r   r   )r   Úkws     r   r%   zGistFileSystem.kwA   s|   € ð Ø7Ø(4ñð
ˆð 	�	‰	�$—/‘/Ô"Ø�=Š=˜TŸZšZØŸ-™-¨¯©Ð4ˆBˆv‰Jð ˆ	ð �ZŠZØ/6°t·z±z°lÐ-CˆBˆy‰M˜/Ñ*Øˆ	r   c                 óÒ  — | j                   r2| j                  j                  | j                  | j                   ¬«      }n&| j                  j                  | j                  ¬«      }t        j                  |fd| j                  i| j                  ¤Ž}|j                  dk(  r)t        d| j                  › d| j                   xs d› �«      ‚|j                  «        |j                  «       S )z[
        Fetch the JSON metadata for this gist (possibly for a specific revision).
        )r   r   )r   r   é”  zGist not found: Ú@Úlatest)r   Úgist_rev_urlÚformatr   Úgist_urlÚrequestsÚgetr   r%   Ústatus_codeÚFileNotFoundErrorÚraise_for_statusÚjson)r   ÚurlÚrs      r   Ú_fetch_gist_metadataz#GistFileSystem._fetch_gist_metadataQ   s¹   € ð �8Š8Ø×#Ñ#×*Ñ*°4·<±<ÀTÇXÁXÐ*ÓN‰Cà—-‘-×&Ñ&¨t¯|©|Ð&Ó<ˆCä�L‰L˜Ñ> d§l¡lÐ>°d·g±gÑ>ˆØ�=‰=˜CÒÜ#Ø" 4§<¡< .°°$·(±(Ò2F¸hÐ1GÐHóð ð 	
×ÑÔØ�v‰v‹xˆr   c           	      ó€  — | j                  «       }| j                  r=|j                  di «      }i }| j                  D ]  }||vrt        |«      ‚||   ||<   Œ n|j                  di «      }g }|j	                  «       D ]=  \  }}|€Œ	|j                  |d|j                  dd«      |j                  d«      dœ«       Œ? |S )zz
        Returns a list of dicts describing each file in the gist. These get stored
        in self.dircache[""].
        ÚfilesÚfileÚsizer   Úraw_url)ÚnameÚtyper9   r:   )r5   r   r.   r0   ÚitemsÚappend)r   ÚmetaÚavailable_filesr7   ÚfnÚoutÚfnameÚfinfos           r   r   zGistFileSystem._fetch_file_listb   sÈ   € ð
 ×(Ñ(Ó*ˆØ�>Š>Ø"Ÿh™h w°Ó3ˆOØˆEØ—n”n�Ø˜_Ñ,Ü+¨BÓ/Ð/Ø+¨BÑ/��b’	ñ %ð
 —H‘H˜W bÓ)ˆEàˆØ!ŸK™KžM‰LˆE�5Øˆ}àà�J‰Jà!Ø"Ø!ŸI™I f¨aÓ0Ø$Ÿy™y¨Ó3ñ	õð *ð ˆ
r   c                 óZ   — t        |«      j                  d|«      }|j                  d«      S )z=
        Remove 'gist://' from the path, if present.
        ÚpathÚ/)r   r.   Úlstrip)ÚclsrF   s     r   Ú_strip_protocolzGistFileSystem._strip_protocol‚   s*   € ô % TÓ*×.Ñ.¨v°tÓ<ˆØ�{‰{˜3ÓÐr   c                 ó  — t        | «      }i }d|v r|d   r|d   |d<   d|v r|d   r|d   |d<   d|v r|d   r|d   |d<   d|v rF|d   rA|d   j                  dd«      d	d
 }t        |«      dk(  r|d   r|d   |d<   |d   r	|d   g|d<   |S )zÇ
        Parse 'gist://' style URLs into GistFileSystem constructor kwargs.
        For example:
          gist://:TOKEN@<gist_id>/file.txt
          gist://username:TOKEN@<gist_id>/file.txt
        r   Úpasswordr   Úhostr   rF   rG   r   éþÿÿÿNr   r   r   r   )r   ÚrsplitÚlen)rF   ÚsorB   Ú
path_partss       r   Ú_get_kwargs_from_urlsz$GistFileSystem._get_kwargs_from_urls�   sË   € ô # 4Ó(ˆØˆØ˜Ñ  :¢Ø  ™nˆC�
‰OØ˜Ñ  :¢Ø˜j™>ˆC�‰LØ�R‰<˜B˜všJà ™ZˆC�	‰Nð �R‰<˜B˜všJØ˜F™×*Ñ*¨3°Ó2°2°3Ð7ˆJÜ�:‹ !Ò#Ø˜a’=Ø!+¨A¡�C˜‘JØ˜a’=Ø(2°1© �C˜Ñ$àˆ
r   c                 óô   — | j                  |xs d«      }|dk(  r| j                  d   }n4| j                  d   }|D �cg c]  }|d   |k(  sŒ|‘Œ }}|st        |«      ‚|r|S t        d„ |D «       «      S c c}w )a‘  
        List files in the gist. Gists are single-level, so any 'path' is basically
        the filename, or empty for all files.

        Parameters
        ----------
        path : str, optional
            The filename to list. If empty, returns all files in the gist.
        detail : bool, default False
            If True, return a list of dicts; if False, return a list of filenames.
        r   r;   c              3   ó&   K  — | ]	  }|d    –— Œ y­w)r;   N© )Ú.0Úfs     r   Ú	<genexpr>z$GistFileSystem.ls.<locals>.<genexpr>Ã   s   è ø€ Ð5©W¨˜!˜F�)©Wùs   ‚)rJ   r   r0   Úsorted)r   rF   Údetailr   ÚresultsÚ	all_filesrX   s          r   ÚlszGistFileSystem.lsª   s‰   € ð ×#Ñ# D¢J¨BÓ/ˆà�2Š:Ø—m‘m BÑ'‰Gð Ÿ™ bÑ)ˆIÙ"+ÓA¡)˜Q¨q°©y¸DÓ/@’q )ˆGÐAÙÜ'¨Ó-Ð-ÙØˆNäÑ5©WÓ5Ó5Ð5ùò Bs   ¾A5ÁA5c                 óØ  — |dk7  rt        d«      ‚| j                  |«      }| j                  d   D �cg c]  }|d   |k(  sŒ|‘Œ }}|st        |«      ‚|d   }|j	                  d«      }|st        d|› �«      ‚t        j                  |fd| j                  i| j                  ¤Ž}	|	j                  d	k(  rt        |«      ‚|	j                  «        t        |d
|	j                  «      S c c}w )z3
        Read a single file from the gist.
        Úrbz'GitHub Gist FS is read-only (no write).r   r;   r   r:   zNo raw_url for file: r   r'   N)ÚNotImplementedErrorrJ   r   r0   r.   r-   r   r%   r/   r1   r   Úcontent)
r   rF   ÚmodeÚ
block_sizer   rX   ÚmatchesrD   r:   r4   s
             r   Ú_openzGistFileSystem._openÅ   sè   € ð �4Š<Ü%Ð&OÓPÐPà×#Ñ# DÓ)ˆà"Ÿm™m¨BÒ/ÓEÑ/˜°1°V±9ÀÓ3D’1Ð/ˆÐEÙÜ# DÓ)Ð)Ø˜‘
ˆà—)‘)˜IÓ&ˆÙÜ#Ð&;¸D¸6Ð$BÓCÐCä�L‰L˜ÑB¨$¯,©,ÐB¸$¿'¹'ÑBˆØ�=‰=˜CÒÜ# DÓ)Ð)Ø	×ÑÔÜ˜$  a§i¡iÓ0Ð0ùò Fs   ³C'ÁC'c                 ó:  — | j                  ||¬«      }i }|D ]1  }	 | j                  |d«      5 }|j                  «       ||<   ddd«       Œ3 t	        |«      dk(  r|d   |k(  r||   S |S # 1 sw Y   Œ(xY w# t        $ r}	|dk(  r|	‚|dk(  rn|	||<   Y d}	~	Œ}d}	~	ww xY w)z˜
        Return {path: contents} for the given file or files. If 'recursive' is True,
        and path is empty, returns all files in the gist.
        )Ú	recursiver`   NÚraiseÚomitr   r   )Úexpand_pathÚopenÚreadr0   rP   )
r   rF   rh   Úon_errorr   ÚpathsrB   ÚprX   Úes
             r   ÚcatzGistFileSystem.catÝ   s³   € ð
 × Ñ  °Ð Ó;ˆØˆÛˆAð	Ø—Y‘Y˜q $Ô'¨1ØŸV™V›X�C˜‘F÷ (øð ô ˆu‹:˜Š?˜u Q™x¨4Ò/Ø�t‘9ÐØˆ
÷ (Ð'ûä$ò Ø˜wÒ&Ø�GØ Ò'Øà�C˜‘Fÿøðús.   œA5®A)ÁA5Á)A2	Á.A5Á5	BÁ>BÂB)NNNNN)r   F)r`   N)Fri   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úprotocolr,   r*   r   Úpropertyr%   r5   r   ÚclassmethodrJ   ÚstaticmethodrS   r^   rf   rr   Ú__classcell__)r   s   @r   r	   r	      s…   ø„ ñð6 €HØ7€HØA€Lð
 ØØØØõ4ð2 ñó ðòò"ð@ ñ ó ð ð ñó ðó86ó61÷0r   r	   )r-   Úspecr   Úutilsr   Úmemoryr   r	   rV   r   r   Ú<module>r      s    ðÛ å %Ý )Ý ôiÐ'õ ir   