Ë
    ümxi  ã                  ó€  — U d Z ddlmZ ddlZddlZddlmZmZmZm	Z	 ddl
mZ ddlmZ ddlmZ ddlmZ dZd	ed
<   	 ddlZe€enej,                  j.                  Z G d„ de«      Zdd„Z G d„ dej6                  «      Z G d„ de«      Z G d„ de«      Zdaded<   dd„Z dd„Z!dd„Z"y# e$ rZeZdZY dZ[ŒvdZ[ww xY w)z1Module that holds a global gspread.client.Client.é    )ÚannotationsN)ÚAnyÚCallableÚMappingÚSequence)Úcredentials)Ú
html_utils)Úipython_env)Ú	sheets_idzException | NoneÚ_gspread_import_errorc                  ó   — e Zd Zy)ÚSpreadsheetNotFoundErrorN)Ú__name__Ú
__module__Ú__qualname__© ó    úb/home/htdocs/ttos/venv/lib/python3.12/site-packages/google/generativeai/notebook/gspread_client.pyr   r   *   s   „ Ør   r   c                 ó>   — t        dj                  t        «      «      S )Nz&"gspread" module not imported, got: {})ÚRuntimeErrorÚformatr   r   r   r   Ú_get_import_errorr   .   s   € ÜÐ@×GÑGÔH]Ó^Ó_Ð_r   c                  óš   — e Zd ZdZej
                  dd„«       Zej
                  	 	 	 	 	 	 dd„«       Zej
                  	 	 	 	 	 	 dd„«       Zy)	ÚGSpreadClientztWrapper around gspread.client.Client.

    This adds a layer of indirection for us to inject mocks for testing.
    c                 ó   — y)z­Validates that `name` is the name of a Google Sheets document.

        Raises an exception if false.

        Args:
          sid: The identifier for the document.
        Nr   ©ÚselfÚsids     r   ÚvalidatezGSpreadClient.validate8   ó   � r   c                 ó   — y)z2Returns all records for a Google Sheets worksheet.Nr   ©r   r   Úworksheet_ids      r   Úget_all_recordszGSpreadClient.get_all_recordsB   r    r   c                 ó   — y)z@Writes results to a new worksheet to the Google Sheets document.Nr   ©r   r   Úrowss      r   Úwrite_recordszGSpreadClient.write_recordsJ   r    r   N©r   úsheets_id.SheetsIdentifierÚreturnÚNone©r   r*   r#   Úintr+   z6tuple[Sequence[Mapping[str, str]], Callable[[], None]]©r   r*   r'   zSequence[Sequence[Any]]r+   r,   )	r   r   r   Ú__doc__ÚabcÚabstractmethodr   r$   r(   r   r   r   r   r   2   s˜   „ ñð
 	×Ñòó ðð 	×ÑðAà'ðAð ðAð 
@ò	Aó ðAð 	×ÑðOà'ðOð &ðOð 
ò	Oó ñOr   r   c                  óP   — e Zd ZdZdd„Zd	d„Zd
d„Z	 	 	 	 	 	 dd„Z	 	 	 	 	 	 dd„Zy)ÚGSpreadClientImplz)Concrete implementation of GSpreadClient.c                ó    — || _         || _        y)zßConstructor.

        Args:
          client: Instance of gspread.client.Client.
          env: Optional instance of IPythonEnv. This is used to display messages
            such as the URL of the output Worksheet.
        N)Ú_clientÚ_ipython_env)r   ÚclientÚenvs      r   Ú__init__zGSpreadClientImpl.__init__V   s   € ð ˆŒØˆÕr   c                óî  — 	 |j                  «       r)| j                  j                  |j                  «       «      S |j                  «       r2| j                  j	                  t        |j                  «       «      «      S |j                  «       r2| j                  j                  t        |j                  «       «      «      S 	 t        d«      ‚# t        $ r }t        dj                  |«      «      |‚d}~ww xY w)ac  Opens a Sheets document from `sid`.

        Args:
          sid: The identifier for the Sheets document.

        Raises:
          SpreadsheetNotFoundError: If the Sheets document cannot be found or
            cannot be opened.

        Returns:
          A gspread.Worksheet instance representing the worksheet referred to by
          `sid`.
        zUnable to find Sheets with {}Nz"Invalid sheets_id.SheetsIdentifier)Únamer6   ÚopenÚkeyÚopen_by_keyÚstrÚurlÚopen_by_urlÚGSpreadExceptionr   r   )r   r   Úexcs      r   Ú_openzGSpreadClientImpl._opena   s¾   € ð	aØ�x‰xŒzØ—|‘|×(Ñ(¨¯©«Ó4Ð4Ø�w‰wŒyØ—|‘|×/Ñ/´°C·G±G³I³Ó?Ð?Ø�w‰wŒyØ—|‘|×/Ñ/´°C·G±G³I³Ó?Ð?ð ô 'Ð'KÓLÐLøô  ò 	aÜ*Ð+J×+QÑ+QÐRUÓ+VÓWÐ]`Ð`ûð	aús$   ‚8C »AC Á=AC Ã	C4ÃC/Ã/C4c                ó&   — | j                  |«       y ©N)rE   r   s     r   r   zGSpreadClientImpl.validatez   s   € Ø�
‰
�3�r   c                ó¼   ‡‡‡— | j                  |«      Š‰j                  |«      Š| j                  �| j                  Šˆˆˆfd„}nˆˆfd„}‰j                  «       |fS )Nc                 óò   •— ‰ j                  dj                  t        j                  t	        j
                  ‰j                  «      dj                  ‰j                  ‰j                  «      ¬«      «      «       y )Nz Reading inputs from worksheet {}ú{} in {}©rA   Útext)Údisplay_htmlr   r	   Úget_anchor_tagr   Ú	SheetsURLrA   Útitle)r9   ÚsheetÚ	worksheets   €€€r   Ú_display_fnz6GSpreadClientImpl.get_all_records.<locals>._display_fnˆ   sW   ø€ Ø× Ñ Ø6×=Ñ=Ü"×1Ñ1Ü )× 3Ñ 3°I·M±MÓ BØ!+×!2Ñ!2°9·?±?ÀEÇKÁKÓ!Pôóõr   c                 ód   •— t        dj                  ‰j                  ‰ j                  «      «       y )Nz&Reading inputs from worksheet {} in {})Úprintr   rP   )rQ   rR   s   €€r   rS   z6GSpreadClientImpl.get_all_records.<locals>._display_fn”   s$   ø€ ÜÐ>×EÑEÀiÇoÁoÐW\×WbÑWbÓcÕdr   )rE   Úget_worksheetr7   r$   )r   r   r#   rS   r9   rQ   rR   s       @@@r   r$   z!GSpreadClientImpl.get_all_records}   sZ   ú€ ð
 —
‘
˜3“ˆØ×'Ñ'¨Ó5ˆ	à×ÑÐ(Ø×#Ñ#ˆC÷õeð ×(Ñ(Ó*¨KÐ7Ð7r   c                ó<  — | j                  |«      }t        j                  j                  «       }d|d›d|d›d�}|j                  |dd¬«      }|j	                  |¬«       | j
                  ��| j
                  j                  d	j                  t        j                  t        j                  |j                  «      d
j                  |j                  |j                  «      ¬«      «      «       y t        dj                  |j                  |j                  «      «       y )NzResults z%Y_%m_%dz (z%sú)é   )rP   r'   Úcols)Úvaluesz#Results written to new worksheet {}rJ   rK   z)Results written to new worksheet {} in {})rE   ÚdatetimeÚnowÚadd_worksheetÚappend_rowsr7   rM   r   r	   rN   r   rO   rA   rP   rU   )r   r   r'   rQ   Úcurrent_datetimerP   rR   s          r   r(   zGSpreadClientImpl.write_records™   s÷   € ð
 —
‘
˜3“ˆô
 $×,Ñ,×0Ñ0Ó2ÐØÐ+¨HÐ5°RÐ8HÈÐ7LÈAÐNˆð ×'Ñ'¨e¸!À!Ð'ÓDˆ	Ø×Ñ TÐÔ*à×ÑÐ(Ø×Ñ×*Ñ*Ø5×<Ñ<Ü×-Ñ-Ü%×/Ñ/°	·±Ó>Ø'×.Ñ.¨y¯©ÀÇÁÓLôóõô Ð=×DÑDÀYÇ_Á_ÐV[×VaÑVaÓbÕcr   N)r8   r   r9   úipython_env.IPythonEnv | None)r   r*   r)   r-   r/   )	r   r   r   r0   r:   rE   r   r$   r(   r   r   r   r4   r4   S   s\   „ Ù3ó	 óMó2ð8à'ð8ð ð8ð 
@ó	8ð8dà'ðdð &ðdð 
ô	dr   r4   c                  ó@   — e Zd ZdZdd„Z	 	 	 	 	 	 dd„Z	 	 	 	 	 	 dd„Zy)	ÚNullGSpreadClientz­Null-object implementation of GSpreadClient.

    This class raises an error if any of its methods are called. It is used when
    the gspread library is not available.
    c                ó   — t        «       ‚rG   ©r   r   s     r   r   zNullGSpreadClient.validate¿   s   € ÜÓ!Ð!r   c                ó   — t        «       ‚rG   re   r"   s      r   r$   z!NullGSpreadClient.get_all_recordsÂ   ó   € ô
  Ó!Ð!r   c                ó   — t        «       ‚rG   re   r&   s      r   r(   zNullGSpreadClient.write_recordsÉ   rg   r   Nr)   r-   r/   )r   r   r   r0   r   r$   r(   r   r   r   rc   rc   ¸   sO   „ ñó"ð"à'ð"ð ð"ð 
@ó	"ð"à'ð"ð &ð"ð 
ô	"r   rc   zGSpreadClient | NoneÚ_gspread_clientc                ój   — t         �#t        j                  | «      }t        ||¬«      ayt	        «       ay)z Sets up credential for gspreads.N)r8   r9   )ÚgspreadÚ	authorizer4   ri   rc   )Úcredsr9   r8   s      r   rl   rl   Õ   s.   € ô ÐÜ×"Ñ" 5Ó)ˆÜ+°6¸sÔC‰ä+Ó-‰r   c                 ó0   — t         st        d«      ‚t         S )NzMust call authorize() first)ri   r   r   r   r   Ú
get_clientro   ß   s   € ÝÜÐ8Ó9Ð9ÜÐr   c                ó   — | a y)z(Overrides the global client for testing.N)ri   )r8   s    r   Útestonly_set_clientrq   å   s	   € ð �Or   )r+   Ú	Exception)rm   zcredentials.Credentialsr9   ra   r+   r,   )r+   r   )r8   r   r+   r,   )#r0   Ú
__future__r   r1   r\   Útypingr   r   r   r   Úgoogle.authr   Úgoogle.generativeai.notebookr	   r
   r   r   Ú__annotations__rk   ÚImportErrorÚerr   Ú
exceptionsrC   r   r   r   ÚABCr   r4   rc   ri   rl   ro   rq   r   r   r   ú<module>r|      sÑ   ðò 8Ý "ã 
Û ß 3Ó 3Ý #Ý 3Ý 4Ý 2ð
 +/Ð Ð'Ó .ðãð !( ‘9°W×5GÑ5G×5XÑ5XÐ ô	˜|ô 	ó`ôO�C—G‘Gô OôBbd˜ô bdôJ"˜ô "ð4 )-€Ð%Ó ,ó.óôøðI ò ØÐØ…Gûðús   ¾B* Â*B=Â/B8Â8B=