rh:!ddlmZddlmZddlmZmZmZmZm Z m Z m Z m Z m Z mZmZeZGddeZGddeZede ZGd d Zd S) ) OrderedDict)Lock) AnyCallableDictListMappingOptionaloverloadSetTupleTypeVarUnionceZdZdZdS) PyeeExceptionz@An exception internal to pyee. Deprecated in favor of PyeeError.N__name__ __module__ __qualname____doc__U/var/lib/jenkins/jobs/Dev/workspace/my-venv/lib/python3.11/site-packages/pyee/base.pyrrsJJJJrrceZdZdZdS) PyeeErrorzAn error internal to pyee.Nrrrrrrs$$$$rrHandler)boundc eZdZdZdeddfdZdedeeeffdZ dedeeefddfdZ e ded ede e ge ffd Ze ded ed e de fd Z d!ded ed ee dee e e ge fffd Zded ede e ge ffdZded ed e de fdZded ede de fdZded e deedfdeeefddf dZdedeefdZded ededdfdZded edeedfdeeefdef dZded edededef dZ d!ded ed ee de fdZded ed e ddfdZded ed e ddfdZd!ded eeddfdZ ded ede!e fd Z"dS)" EventEmitteraThe base event emitter class. All other event emitters inherit from this class. Most events are registered with an emitter via the `on` and `once` methods, and fired with the `emit` method. However, pyee event emitters have two *special* events: - `new_listener`: Fires whenever a new listener is created. Listeners for this event do not fire upon their own creation. - `error`: When emitted raises an Exception by default, behavior can be overridden by attaching callback to the event. For example: ```py @ee.on('error') def on_error(message): logging.err(message) ee.emit('error', Exception('something blew up')) ``` All callbacks are handled in a synchronous, blocking manner. As in node.js, raised exceptions are not automatically handled for you---you must catch your own exceptions, and treat them accordingly. selfreturnNcRt|_t|_dSN)dict_eventsr_lockr s r__init__zEventEmitter.__init__>s# FF  66 rc>|j}|d=|S)Nr&)__dict__copyr states r __getstate__zEventEmitter.__getstate__Es! ""$$ 'N rr-c`|j|t|_dSr#)r*updaterr&r,s r __setstate__zEventEmitter.__setstate__Js' U###VV reventcdSr#rr r2s ronzEventEmitter.onNsDGCrfcdSr#rr r2r6s rr5zEventEmitter.onPs;>3rc\|||S|||S)auRegisters the function `f` to the event name `event`, if provided. If `f` isn't provided, this method calls `EventEmitter#listens_to`, and otherwise calls `EventEmitter#add_listener`. In other words, you may either use it as a decorator: ```py @ee.on('data') def data_handler(data): print(data) ``` Or directly: ```py ee.on('data', data_handler) ``` In both the decorated and undecorated forms, the event handler is returned. The upshot of this is that you can call decorated handlers directly, as well as use them in remove_listener calls. Note that this method's return type is a union type. If you are using mypy or pyright, you will probably want to use either `EventEmitter#listens_to` or `EventEmitter#add_listener`. ) listens_to add_listenerr8s rr5zEventEmitter.onSs1: 9??5)) )$$UA.. .rc4dtdtffd }|S)aVReturns a decorator which will register the decorated function to the event name `event`: ```py @ee.listens_to("event") def data_handler(data): print(data) ``` By only supporting the decorator use case, this method has improved type safety over `EventEmitter#on`. r6r!c6|||Sr#_add_event_handler)r6r2r s rr5z#EventEmitter.listens_to..ons  # #E1a 0 0 0Hr)r)r r2r5s`` rr:zEventEmitter.listens_tous< ' g        rc4|||||S)a:Register the function `f` to the event name `event`: ``` def data_handler(data): print(data) h = ee.add_listener("event", data_handler) ``` By not supporting the decorator use case, this method has improved type safety over `EventEmitter#on`. r>r8s rr;zEventEmitter.add_listeners! q!,,,rkvc|d|||j5||jvrt|j|<||j||<ddddS#1swxYwYdS)N new_listener)emitr&r%r)r r2rArBs rr?zEventEmitter._add_event_handlers .%+++ Z ' 'DL((&1mm U#%&DL  " ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 's0AA #A args.kwargsc||i|dSr#r)r r6rFrGs r _emit_runzEventEmitter._emit_runs 46rcNt|jS)z6Get a set of events that this emitter is listening to.)setr%keysr's r event_nameszEventEmitter.event_namess4<$$&&'''rerrorcd|dkr)t|tr|td|dS)NrNz%Uncaught, unspecified 'error' event: ) isinstance Exceptionr)r r2rNs r_emit_handle_potential_errorz)EventEmitter._emit_handle_potential_errorsD G  %++ Q  O O OPPP  rcd}|j5t|j|t }dddn #1swxYwY|D]}||||d}|S)NFT)r&listr%getrvaluesrI)r r2rFrGhandledfuncsr6s r_call_handlerszEventEmitter._call_handlerss  Z J J))%??FFHHIIE J J J J J J J J J J J J J J J  A NN1dF + + +GGsAAA!$A!cx||||}|s |||r|dnd|S)acEmit `event`, passing `*args` and `**kwargs` to each attached function. Returns `True` if any functions are attached to `event`; otherwise returns `False`. Example: ```py ee.emit('data', '00101001') ``` Assuming `data` is an attached function, this will call `data('00101001')'`. rN)rYrR)r r2rFrGrWs rrEzEventEmitter.emitsL&%%eT6:: P  - -e5NT!WW$ O O OrcNdtdtffd }||S||S)zkThe same as `ee.on`, except that the listener is automatically removed after being called. r6r!crdtdtdtffd }|S)NrFrGr!cj5jvr&jvrn ddddS dddn #1swxYwY|i|Sr#)r&r%_remove_listener)rFrGr2r6r s rgz.EventEmitter.once.._wrapper..gsZ$$ ,,dl56I1I1I--eQ7777# $$$$$$$$8 $$$$$$$$$$$$$$$q$)&)))s1AAA)rr?)r6r_r2r s` r_wrapperz#EventEmitter.once.._wrapperse * * * * * * * * * * *  # #E1a 0 0 0Hr)r)r r2r6r`s`` roncezEventEmitter.oncesO  X       & 9O8A;; rc|j||t|j|s |j|=dSdS)zNaked unprotected removal.N)r%poplenr8s rr^zEventEmitter._remove_listenersN U"""4<&'' $ U### $ $rcr|j5|||ddddS#1swxYwYdS)z&Removes the function `f` from `event`.N)r&r^r8s rremove_listenerzEventEmitter.remove_listener s Z , ,  ! !% + + + , , , , , , , , , , , , , , , , , ,s ,00c|j5|t|j|<nt|_ddddS#1swxYwYdS)ztRemove all listeners attached to `event`. If `event` is `None`, remove all listeners on all events. N)r&rr%r$r4s rremove_all_listenersz!EventEmitter.remove_all_listenerssZ & & &1mm U###vv  & & & & & & & & & & & & & & & & & &s-AA Act|j|tS)z:Returns a list of all listeners registered to the `event`.)rTr%rUrrLr4s r listenerszEventEmitter.listenerss2DL$$UKMM::??AABBBrr#)#rrrrSelfr(r strrr.r1r rrr5r rr:r;r?r rrIr rMrRboolrYrErar^rfrhrrjrrrrr!s=8"t"""""4GCH$5 4S(9dGGcGhy'/A&BGGGXG >>c>g>'>>>X>8< / / / /#+G#4 / w'G!344 5 / / / /Dchy'7I.J(4G ' 'c 'h '8 ' ' ' ' CHoS#X   ($(3s8((((Q4QQCQDQQQQCHoS#X       :!% H   B$t$C$H$$$$$ ,d,3,8,,,,, &&4& &&&&&CCSCT(^CCCCCCrrN) collectionsr threadingrtypingrrrrr r r r r rrrkrQrrrrrrrrqsl$#####                           KKKKKIKKK%%%%% %%% ')8 , , ,zCzCzCzCzCzCzCzCzCzCr