3 ,WN# @sdZddlZddlZddlmZddlmZddlmZddlmZddlm Z ddlm Z dd lm Z dd lm Z dd l mZdd lmZdd lmZddlmZyddlmZWn ek rddlmZYnXdaed9ddZddZd:ddZeedfddZeeddfddZeedfddZeeddfddZd;ddZdd'd(Z(d?d)d*Z)d@d+d,Z*dAd-d.Z+e,Z-dBd/d0Z.dCd1d2Z/d3d4Z0dDd5d6Z1dEd7d8Z2dS)FzZope 3 Component Architecture N) Interface) implementedBy) providedBy)IComponentArchitecture)!IComponentRegistrationConvenience)IFactory)ComponentLookupError)IComponentLookup)_BLANK) adaptedBy)adapter)adapts)hookablecCsZ|dkr tdkrddlmatSyt|Stk rT}zt|jWYdd}~XnXdS)z! See IComponentArchitecture. Nr)base)rZzope.component.globalregistryr TypeErrorrargs)contexterrorr/usr/lib/python3.6/_api.pygetSiteManager,s rcCs"t|||}|dkrt|||S)N)queryAdapterInContextr)object interfacerr rrrgetAdapterInContext?s  rc Csxt|dd}|dk rVy ||}Wn(tk rHtjdjdk rDYnX|dk rV|S|j|rd|St|j||d|S)NZ __conform__)getattrrsysexc_infotb_nextrr queryAdapter)rrrdefaultZconformr rrrrEs   rcCs(t|||d|}|dkr$t||||S)N)r!r)rrnamerr rrr getAdapter`s r$cCs*|dkrt||||St|j||||S)N) adapter_hookrr!)rrr#r"rrrrr!fsr!cCs(t||||d}|dkr$t||||S)N)r)queryMultiAdapterr)objectsrr#rr rrrgetMultiAdapterms r(c Cs2y t|}Wntk r |SX|j||||S)N)rrr&)r'rr#r"r sitemanagerrrrr&ss  r&c Cs.y t|}Wntk r gSX|j||S)N)rr getAdapters)r'Zprovidedrr)rrrr*}s  r*c Cs.y t|}Wntk r gSX|j||S)N)rr subscribers)r'rrr)rrrr+s  r+cGstdj|ddS)N)rr+)r'rrrhandlesr,rc Cs0y t}Wntk rdSX|j||||S)N)rrr!)rrr#r"r)rrrr%s  r%cCs(t|||d}|dk r|St||dS)N)r) queryUtilityr)rr#rZutilityrrr getUtilitysr.cCst|j|||S)N)rr-)rr#r"rrrrr-sr-cCst|j|S)N)rgetUtilitiesFor)rrrrrr/sr/cCst|j|S)N)rgetAllUtilitiesRegisteredFor)rrrrrr0sr0c CsTy t|}Wntk r |SX|j}x&|D]}|j||t}|tk r.|Sq.W|S)zQuery for the next available utility. Find the next available utility providing `interface` and having the specified name. If no utility was found, return the specified `default` value. )rr __bases__r-_marker)rrr#r"ZsmbasesrutilrrrqueryNextUtilitys  r5cCs0t|||t}|tkr,tjjjd||f|S)zfGet the next available utility. If no utility was found, a `ComponentLookupError` is raised. z/No more utilities for %s, '%s' have been found.)r5r2zopeZ component interfacesr)rrr#r4rrrgetNextUtilitys  r8cOs|jdd}tt||||S)zkInvoke the named factory and return the result. ``__factory_name`` is a positional-only argument. rN)popr.r)Z__factory_namerkwargsrrrr createObjects r;cCstt||jS)znReturn the interface provided by the named factory's objects Result might be a single interface. XXX )r.r getInterfaces)r#rrrrgetFactoryInterfacessr=c cs~t|}xp|jtD]b\}}|j}y|j|r:||fVWqtk rtx"|D]}|j|rR||fVPqRWYqXqWdS)zCReturn info on all factories implementing the given interface. N)rr/rr<Z isOrExtendsAttributeError)rrZutilsr#factoryr7ZifacerrrgetFactoriesFors    r@)N)N)N)N)rN)rN)rNN)N)N)rN)r)N)N)3__doc__rtypesZzope.interfacerrrZzope.component.interfacesrrrrr Zzope.component._compatr Zzope.component._declarationr r r Z zope.hookabler ImportErrorZzope.component.hookablerrrrr$r!r(r&r*r+r,r%Zzope.interface.interfacer6rZ adapter_hooksappendr.r-r/r0rr2r5r8r;r=r@rrrrs\