U
    h                     @  s   d Z ddlm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dlmZ d	d
dddZd	d
dddZd	d
dddZd	ddddZG dd dejZG dd dejZdS )zSheetsInputs.    )annotations)AnyCallableMappingSequence)parse)gspread_client)	sheets_id)llmfn_inputs_source)llmfn_outputsstrz!sheets_id.SheetsIdentifier | None)valuereturnc                 C  sT   zt | }W n tk
r$   Y dS X |jrPtjt| d}t 	| |S dS )z4Try to open a Sheets document with `value` as a URL.N)url)
r   urlparse
ValueErrorschemer	   SheetsIdentifierZ	SheetsURLr   
get_clientvalidate)r   Zparse_resultsid r   M/tmp/pip-unpacked-wheel-doshhd5e/google/generativeai/notebook/sheets_utils.py_try_sheet_id_as_url   s    r   c                 C  s^   zt jt | d}W n tk
r,   Y dS X zt | W n tjk
rX   Y dS X |S )z4Try to open a Sheets document with `value` as a key.)keyN)r	   r   Z	SheetsKeyr   r   r   r   SpreadsheetNotFoundErrorr   r   r   r   r   _try_sheet_id_as_key-   s    r   c                 C  s<   t j| d}zt | W n tjk
r6   Y dS X |S )z5Try to open a Sheets document with `value` as a name.)nameN)r	   r   r   r   r   r   r   r   r   r   _try_sheet_id_as_name<   s    r   sheets_id.SheetsIdentifierc                 C  sB   t |  }r|S t|  }r |S t|  }r0|S td| d S )Nz-No Sheets found with "{}" as URL, key or name)r   r   r   RuntimeErrorformatr   r   r   r   get_sheets_id_from_strF   s    r#   c                      s8   e Zd ZdZdddd fddZdd	d
dZ  ZS )SheetsInputsz,Inputs to an LLMFunction from Google Sheets.r   r    intr   worksheet_idc                   s   t    || _|| _d S N)super__init___sid_worksheet_id)selfr   r'   	__class__r   r   r*   U   s    
zSheetsInputs.__init__z6tuple[Sequence[Mapping[str, str]], Callable[[], None]])r   c                 C  s   t  j| j| jdS )Nr&   )r   r   Zget_all_recordsr+   r,   )r-   r   r   r   _to_normalized_inputs_implZ   s     z'SheetsInputs._to_normalized_inputs_impl)r   )__name__
__module____qualname____doc__r*   r0   __classcell__r   r   r.   r   r$   R   s   r$   c                   @  s.   e Zd ZdZddddZdddd	d
ZdS )SheetsOutputsz4Writes outputs from an LLMFunction to Google Sheets.r    )r   c                 C  s
   || _ d S r(   )r+   )r-   r   r   r   r   r*   e   s    zSheetsOutputs.__init__zllmfn_outputs.LLMFnOutputsBaseNone)outputsr   c                 C  sR   |  }g }|t|  |dd t|  D  t j	| j
|d d S )Nc                 S  s   g | ]}t |qS r   )list).0xr   r   r   
<listcomp>m   s     z/SheetsOutputs.write_outputs.<locals>.<listcomp>)r   Zrows)Zas_dictappendr9   keysextendzipvaluesr   r   Zwrite_recordsr+   )r-   r8   Zoutputs_dictZoutputs_rowsr   r   r   write_outputsh   s    zSheetsOutputs.write_outputsN)r1   r2   r3   r4   r*   rB   r   r   r   r   r6   b   s   r6   N)r4   
__future__r   typingr   r   r   r   urllibr   Zgoogle.generativeai.notebookr   r	   Z google.generativeai.notebook.libr
   r   r   r   r   r#   ZLLMFnInputsSourcer$   ZLLMFnOutputsSinkr6   r   r   r   r   <module>   s   
