Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
Size: Mime:
ó
‹EYc@Às%dZddlmZmZddlmZddlmZddlmZddlmZdd	l	m
Z
dd
lZdd
lZdej
fd„ƒYZd
efd„ƒYZdefd„ƒYZdefd„ƒYZdefd„ƒYZdefd„ƒYZdefd„ƒYZd
S(s•Attribute implementation for _Dispatch classes.

The various listener targets for a particular event class are represented
as attributes, which refer to collections of listeners to be fired off.
These collections can exist at the class level as well as at the instance
level.  An event is fired off using code like this::

    some_object.dispatch.first_connect(arg1, arg2)

Above, ``some_object.dispatch`` would be an instance of ``_Dispatch`` and
``first_connect`` is typically an instance of ``_ListenerCollection``
if event listeners are present, or ``_EmptyListener`` if none are present.

The attribute mechanics here spend effort trying to ensure listener functions
are available with a minimum of function call overhead, that unnecessary
objects aren't created (i.e. many empty per-instance listener collections),
as well as that everything is garbage collectable when owning references are
lost.  Other features such as "propagation" of listener functions across
many ``_Dispatch`` instances, "joining" of multiple ``_Dispatch`` instances,
as well as support for subclass propagation (e.g. events assigned to
``Pool`` vs. ``QueuePool``) are all implemented here.

i(tabsolute_importtwith_statementi(tutil(t	threadingi(tregistry(tlegacy(tchainNt
RefCollectioncBÀseZdZd„ZRS(trefcCÀstj|tjƒS(N(tweakrefRRt_collection_gced(tself((sJ/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/event/attr.pyt_memoized_attr_ref.s(sref(t__name__t
__module__t	__slots__R(((sJ/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/event/attr.pyR+st_ClsLevelDispatchcBÀseeZdZdZd„Zd„Zd	„Zd
„Zd„Zd„Z	d
„Z
d„Zd„ZRS(s2Class-level events on :class:`._Dispatch` classes.tnamet	arg_namesthas_kwtlegacy_signaturest	_clslevelt__weakref__cCÀs˜|j|_tj|ƒ}|jd|_t|jƒ|_t	t
tt|dgƒdd„ƒƒƒ|_
tj|||ƒ|_tjƒ|_dS(Nit_legacy_signaturestkeycSÀs|dS(Ni((ts((sJ/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/event/attr.pyt<lambda>@s(R
RRtinspect_getargspectargsRtbooltkeywordsRtlisttreversedtsortedtgetattrRRt_augment_fn_docst__doc__R	tWeakKeyDictionaryR(Rtparent_dispatch_clstfntargspec((sJ/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/event/attr.pyt__init__8scCÀsj|r|j|ƒ}n|jrfytj|dtƒ}Wntk
rMqfXtj|||ƒ}n|S(Ntno_self(t_wrap_fn_for_kwRRtget_callable_argspectTruet	TypeErrorRt_wrap_fn_for_legacy(RR'tnamedR(((sJ/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/event/attr.pyt_adjust_fn_specGs	
cÀs‡‡fd†}|S(NcÀs/ttˆj|ƒƒ}|j|ƒˆ|S(N(tdicttzipRtupdate(Rtkwtargdict(R'R(sJ/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/event/attr.pytwrap_kwTs
((RR'R7((R'RsJ/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/event/attr.pyR+SscCÀs×|j}t|tƒs$tdƒ‚|g}x“|rÂ|jdƒ}|j|jƒƒ||k	rƒ||jkrƒ|j|ƒq0||jkr¨t	j
ƒ|j|<n|j|j|jƒq0Wt
j||ƒdS(Ns*Class-level Event targets must be classes.i(tdispatch_targett
isinstancettypetAssertionErrortpoptextendt__subclasses__Rtupdate_subclasstcollectionstdequet
appendleftt
_listen_fnRt_stored_in_collection(Rt	event_keyt	propagatettargettstacktcls((sJ/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/event/attr.pytinsertZs				cCÀs×|j}t|tƒs$tdƒ‚|g}x“|rÂ|jdƒ}|j|jƒƒ||k	rƒ||jkrƒ|j|ƒq0||jkr¨t	j
ƒ|j|<n|j|j|jƒq0Wt
j||ƒdS(Ns*Class-level Event targets must be classes.i(R8R9R:R;R<R=R>RR?R@RAtappendRCRRD(RRERFRGRHRI((sJ/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/event/attr.pyRKjs				cCÀs“||jkr%tjƒ|j|<n|j|}xZ|jdD]K}||jkr@|jg|j|D]}||kri|^qiƒq@q@WdS(Ni(RR@RAt__mro__R=(RRGtclslevelRIR'((sJ/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/event/attr.pyR?{s
cCÀs~|j}|g}xU|ri|jdƒ}|j|jƒƒ||jkr|j|j|jƒqqWtj||ƒdS(Ni(	R8R<R=R>RtremoveRCRt_removed_from_collection(RRERGRHRI((sJ/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/event/attr.pyRN‡s			cCÀsNtƒ}x.|jjƒD]}|j|ƒ|jƒqWtj||ƒdS(sClear all class level listenersN(tsetRtvaluesR4tclearRt_clear(Rtto_cleart
dispatcher((sJ/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/event/attr.pyRR‘s
	
cCÀs|S(s™Return an event collection which can be modified.

        For _ClsLevelDispatch at the class level of
        a dispatcher, this returns self.

        ((Rtobj((sJ/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/event/attr.pyt
for_modifyšs(snames	arg_namesshas_kwslegacy_signaturess	_clslevels__weakref__(
R
RR$RR)R1R+RJRKR?RNRRRW(((sJ/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/event/attr.pyR2s							
		t_InstanceLevelDispatchcBÀseZdZd„ZRS(cCÀs|jj||ƒS(N(tparentR1(RR'R0((sJ/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/event/attr.pyR1§s((R
RRR1(((sJ/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/event/attr.pyRX¤st_EmptyListenercBÀs~eZdZeƒZdZdZd„Zd„Zd„Z	e	Z
ZZZ
Zd„Zd„Zd	„Zd
„ZeZRS(
sÙServes as a proxy interface to the events
    served by a _ClsLevelDispatch, when there are no
    instance-level events present.

    Is replaced by _ListenerCollection when instance-level
    events are added.

    RYtparent_listenersRcCÀsH||jkr|j|ƒn||_|j||_|j|_dS(N(RR?RYR[R(RRYt
target_cls((sJ/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/event/attr.pyR)ºs
	cCÀsht|j|jƒ}t||jƒ|krCt||j|ƒn!tt||jƒtƒsdt‚|S(sìReturn an event collection which can be modified.

        For _EmptyListener at the instance level of
        a dispatcher, this generates a new
        _ListenerCollection, applies it to the instance,
        and returns it.

        (	t_ListenerCollectionRYt
_instance_clsR"RtsetattrR9t_JoinedListenerR;(RRVtresult((sJ/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/event/attr.pyRWÁs
	!cOÀstdƒ‚dS(Nsneed to call for_modify()(tNotImplementedError(RRR5((sJ/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/event/attr.pyt
_needs_modifyÑscOÀs%x|jD]}|||Žq
WdS(sExecute this event.N(R[(RRR5R'((sJ/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/event/attr.pyt__call__ÖscCÀs
t|jƒS(N(tlenR[(R((sJ/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/event/attr.pyt__len__ÜscCÀs
t|jƒS(N(titerR[(R((sJ/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/event/attr.pyt__iter__ßscCÀs
t|jƒS(N(RR[(R((sJ/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/event/attr.pyt__bool__âs((sparentsparent_listenerssname(R
RR$t	frozensetRFt	listenersRR)RWRct	exec_onceRJRKRNRRRdRfRhRit__nonzero__(((sJ/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/event/attr.pyRZ«s								t_CompoundListenercBÀsJeZdZd„Zd„Zd„Zd„Zd„Zd„ZeZ	RS(	t_exec_once_mutext
_exec_oncecCÀs
tjƒS(N(RtLock(R((sJ/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/event/attr.pyt_memoized_attr__exec_once_mutexësc	OÀsJ|jsF|j/|js=z|||ŽWdt|_XnWdQXndS(s]Execute this event, but only if it has not been
        executed already for this collection.N(RpRoR-(RRR5((sJ/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/event/attr.pyRlîs	
	cOÀsFx|jD]}|||Žq
Wx|jD]}|||Žq+WdS(sExecute this event.N(R[Rk(RRR5R'((sJ/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/event/attr.pyRdúscCÀst|jƒt|jƒS(N(ReR[Rk(R((sJ/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/event/attr.pyRfscCÀst|j|jƒS(N(RR[Rk(R((sJ/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/event/attr.pyRhscCÀst|jp|jƒS(N(RRkR[(R((sJ/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/event/attr.pyRis(s_exec_once_mutexs
_exec_once(
R
RRRrRlRdRfRhRiRm(((sJ/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/event/attr.pyRnès						R]cBÀsVeZdZdZd„Zd„Zed	„Zd
„Zd„Z	d„Z
d
„ZRS(sÛInstance-level attributes on instances of :class:`._Dispatch`.

    Represents a collection of listeners.

    As of 0.7.9, _ListenerCollection is only first
    created via the _EmptyListener.for_modify() method.

    R[RYRRkRFRcCÀsl||jkr|j|ƒnt|_|j||_||_|j|_tjƒ|_	t
ƒ|_dS(N(RR?tFalseRpR[RYRR@RARkRPRF(RRYR\((sJ/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/event/attr.pyR)s		cCÀs|S(sžReturn an event collection which can be modified.

        For _ListenerCollection at the instance level of
        a dispatcher, this returns self.

        ((RRV((sJ/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/event/attr.pyRW&scCÀsœ|j}t|ƒ}|jj|jƒg|jD].}||krK|sZ||jkr2|^q2}|j|ƒ|jj|ƒ}tj|||ƒdS(sMPopulate from the listeners in another :class:`_Dispatch`
            object.N(RkRPRFR4R=tunionRt_stored_in_collection_multi(Rtothertonly_propagatetexisting_listenerstexisting_listener_settltother_listenerstto_associate((sJ/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/event/attr.pyt_update/s	
"
cCÀs8|j||jƒr4|r4|jj|jƒq4ndS(N(tprepend_to_listRkRFtaddRC(RRERF((sJ/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/event/attr.pyRJAscCÀs8|j||jƒr4|r4|jj|jƒq4ndS(N(tappend_to_listRkRFRRC(RRERF((sJ/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/event/attr.pyRKFscCÀs:|jj|jƒ|jj|jƒtj||ƒdS(N(RkRNRCRFtdiscardRRO(RRE((sJ/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/event/attr.pyRNKscCÀs1tj||jƒ|jjƒ|jjƒdS(N(RRSRkRFRR(R((sJ/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/event/attr.pyRRPs
(sparent_listenerssparentsnames	listenerss	propagates__weakref__(R
RR$RR)RWR-R}RJRKRNRR(((sJ/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/event/attr.pyR]s	
					R`cBÀs\eZdZd„Zed„ƒZd„Zd„Zd„Zd	„Z	d
„Z
d„ZRS(
RYRtlocalR[cCÀs4t|_||_||_||_|j|_dS(N(RsRpRYRR‚R[(RRYRR‚((sJ/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/event/attr.pyR)Ys
				cCÀst|j|jƒS(N(R"RYR(R((sJ/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/event/attr.pyRk`scCÀs|jj||ƒS(N(R‚R1(RR'R0((sJ/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/event/attr.pyR1dscCÀs |jj|ƒ|_|_|S(N(R‚RWR[(RRV((sJ/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/event/attr.pyRWgscCÀs|jj||ƒdS(N(R‚RJ(RRERF((sJ/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/event/attr.pyRJkscCÀs|jj||ƒdS(N(R‚RK(RRERF((sJ/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/event/attr.pyRKnscCÀs|jj|ƒdS(N(R‚RN(RRE((sJ/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/event/attr.pyRNqscCÀs
tƒ‚dS(N(Rb(R((sJ/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/event/attr.pyRRts(sparentsnameslocalsparent_listeners(R
RRR)tpropertyRkR1RWRJRKRNRR(((sJ/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/event/attr.pyR`Vs						(R$t
__future__RRtRRRRt	itertoolsRR	R@t
MemoizedSlotsRRRXRZRnR]R`(((sJ/home/tvault/.virtenv/lib/python2.7/site-packages/sqlalchemy/event/attr.pyt<module>sr=&H