
    ]j                        d Z ddlm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 e G d d	             Z G d
 d      Z G d d      Zy)aJ  Shared event management helpers for generated WebDriver BiDi modules.

``EventConfig``, ``_EventWrapper``, and ``_EventManager`` are emitted
identically into every generated module that exposes events. Rather than
duplicating this logic across those modules, they are defined once here and
copied into generated outputs by Bazel.
    )annotationsN)Callable)	dataclass)Any)Sessionc                  0    e Zd ZU dZded<   ded<   ded<   y)EventConfigzConfiguration for a BiDi event.str	event_key
bidi_eventtypeevent_classN)__name__
__module____qualname____doc____annotations__     a/home/ubuntu/.local/lib/python3.12/site-packages/selenium/webdriver/common/bidi/_event_manager.pyr	   r	   $   s    )NOr   r	   c                  2    e Zd ZdZddZddZedd       Zy)	_EventWrapperzKWrapper to provide event_class attribute for WebSocketConnection callbacks.c                     || _         || _        y N)r   _python_class)selfr   r   s      r   __init__z_EventWrapper.__init__0   s    %(r   c                   | j                   | j                   t        u r|S 	 t        | j                   d      r:t        | j                   j                        r| j                   j	                  |      S ddl}|j                         D ci c]  \  }}| j                  |      | }}}|j                  | j                         rl|j                  | j                         D ch c]  }|j                   }}|j                         D ci c]  \  }}||v s|| }}} | j                   di |S  | j                   di |S c c}}w c c}w c c}}w # t        $ r |cY S w xY w)zDeserialize event params into the wrapped Python dataclass.

        Args:
            params: Raw BiDi event params with camelCase keys.

        Returns:
            An instance of the dataclass, or the raw dict on failure.
        N	from_jsonr   r   )r   dicthasattrcallabler   dataclassesitems_camel_to_snakeis_dataclassfieldsname	Exception)	r   paramsdckvsnake_paramsfvalid_fieldsfiltereds	            r   r   z_EventWrapper.from_json4   sB    %););t)CM	t));7HTEWEWEaEa<b))33F;;$CI<<>R41aD003Q6RLRt11202		$:L:L0MN1NN-9-?-?-AWTQQ,EVAqDWW)t))5H55%4%%555 SNW  	M	sN   AE 2E 	E%;E  E3E EEE /E E E E c                    | d   j                         g}| dd  D ]E  }|j                         r"|j                  d|j                         g       5|j                  |       G dj	                  |      S )Nr      _ )lowerisupperextendappendjoin)r(   resultchars      r   r%   z_EventWrapper._camel_to_snakeN   se    q'--/"H 	$D||~sDJJL12d#		$
 wwvr   N)r   r
   r   r   )r*   r    returnr   )r(   r
   r=   r
   )r   r   r   r   r   r   staticmethodr%   r   r   r   r   r   -   s#    U)4  r   r   c                  \    e Zd ZdZddZddZdddZddZddZddZ	ddd	Z
dd
ZddZy)_EventManagerz*Manages event subscriptions and callbacks.c                   || _         || _        i | _        i | _        |j	                         D ci c]  }|j
                  |j                   c}| _        dj                  t        |j                                     | _        t        j                         | _        |j	                         D ];  }t        |j
                  |j                        }|| j                  |j
                  <   = y c c}w )Nz, )connevent_configssubscriptions_event_wrappersvaluesr   r   _bidi_to_classr:   sortedkeys_available_events	threadingLock_subscription_lockr   )r   rB   rC   configwrappers        r   r   z_EventManager.__init__\   s    	*#%!S`SgSgSijv00&2D2DDj!%6-2D2D2F+G!H"+.."2 $**, 	>F#F$5$5v7I7IJG6=D  !2!23	> ks   C*c                v    | j                   j                  |      }|st        d| d| j                         |S )NzEvent 'z' not found. Available events: )rC   get
ValueErrorrJ   )r   eventevent_configs      r   validate_eventz_EventManager.validate_eventj   sA    ))--e4wug-LTMcMcLdeffr   Nc                   | j                   5  || j                  vr^t        | j                        }|j	                  |g|      }t        |t              r|j                  d      nd}g |d| j                  |<   ddd       y# 1 sw Y   yxY w)z4Subscribe to a BiDi event if not already subscribed.)contextssubscriptionN)	callbackssubscription_id)rM   rD   r   rB   	subscribe
isinstancer    rQ   )r   r   rW   sessionr;   sub_ids         r   subscribe_to_eventz _EventManager.subscribe_to_eventp   s    $$ 	!3!33!$)), **J<(*K7A&$7ON3UY!#'-2"":.	 	 	s   A-BBc                B   | j                   5  | j                  j                  |      }|a|d   s\t        | j                        }|j                  d      }|r|j                  |g       n|j                  |g       | j                  |= ddd       y# 1 sw Y   yxY w)z9Unsubscribe from a BiDi event if no more callbacks exist.NrY   rZ   rD   events)rM   rD   rQ   r   rB   unsubscribe)r   r   entryr]   r^   s        r   unsubscribe_from_eventz$_EventManager.unsubscribe_from_event|   s    $$ 		3&&**:6E {);!$)),#45''vh'?''
|'<&&z2		3 		3 		3s   A?BBc                    | j                   5  | j                  |   d   j                  |       d d d        y # 1 sw Y   y xY wNrY   )rM   rD   r9   )r   r   callback_ids      r   add_callback_to_trackingz&_EventManager.add_callback_to_tracking   sB    $$ 	Lz*;7>>{K	L 	L 	Ls	   "8Ac                    | j                   5  | j                  j                  |      }|r||d   v r|d   j                  |       d d d        y # 1 sw Y   y xY wrh   )rM   rD   rQ   remove)r   r   ri   re   s       r   remove_callback_from_trackingz+_EventManager.remove_callback_from_tracking   sX    $$ 	7&&**:6Ek(::k"))+6	7 	7 	7s   9AAc                   | j                  |      }| j                  j                  |j                        }| j                  j                  ||      }| j                  |j                  |       | j                  |j                  |       |S r   )rU   rE   rQ   r   rB   add_callbackr_   rj   )r   rS   callbackrW   rT   event_wrapperri   s          r   add_event_handlerz_EventManager.add_event_handler   sv    **51,,001H1HIii,,]HE 7 7B%%l&=&={Kr   c                   | j                  |      }| j                  j                  |j                        }| j                  j                  ||       | j                  |j                  |       | j                  |j                         y r   )rU   rE   rQ   r   rB   remove_callbackrm   rf   )r   rS   ri   rT   rq   s        r   remove_event_handlerz"_EventManager.remove_event_handler   sl    **51,,001H1HI		!!-=**<+B+BKP##L$;$;<r   c                l   | j                   5  | j                  s
	 ddd       yt        | j                        }t	        | j                  j                               D ]  \  }}| j                  j                  |      }t        |t              r|d   n|}|r#|D ]  }| j                  j                  ||         t        |t              r|j                  d      nd}|r|j                  |g       |j                  |g        | j                  j                          ddd       y# 1 sw Y   yxY w)zClear all event handlers.NrY   rZ   ra   rb   )rM   rD   r   rB   listr$   rE   rQ   r\   r    rt   rd   clear)r   r]   r   re   rq   rY   ri   r^   s           r   clear_event_handlersz"_EventManager.clear_event_handlers   s   $$ 	'%%	' 	' dii(G%)$*<*<*B*B*D%E 
=!
E $ 4 4 8 8 D2<UD2IE+.u	 '0 N		11-MN9CE49P#45VZ''vh'?''
|'<
= $$&	' 	' 	's   D*C=D**D3)rC   zdict[str, EventConfig])rS   r
   r=   r	   r   )r   r
   rW   list[str] | Noner=   None)r   r
   r=   r{   )r   r
   ri   intr=   r{   )rS   r
   rp   r   rW   rz   r=   r|   )rS   r
   ri   r|   r=   r{   )r=   r{   )r   r   r   r   r   rU   r_   rf   rj   rm   rr   ru   ry   r   r   r   r@   r@   Y   s3    4>
3L7='r   r@   )r   
__future__r   rK   collections.abcr   r#   r   typingr   &selenium.webdriver.common.bidi.sessionr   r	   r   r@   r   r   r   <module>r      sN   $ #  $ !  :   ) )X[' ['r   