σ ΎΓ9Qc@sqdZddgZdefd„ƒYZdefd„ƒYZdefd„ƒYZdeefd„ƒYZd S( s[This module contains variants of certain base types which call registered hooks on changes.tHookablet HookableSett HookableTypecBs eZd„Zed„ƒZRS(cCs½|jdƒr§y|d}WnYtk rxd}xCtd„|ƒD]+}|rktdt|ƒƒ‚qF|}qFWnXx+|dD]}tj||ƒ||$sstoo many base classes: %s( thas_keytKeyErrortNonetfiltert TypeErrortstrRt wrap_methodttypet__new__(tclstnametbasestdcttbasetbase_candidatet methodname((s6/usr/lib/python2.7/site-packages/slip/util/hookable.pyRs cs+t||ƒ‰‡fd†}||_|S(Ncs ˆ|||Ž}|jƒ|S(N(t _run_hooks(tselftptktretval(tfunc(s6/usr/lib/python2.7/site-packages/slip/util/hookable.pyt methodwrapper4s (tgetattrt func_name(RRRR((Rs6/usr/lib/python2.7/site-packages/slip/util/hookable.pyR 0s (t__name__t __module__Rt classmethodR (((s6/usr/lib/python2.7/site-packages/slip/util/hookable.pyRs t _HookEntrycBs,eZd„Zd„Zd„Zd„ZRS(cCs||_||_||_dS(N(t_HookEntry__hookt_HookEntry__argst_HookEntry__kwargs(Rthooktargstkwargs((s6/usr/lib/python2.7/site-packages/slip/util/hookable.pyt__init__?s  cCs4|j|jko3|j|jko3|j|jkS(N(R$R%R&(Rtobj((s6/usr/lib/python2.7/site-packages/slip/util/hookable.pyt__cmp__Es$cCs-|jjƒ|jjƒA|jjƒjƒAS(N(R$t__hash__R%R&t iteritems(R((s6/usr/lib/python2.7/site-packages/slip/util/hookable.pyR-IscCs|j|j|jŽdS(N(R$R%R&(R((s6/usr/lib/python2.7/site-packages/slip/util/hookable.pytrunMs(R R!R*R,R-R/(((s6/usr/lib/python2.7/site-packages/slip/util/hookable.pyR#=s   cBs’eZdZeZed„ƒZd„Zd„ZeeeƒZ d„Z d„Z ee e ƒZ d„Z d„Zd„Zd „Zd „ZRS( s2An object which calls registered hooks on changes.cOs%t|dƒstƒ|_n|jS(Nt__real_hooks__(thasattrtsetR0(RRR((s6/usr/lib/python2.7/site-packages/slip/util/hookable.pyt __hooks__WscCs"t|dƒst|_n|jS(Nt__hooks_enabled__(R1tTrueR4(R((s6/usr/lib/python2.7/site-packages/slip/util/hookable.pyt_get_hooks_enabled]s cCs ||_dS(N(R4(Rtenabled((s6/usr/lib/python2.7/site-packages/slip/util/hookable.pyt_set_hooks_enabledbscCs"t|dƒst|_n|jS(Nt__hooks_frozen__(R1tFalseR9(R((s6/usr/lib/python2.7/site-packages/slip/util/hookable.pyt_get_hooks_frozengs cCsY||jkrdS||_|r1tƒ|_n$x|jD]}|jƒq;W|`dS(N(t hooks_frozenR9R2t__hooks_frozen_entries__R/(Rtfreezet hookentry((s6/usr/lib/python2.7/site-packages/slip/util/hookable.pyt_set_hooks_frozenls cCs t|_dS(N(R5R<(R((s6/usr/lib/python2.7/site-packages/slip/util/hookable.pyt freeze_hooks{scCs t|_dS(N(R:R<(R((s6/usr/lib/python2.7/site-packages/slip/util/hookable.pyt thaw_hooks~scOs&t|||ƒ}|jj|ƒdS(N(R#R3tadd(RR'R(R)R?((s6/usr/lib/python2.7/site-packages/slip/util/hookable.pytadd_hookscOs |jjt|||ƒƒdS(N(R3tremoveR#(RR'R(R)((s6/usr/lib/python2.7/site-packages/slip/util/hookable.pyt remove_hook‡scCsM|jrI|js3x1|jD]}|jƒqWqI|jj|jƒndS(N(t hooks_enabledR<R3R/R=tupdate(RR?((s6/usr/lib/python2.7/site-packages/slip/util/hookable.pyR‹s   (R R!t__doc__Rt __metaclass__tpropertyR3R6R8RGR;R@R<RARBRDRFR(((s6/usr/lib/python2.7/site-packages/slip/util/hookable.pyRQs        c BseZdZd Zd „ZRS( s5A set object which calls registered hooks on changes.RCtcleartdifference_updatetdiscardtintersection_updatetpopREtsymmetric_difference_updateRHcCstj|ƒ}tƒ|_|S(N(R2tcopyR0(RR+((s6/usr/lib/python2.7/site-packages/slip/util/hookable.pyRRœs ( saddsclearsdifference_updatesdiscardsintersection_updatespopsremovessymmetric_difference_updatesupdate(R R!RIRRR(((s6/usr/lib/python2.7/site-packages/slip/util/hookable.pyR”s N( RIt__all__RRtobjectR#RR2R(((s6/usr/lib/python2.7/site-packages/slip/util/hookable.pyts  "C