
    _j'                        S r SSKJr  SSKJrJrJrJrJrJ	r	  SSK
Jr  SSKJrJrJrJrJrJrJrJrJr   " S S\5      r " S	 S
\5      rg)z'Synchronous Search Monitors API client.    )annotations)AnyDictIteratorListOptionalUnion   )SearchMonitorsBaseClient)	CreateSearchMonitorParamsCreateSearchMonitorResponseListSearchMonitorRunsResponseListSearchMonitorsResponseSearchMonitorSearchMonitorRunSearchMonitorStatusTriggerSearchMonitorResponseUpdateSearchMonitorParamsc                  h    \ rS rSrSrSSS.       SS jjrSS jrSS.SS jjrSS.SS	 jjrS
r	g)SearchMonitorRunsClient   z4Synchronous client for managing Search Monitor Runs.Ncursorlimitc               z    U R                  X#5      nU R                  SU S3SUS9n[        R                  " U5      $ )a  List all runs for a Search Monitor.

Args:
    monitor_id: The ID of the Search Monitor.
    cursor: Pagination cursor from a previous response.
    limit: Maximum number of results to return.

Returns:
    List of Search Monitor runs with pagination info.

Examples:
    from exa_py import Exa
    import os

    exa = Exa(os.environ["EXA_API_KEY"])

    runs = exa.monitors.runs.list("sm_123", limit=10)
    print(runs.data[0].status if runs.data else "no runs yet")
/z/runsGETmethodparams)build_pagination_paramsrequestr   model_validate)self
monitor_idr   r   r    responses         K/home/rurouni/.local/lib/python3.13/site-packages/exa_py/monitors/client.pylistSearchMonitorRunsClient.list   sJ    4 --f<<<
|5!%   
 -;;HEE    c                Z    U R                  SU SU 3SS9n[        R                  " U5      $ )aG  Get a specific Search Monitor run.

Args:
    monitor_id: The ID of the Search Monitor.
    run_id: The ID of the run.

Returns:
    The Search Monitor run.

Examples:
    from exa_py import Exa
    import os

    exa = Exa(os.environ["EXA_API_KEY"])

    run = exa.monitors.runs.get("sm_123", "run_456")
    print(run.status)
r   z/runs/r   r   )r"   r   r#   )r$   r%   run_idr&   s       r'   getSearchMonitorRunsClient.get8   s<    & <<
|6&*5   
  ..x88r*   r   c             #     #    Sn U R                  XUS9nUR                   H  nUv   M	     UR                  (       a  UR                  (       d  gUR                  nMX  7f)zIterate through all runs for a Search Monitor, handling pagination automatically.

Args:
    monitor_id: The ID of the Search Monitor.
    limit: Maximum number of results to return per page.

Yields:
    SearchMonitorRun: Each run.
Nr   r(   datahas_morenext_cursor)r$   r%   r   r   r&   runs         r'   list_all SearchMonitorRunsClient.list_allP   sX      yy%yHH}}	 %$$H,@,@))F    AAc               2    [        U R                  XS95      $ )zCollect all runs for a Search Monitor into a list.

Args:
    monitor_id: The ID of the Search Monitor.
    limit: Maximum number of results to return per page.

Returns:
    List of all Search Monitor runs.
r0   r(   r7   )r$   r%   r   s      r'   get_allSearchMonitorRunsClient.get_allc   s     DMM*M:;;r*    )r%   strr   Optional[str]r   Optional[int]returnr   )r%   r?   r-   r?   rB   r   )r%   r?   r   rA   rB   zIterator[SearchMonitorRun])r%   r?   r   rA   rB   zList[SearchMonitorRun])
__name__
__module____qualname____firstlineno____doc__r(   r.   r7   r<   __static_attributes__r>   r*   r'   r   r      s`    > !%#FF 	F
 F 
'F@90 CG *& BF 
< 
<r*   r   c                     ^  \ rS rSr% SrS\S'   SU 4S jjr    SS jrSS jrSSSS	.       SS
 jjr	      SS jr
SS jrSSS.SS jjrSSS.SS jjrSS jrSrU =r$ )SearchMonitorsClientp   z0Synchronous client for managing Search Monitors.r   runsc                D   > [         TU ]  U5        [        U5      U l        g )N)super__init__r   rL   )r$   client	__class__s     r'   rO   SearchMonitorsClient.__init__u   s     +F3	r*   c                    [        U[        5      (       a  UOUR                  SSS9nU R                  SSUS9n[        R
                  " U5      $ )a  Create a Search Monitor.

Args:
    params: The monitor creation parameters.

Returns:
    The created Search Monitor with webhookSecret.

Examples:
    from exa_py import Exa
    import os

    exa = Exa(os.environ["EXA_API_KEY"])

    monitor = exa.monitors.create(
        {
            "name": "AI startup funding monitor",
            "search": {
                "query": "New AI startup funding rounds",
                "numResults": 5,
            },
            "trigger": {
                "type": "interval",
                "period": "1h",
            },
            "webhook": {
                "url": "https://example.com/webhooks/search-monitors",
                "events": ["monitor.run.completed"],
            },
        }
    )

    print(monitor.id)
Tby_aliasexclude_none POSTr   r3   )
isinstancedict
model_dumpr"   r   r#   )r$   r    r3   r&   s       r'   createSearchMonitorsClient.createy   sO    J $FD11vv7H7HRVei7H7j<<6<=*99(CCr*   c                T    U R                  SU 3SS9n[        R                  " U5      $ )a  Get a Search Monitor by ID.

Args:
    monitor_id: The ID of the Search Monitor.

Returns:
    The Search Monitor.

Examples:
    from exa_py import Exa
    import os

    exa = Exa(os.environ["EXA_API_KEY"])

    monitor = exa.monitors.get("sm_123")
    print(monitor.status)
r   r   r,   r"   r   r#   r$   r%   r&   s      r'   r.   SearchMonitorsClient.get   s.    $ <<!J< 0<?++H55r*   Nstatusr   r   c                   U R                  X#5      nUb  XS'   U R                  SSUS9n[        R                  " U5      $ )a  List Search Monitors.

Args:
    status: Filter by monitor status.
    cursor: Pagination cursor from a previous response.
    limit: Maximum number of results to return.

Returns:
    List of Search Monitors with pagination info.

Examples:
    from exa_py import Exa
    import os

    exa = Exa(os.environ["EXA_API_KEY"])

    monitors = exa.monitors.list(status="active", limit=20)
    print([monitor.name for monitor in monitors.data])
rd   rW   r   r   )r!   r"   r   r#   )r$   rd   r   r   r    r&   s         r'   r(   SearchMonitorsClient.list   sG    4 --f<%8<<5<@)88BBr*   c                    [        U[        5      (       a  UOUR                  SSS9nU R                  SU 3SUS9n[        R
                  " U5      $ )a  Update a Search Monitor.

Args:
    monitor_id: The ID of the Search Monitor.
    params: The update parameters.

Returns:
    The updated Search Monitor.

Examples:
    from exa_py import Exa
    import os

    exa = Exa(os.environ["EXA_API_KEY"])

    monitor = exa.monitors.update(
        "sm_123",
        {
            "status": "paused",
            "name": "Paused funding monitor",
        },
    )

    print(monitor.updated_at)
TrT   r   PATCHrY   )rZ   r[   r\   r"   r   r#   )r$   r%   r    r3   r&   s        r'   updateSearchMonitorsClient.update   sU    8 $FD11vv7H7HRVei7H7j<<!J< 0t<L++H55r*   c                T    U R                  SU 3SS9n[        R                  " U5      $ )a-  Delete a Search Monitor.

Args:
    monitor_id: The ID of the Search Monitor.

Returns:
    The deleted Search Monitor.

Examples:
    from exa_py import Exa
    import os

    exa = Exa(os.environ["EXA_API_KEY"])

    deleted_monitor = exa.monitors.delete("sm_123")
    print(deleted_monitor.status)
r   DELETEr,   r`   ra   s      r'   deleteSearchMonitorsClient.delete   s.    $ <<!J< 0<B++H55r*   rd   r   c             #     #    Sn U R                  XUS9nUR                   H  nUv   M	     UR                  (       a  UR                  (       d  gUR                  nMX  7f)zIterate through all Search Monitors, handling pagination automatically.

Args:
    status: Filter by monitor status.
    limit: Maximum number of results to return per page.

Yields:
    SearchMonitor: Each monitor.
Nrc   r2   )r$   rd   r   r   r&   monitors         r'   r7   SearchMonitorsClient.list_all  sX      yyUyKH#== )$$H,@,@))F r9   c               2    [        U R                  XS95      $ )zCollect all Search Monitors into a list.

Args:
    status: Filter by monitor status.
    limit: Maximum number of results to return per page.

Returns:
    List of all Search Monitors.
ro   r;   )r$   rd   r   s      r'   r<   SearchMonitorsClient.get_all  s     DMMM=>>r*   c                V    U R                  SU S3SS9n[        R                  " U5      $ )aO  Trigger a Search Monitor run immediately.

Args:
    monitor_id: The ID of the Search Monitor.

Returns:
    TriggerSearchMonitorResponse with 'triggered' boolean.

Examples:
    from exa_py import Exa
    import os

    exa = Exa(os.environ["EXA_API_KEY"])

    response = exa.monitors.trigger("sm_123")
    print(response.triggered)
r   z/triggerrX   r,   )r"   r   r#   ra   s      r'   triggerSearchMonitorsClient.trigger+  s0    $ <<!J<x 8<H+::8DDr*   )rL   )rP   r   )r    z0Union[Dict[str, Any], CreateSearchMonitorParams]rB   r   )r%   r?   rB   r   )rd   Optional[SearchMonitorStatus]r   r@   r   rA   rB   r   )r%   r?   r    z0Union[Dict[str, Any], UpdateSearchMonitorParams]rB   r   )rd   rx   r   rA   rB   zIterator[SearchMonitor])rd   rx   r   rA   rB   zList[SearchMonitor])r%   r?   rB   r   )rC   rD   rE   rF   rG   __annotations__rO   r]   r.   r(   ri   rm   r7   r<   rv   rH   __classcell__)rQ   s   @r'   rJ   rJ   p   s    :
!!4'DF'D	$'DR60 15 $#C .C 	C
 C 
$C@66'W6	6@6* CG_c *& BF^b 
?E Er*   rJ   N)rG   
__future__r   typingr   r   r   r   r   r	   baser   typesr   r   r   r   r   r   r   r   r   r   rJ   r>   r*   r'   <module>r      sD    - " = = *
 
 
X<6 X<vNE3 NEr*   