3 [|[@s~dZddlZddlmZddlmZddlmZddlmZddlmZddl m Z dd l m Z d Z Gd d d e Ze ZGd dde ZeZyddlmZWnek reZYnXGdddeZeZyddlmZWnek reZYnXGddde ZGdddeeZeeGdddeZGdddeeZeeGdddeZddZdd Zd!d"Zd#d$Z dS)%zAdapter management N) implementer) providedBy) Interface)ro)IAdapterRegistry)_normalize_name) STRING_TYPESc @seZdZd#Zd Zffd d Zd dZeddddZddZ ddZ ddZ e fddZ d$ddZddZd%dd Zd!d"ZdS)&BaseAdapterRegistrylookupqueryMultiAdapterlookup1 queryAdapter adapter_hook lookupAllnames subscriptions subscribersrcCs$g|_g|_i|_|j||_dS)N) _adapters _subscribers _provided _createLookup __bases__)selfbasesr/usr/lib64/python3.6/adapter.py__init__(s zBaseAdapterRegistry.__init__cCs$||jd<tj||_|j|dS)Nr)__dict__rchanged)rrrrr _setBasesWs  zBaseAdapterRegistry._setBasescCs |jdS)Nr)r)rrrr\szBaseAdapterRegistry.cCs |j|S)N)r )rrrrrr!]scCs2|j||_x |jD]}t|j||j|<qWdS)N) LookupClass _v_lookup _delegatedgetattrr)rnamerrrr`s  z!BaseAdapterRegistry._createLookupcCs|jd7_|jj|dS)N) _generationr#r)roriginally_changedrrrreszBaseAdapterRegistry.changedc Cst|tstd|dkr.|j||||dSttt|}t|}t|}|j }xt||krl|j iqTW||}||f}x.|D]&} |j | } | dkri} | || <| }qW|j ||krdS|||<|j j |dd} | |j |<| dkr|j j||j|dS)Nzname is not a stringrr') isinstancer ValueError unregistertuplemap_convert_None_to_Interfacerlenrappendgetrr# add_extendorr) rrequiredprovidedr&valueorderbyorder componentskeykdnrrrregisteris6      zBaseAdapterRegistry.registerc Csxttt|}t|}t|}|j}t||kr4dS||}||f}x&|D]}|j|} | dkrfdS| }qLW|j|S)N)r-r.r/rr0rr2) rr4r5r&r7r8r9r:r;r<rrr registereds    zBaseAdapterRegistry.registeredNcCs8ttt|}t|}|j}|t|kr,dS||}||f}g} x4|D],} |j| } | dkrbdS| j|| f| }qHW|j|} | dkrdS|dk r| |k rdS||=|sx*t| D]\} } | | } | rPq| | =qWx|r|d r|d=qW|j|d}|dkr |j|=|j j |n ||j|<|j |dS)NFr'rr@) r-r.r/r0rr2r1reversedrr#remove_extendorr)rr4r5r&r6r7r8r9r:lookupsr;r<oldcompr=rrrr,sD         zBaseAdapterRegistry.unregisterc Csttt|}t}t|}|j}xt||kr:|jiq"W||}||f}x.|D]&} |j| } | dkrvi} | || <| }qTW|j|f|f||<|dk r|jj|dd} | |j|<| dkr|j j ||j |dS)Nrr') r-r.r/_BLANKr0rr1r2rr#r3r) rr4r5r6r&r7r8r9r:r;r<r=rrr subscribes*     zBaseAdapterRegistry.subscribecshttt|}t|}|j}|t|kr,dS||}||f}g}x4|D],} |j| } | dkrbdS|j|| f| }qHW|jt} | sdSdkrf} ntfdd| D} | | krdS| r| |t<nP|t=x*t|D]\} } | | } | rPq| | =qWx|r|d r|d=qW|dk rZ|j |t| t| }|dkrZ|j |=|j j ||j |dS)Ncsg|]}|kr|qSrr).0v)r6rr sz3BaseAdapterRegistry.unsubscribe..r'rr@r@) r-r.r/r0rr2r1rFrArr#rBr)rr4r5r6r7r8r9r:rCr;r<rDnewrEr=r)r6r unsubscribesL           zBaseAdapterRegistry.unsubscribecCsGddd}|S)Nc@seZdZiZdS)z2BaseAdapterRegistry.get..XXXTwistedFakeOutN)__name__ __module__ __qualname__Z selfImpliedrrrrXXXTwistedFakeOut'srPr)r_rPrrrr2&szBaseAdapterRegistry.get) r r r rrrrrr)N)N)rMrNrOr$r(rr propertyrrrr>rFr?r,rGrLr2rrrrr s  / #  0 .)rSr _registryr _verify_ro_verify_generations)rr)rrrrs zVerifyingBaseFallback.changedcCs$dd|jD|jkr |jddS)NcSsg|] }|jqSr)r()rHrfrrrrJsz1VerifyingBaseFallback._verify..)rhrir)rrrr_verifyszVerifyingBaseFallback._verifycCs|jtj|||S)N)rjrSr[)rr5r&rrrr[szVerifyingBaseFallback._getcachecCs|jtj|||S)N)rjrSr)rr4r5rrrrszVerifyingBaseFallback.lookupAllcCs|jtj|||S)N)rjrSr)rr4r5rrrrsz#VerifyingBaseFallback.subscriptionsN)rMrNrOrrjr[rrrrrrres re) VerifyingBasecseZdZfddZdfdd ZddZdd Zd d Zd d Ze fddZ e dfddZ ddZ ddZ ddZddZZS)AdapterLookupBasecs&||_i|_|jtt|jdS)N)rg _requiredinit_extendorssuperrlr)rregistry) __class__rrrszAdapterLookupBase.__init__NcsJtt|jdx*|jjD]}|}|dk r|j|qW|jjdS)N)rorlrrmkeysrLrW)rrXrf)rqrrrs zAdapterLookupBase.changedcCs&i|_x|jjD]}|j|qWdS)N) _extendorsrgrr3)rprrrrnsz AdapterLookupBase.init_extendorscsT|j}xHjD]>}|j|f}fdd|Dgfdd|D||<qWdS)Ncsg|]}j|r|qSr) isOrExtends)rHe)r5rrrJsz2AdapterLookupBase.add_extendor..csg|]}j|s|qSr)ru)rHrv)r5rrrJs)rs__iro__r2)rr5rsi extendorsr)r5rr3s   zAdapterLookupBase.add_extendorcs8|j}x,jD]"}fdd|j|fD||<qWdS)Ncsg|]}|kr|qSrr)rHrv)r5rrrJsz5AdapterLookupBase.remove_extendor..)rsrwr2)rr5rsrxr)r5rrBs z!AdapterLookupBase.remove_extendorcGs:|j}x.|D]&}|j}||kr |j|d||<q WdS)Nr')rmweakrefrG)rr4Z_refsrfrefrrr _subscribes   zAdapterLookupBase._subscribec Cst|}d}t|}x\|jjD]P}|j}|t|kr6q|jjj|}|sJq||} t| |||d|}|dk rPqW|j ||S)Nr) r-r0rgrrr#rsr2_lookupr|) rr4r5r&r_r7rpr8ryr9rrrr] s"   z"AdapterLookupBase._uncached_lookupcCs8|jtt|||}|dkr |S||}|dkr4|S|S)N)r r.r)robjectsr5r&r^rar_rrrr #sz#AdapterLookupBase.queryMultiAdapterc Cst|}t|}i}xVt|jjD]F}|j}|t|kr:q"|jjj|}|sNq"||}t ||||d|q"W|j |t|j S)Nr) r-r0rArgrrr#rsr2 _lookupAllr|items) rr4r5r7r_rpr8ryr9rrrrb.s  z%AdapterLookupBase._uncached_lookupAllcCsdd|j||DS)NcSsg|] }|dqS)rr)rHrZrrrrJAsz+AdapterLookupBase.names..)r)rr4r5rrrr@szAdapterLookupBase.namesc Cst|}t|}g}xht|jjD]X}|j}|t|kr:q"|dkrJ|f}n|jjj|}|dkrbq"t ||||t |d|q"W|j ||S)Nr) r-r0rArgrrr#rsr2_subscriptionsrFr|)rr4r5r7r_rpr8ryrrrrcCs   z)AdapterLookupBase._uncached_subscriptionscCsf|jtt||}|dkr6f}xB|D] }||q$Wn,g}x&|D]}||}|dk r@|j|q@W|S)N)rr.rr1)rr~r5rr_Z subscriptionZ subscriberrrrrZs  zAdapterLookupBase.subscribers)N)rMrNrOrrrnr3rBr|rFr]r rbrrcr __classcell__rr)rqrrls    rlc@s eZdZdS) AdapterLookupN)rMrNrOrrrrrhsrcsLeZdZeZfffdd ZddZddZfddZfd d Z Z S) AdapterRegistrycstj|_tt|j|dS)N)rzWeakKeyDictionary_v_subregistriesrorr)rr)rqrrrps zAdapterRegistry.__init__cCsd|j|<dS)Nr')r)rrfrrr_addSubregistrywszAdapterRegistry._addSubregistrycCs||jkr|j|=dS)N)r)rrfrrr_removeSubregistryzs z"AdapterRegistry._removeSubregistrycsb|jjdf}x|D]}||kr|j|qWx|D]}||kr4|j|q4Wtt|j|dS)Nr)rr2rrrorr )rrrDrf)rqrrr ~s  zAdapterRegistry._setBasescs2tt|j|x|jjD]}|j|qWdS)N)rorrrrr)rr)sub)rqrrrszAdapterRegistry.changed) rMrNrOrr"rrrr rrrr)rqrrks  rc@s eZdZdS)VerifyingAdapterLookupN)rMrNrOrrrrrsrc@seZdZeZdS)VerifyingAdapterRegistryN)rMrNrOrr"rrrrrsrcCs|dkr tS|SdS)N)r)xrrrr/sr/c Cs||krNxv||jD]4}|j|}|rt|||||d|}|dk r|SqWn2x0|D](} |j| }|rT|j|}|dk rT|SqTWdS)Nr')__sro__r2r}) r9specsr5r&rxlspeccompsrfifacerrrr}s     r}c Cst||krFxft||jD](}|j|}|rt|||||d|qWn*x(t|D]}|j|}|rP|j|qPWdS)Nr')rArr2rupdate) r9rr5r_rxrrrrrrrrs  rc Cs||krHxvt||jD]*}|j|}|rt||||||d|qWn8x6t|D]*} |j| }|rR|j|}|rR|j|qRWdS)Nr')rArr2rextend) r9rr5r&r_rxrrrrrrrrs   r)!__doc__rzZzope.interfacerrrrZzope.interface.interfacesrZzope.interface._compatrrrFr`r r\rSZ LookupBasePyZ-zope.interface._zope_interface_coptimizationsrd ImportErrorreZVerifyingBasePyrkrlrrrrr/r}rrrrrrsJ       l  $$