Xjc!ddlmZddlmZddlmZmZmZmZm Z m Z m Z m Z m Z mZmZeZGddeZGddeZede ZGd d Zy ) ) OrderedDict)Lock) AnyCallableDictListMappingOptionaloverloadSetTupleTypeVarUnionceZdZdZy) PyeeExceptionz@An exception internal to pyee. Deprecated in favor of PyeeError.N__name__ __module__ __qualname____doc__]/mnt/ssd/data/Dropbox/adrian/vault-secondbrain/venv/lib/python3.12/site-packages/pyee/base.pyrrsJrrceZdZdZy) 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"y)" 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. selfreturnNc@t|_t|_yN)dict_eventsr_lockr s r__init__zEventEmitter.__init__>s F  6 rc@|jj}|d=|S)Nr&)__dict__copyr states r __getstate__zEventEmitter.__getstate__Es  ""$ 'N rr-cX|jj|t|_yr#)r*updaterr&r,s r __setstate__zEventEmitter.__setstate__Js U#V reventcyr#rr r2s ronzEventEmitter.onNsDGrfcyr#rr r2r6s rr5zEventEmitter.onPs;>rcL||j|S|j||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.onSs+: 9??5) )$$UA. .rc0dtdtffd }|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!c.j|||Sr#_add_event_handler)r6r2r s rr5z#EventEmitter.listens_to..ons  # #E1a 0Hr)r)r r2r5s`` rr:zEventEmitter.listens_tous ' g  rc,|j||||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|jd|||j5||jvrt|j|<||j||<dddy#1swYyxYw)N new_listener)emitr&r%r)r r2rArBs rr?zEventEmitter._add_event_handlers_ .%+ ZZ 'DLL(&1m U#%&DLL  " ' ' 's 8A!!A*args.kwargsc||i|yr#r)r r6rFrGs r _emit_runzEventEmitter._emit_runs 46rcHt|jjS)z6Get a set of events that this emitter is listening to.)setr%keysr's r event_nameszEventEmitter.event_namess4<<$$&''rerrorcN|dk(r t|tr|td|y)NrNz%Uncaught, unspecified 'error' event: ) isinstance Exceptionr)r r2rNs r_emit_handle_potential_errorz)EventEmitter._emit_handle_potential_errors1 G %+ "Gw OPP rcd}|j5t|jj|t j }dddD]}|j |||d}|S#1swY'xYw)NFT)r&listr%getrvaluesrI)r r2rFrGhandledfuncsr6s r_call_handlerszEventEmitter._call_handlerssz  ZZ J))%?FFHIE J A NN1dF +G   J Js ._wrapper..gssZZ$ ,dll56I1I--eQ7# $$8 $$)&))$$s 4AA%)rr?)r6r_r2r s` r_wrapperz#EventEmitter.once.._wrappers; * * * *  # #E1a 0Hr)r)r r2r6r`s`` roncezEventEmitter.onces,  X & 9OA; rc||jvr<|j|j||j|s|j|=yyy)zNaked unprotected removal.N)r%popr8s rr^zEventEmitter._remove_listenersG DLL LL  # #A &<<&LL'' !rcj|j5|j||dddy#1swYyxYw)z&Removes the function `f` from `event`.N)r&r^r8s rremove_listenerzEventEmitter.remove_listener s. ZZ ,  ! !% + , , ,s)2c|j5|t|j|<nt|_dddy#1swYyxYw)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_listenerss?ZZ & &1m U##v  & & &s *AA cxt|jj|tj S)z:Returns a list of all listeners registered to the `event`.)rTr%rUrrLr4s r listenerszEventEmitter.listenerss)DLL$$UKM:??ABBrr#)#rrrrSelfr(r strrr.r1r rrr5r rr:r;r?r rrIr rMrRboolrYrErar^rergrrirrrrr!s8"t""4GCH$5 4S(9dGGcGhy'/A&BGG >>c>g>'>>8< / / /#+G#4 / w'G!344 5 /Dchy'7I.J(4G ' 'c 'h '8 ' CHoS#X   ($(3s8(Q4QQCQDQCHoS#X       :!% H   B(t(C(H((,d,3,8,, &4& &&CCSCT(^CrrN) collectionsr threadingrtypingrrrrr r r r r rrrjrQrrrrrrrrps^$     KIK% % )8 ,{C{Cr