
    Nio"                         d Z ddlmZ ddlmZmZ ddlZddl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
lmZ ddlmZmZ  G d d          ZdS )z
NYTimes Search Plugin

Self-contained plugin for searching articles on nytimes.com.
Supports two modes:
- Direct navigation to nytimes URL
- Search form interaction with human-like behavior
    )	dataclass)DictAnyN)ClickElement)TypeText)	PasteText)
PressEnter)PressTab)
ScrollPage)PluginMetadataPluginParameterc                       e Zd ZdZ edddgdg edddd	d
d           edddddd           edddddd          g          Zdeee	f         dedz  fdZ
dedeee	f         deee	f         fdZdS )NYTimesSearchPluginz
    Search for articles on nytimes.com.
    
    Supports two modes:
    - Direct navigation to nytimes URL
    - Search form interaction with human-like behavior
    znytimes-searchzNYTimes SearchPOSTz#6C9EB5querytextzSearch Query or URLTz$Enter search term or nytimes.com URLz?Search term to look for, or full nytimes.com URL to navigate to)nametypelabelrequiredplaceholder	help_textdirect_access_probabilitynumberzDirect Access ProbabilityF      ?zHProbability (0.0-1.0) of directly navigating to URL vs using search form)r   r   r   r   defaultr   paste_probabilityzPaste Probability皙?z;Probability (0.0-1.0) of pasting vs typing the search query)r   descriptionmethodsbg_color
parametersparamsreturnNc                     |                     dd          }|                     dd          }d|cxk    rdk    sn dS d|cxk    rdk    sn dS d	S )
z-Custom validation for probability parameters.r   r   r   r   g        g      ?z5direct_access_probability must be between 0.0 and 1.0z-paste_probability must be between 0.0 and 1.0N)get)selfr#   direct_prob
paste_probs       B/home/byschii/byschiidev/penelope/plugins/nytimes_search/plugin.pyvalidate_paramsz#NYTimesSearchPlugin.validate_paramsE   sy    jj!<cBBZZ 3S99
{))))c))))JJz((((S((((BBt    page_idc                 *  K   |d         }|                     dd          }|                     dd          }t          d| d| d|            |                    |           d	{V }|j        }	 |                    d
|            d	{V  t                      }	t                      }
t                      }t                      }t                      }t                      }d|                                v }|r>t          j                    |k     r&t          d           |                    d          r|nd| }t          d|            |                    |d           d	{V  t          d           t          j        t          j        dd                     d	{V  t          d           |                    |dd           d	{V  t          d           |                    |dd           d	{V  t          d           dd||j        dd|                                 d	{V  S t          d            |                    d!d           d	{V  t          d"           t          j        t          j        d#d$                     d	{V  t          d%           d&}d'}|                    |           d	{V }|                    |           d	{V }|d	uo|                                 d	{V }|d	uo|                                 d	{V }|rt          d(           |	                    ||           d	{V  t          j        t          j        d)d*                     d	{V  |                    |           d	{V  t          j        t          j        d)d                     d	{V  |                    |d+           d	{V  t          j        t          j        d)d,                     d	{V  nI|	                    ||           d	{V  t          j        t          j        dd*                     d	{V  t          d-           t          j                    |k     r|                    ||           d	{V  n|
                    ||           d	{V  t          d.           |                    |           d	{V  t          j        t          j        d)d/                     d	{V  t          d0           |                    |d1d1           d	{V  t          j        t          j        d)d/                     d	{V  |	                    |d2           d	{V  t          j        t          j        d)d/                     d	{V  |                    |d1d1           d	{V  t          j        t          j        d)d/                     d	{V  dd3||j        d4d5|                                 d	{V  S # t6          $ r@}t          d6|            |                    t;          |                     d	{V   d	}~ww xY w# |                                 d	{V  w xY w)7ao  
        Execute NYTimes search operation.
        
        Args:
            browser_navigator: BrowserNavigator instance
            page_id: Page to use for operation
            params: Validated parameters (query, direct_access_probability, paste_probability)
            
        Returns:
            Dict with success status, method used, and page URL
        r   r   r   r   r   u   🔍 NYTimes search: query=z, direct_prob=z, paste_prob=Nzsearching nytimes for znytimes.comu%   🎯 Direct navigation to NYTimes URLhttpzhttps://u   🌐 Navigating to: domcontentloaded)
wait_untilu   ✅ Page loaded      u!   ⏳ Waited for page stabilizationi     )distanceslowmou   📜 Scrolled downi  u   📜 Scrolled down againTdirect_navigationz2Successfully navigated to NYTimes URL and scrolled)successmethodurlpage_urlmessageu   🔎 Using search form approachzhttps://www.nytimes.com/u   ✅ NYTimes homepage loadedg333333?gffffff?u   🔘 Clicking search buttonz$button:has(svg > rect[x="1"][y="3"])z=[data-testid="search-button"]:has(svg > path[d^="M11.3,9.2"])u4   📱 Detected mobile layout, clicking hamburger menug?   )
with_shiftg333333?u   ⌨️ Entering search queryu   ↵ Pressing enterg?u   📜 Scrolling to see resultsd   zmain h4search_formz/Successfully performed search using search form)r8   r9   r   r;   r<   u   ❌ NYTimes search failed: )r&   print_get_page_to_usepageset_busyr   r   r   r	   r   r
   lowerrandom
startswithgotoasynciosleepuniformscrollr:   set_idlequery_selector
is_visibleclick_selectorpresspaster   	Exception	set_errorstr)r'   browser_navigatorr-   r#   r   r   r   managed_pagerC   clickertyperpasterpresserscrollertabberis_nytimes_urlr:   hamburger_selectorlens_selector	hamburgerlenshamburger_presentlens_presentes                           r*   executezNYTimesSearchPlugin.executeQ   s"      w$*JJ/JC$P$P!"JJ':C@@|E||AZ||iz||}}} /??HHHHHHHH r	*''(H(H(HIIIIIIIII #nnGJJE[[F llG!||HZZF +ekkmm;N  Y&-//4M"M"M>???  %//77Oee=O=O=O2S22333ii0BiCCCCCCCCC())) mFN1a$8$8999999999:;;; oodT#oFFFFFFFFF+,,,oodSoEEEEEEEEE1222  $1 $S Z ''))))))))))G 8999ii :GYiZZZZZZZZZ4555mFN3$<$<========= 4555%K" _"&"5"56H"I"IIIIIII	!00????????$-T$9$ZIDXDXDZDZ>Z>Z>Z>Z>Z>Z!#4/K$//:K:K4K4K4K4K4K4K$ @QRRR!00?QRRRRRRRRR!-sA(>(>????????? !,,t,,,,,,,,,!-sC(@(@AAAAAAAAA ,,t,=========!-sC(@(@AAAAAAAAAA!00}MMMMMMMMM!-sA(>(>????????? 5666=??%666 ,,tU3333333333**T5111111111 +,,,mmD)))))))))mFN3$<$<========= 6777oodSoEEEEEEEEEmFN3$<$<========= ,,\9EEEEEEEEEmFN3$<$<=========oodSoEEEEEEEEEmFN3$<$<=========  $+" $P  ''))))))))))  	 	 	333444((Q000000000	 ''))))))))))s,   2F.X) ;OX) )
Y33;Y..Y33Y6 6Z)__name__
__module____qualname____doc__r   r   metadatar   rU   r   r+   rf    r,   r*   r   r      s7         ~$O+B[   O01d   O()W  #
  HB
d38n 
t 
 
 
 
H* H*T#s(^ H*X\]`be]eXf H* H* H* H* H* H*r,   r   )rj   dataclassesr   typingr   r   rI   rF   lib.primitive.click_elementr   lib.primitive.type_textr   lib.primitive.paste_textr   lib.primitive.press_enterr	   lib.primitive.press_tabr
   lib.primitive.scroll_pager   lib.plugin_loaderr   r   r   rl   r,   r*   <module>rv      s    " ! ! ! ! !           4 4 4 4 4 4 , , , , , , . . . . . . 0 0 0 0 0 0 , , , , , , 0 0 0 0 0 0 > = = = = = = =~* ~* ~* ~* ~* ~* ~* ~* ~* ~*r,   