B
    `@                 @   sj  d dl Z d dlmZmZ d dlmZ d dlmZmZ d dl	m
Z
 d dlmZ d dlmZmZmZmZmZmZmZ d dlmZ d d	lmZ d d
lmZmZmZmZ d dlmZ dd Z d1ddZ!eeeeG dd dZ"dd Z#dd Z$dd Z%de%_&dd Z'de'_&dd Z(de(_&dd  Z)d!e)_&d"d# Z*d$d% Z+d&d' Z,d(e,_&d)d* Z-d+e-_&d,d- Z.d.e._&d/Z/d0Z0dS )2    N)implementerprovider)	renderers)check_csrf_origincheck_csrf_token)ConfigurationError)HTTPForbidden)IDebugLoggerIDefaultCSRFOptionsIDefaultPermission	IResponseISecurityPolicyIViewMapperIViewMapperFactory)Response)NO_PERMISSION_REQUIRED)is_bound_methodis_unbound_methodobject_descriptiontakes_one_arg)render_view_to_responsec             C   s$   y| j S  tk
r   t| S X d S )N)__text__AttributeErrorr   )view r   \/home/kop/projects/devel/pgwui/test_venv/lib/python3.7/site-packages/pyramid/viewderivers.pyview_description   s    r   c             C   s   t | |ddS )Nrequest)attrargname)r   )r   r   r   r   r   requestonly$   s    r    c               @   sL   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dS )DefaultViewMapperc             K   s   | d| _d S )Nr   )getr   )selfkwr   r   r   __init__+   s    zDefaultViewMapper.__init__c             C   s>   t |r| jd krtdt|r0| |}n
| |}|S )NziUnbound method calls are not supported, please set the class as your `view` and the method as your `attr`)r   r   r   inspectisclass	map_classmap_nonclass)r#   r   r   r   r   __call__.   s    

zDefaultViewMapper.__call__c             C   sB   t || j}|r| |}n
| |}d| jp0dt|f |_|S )Nzmethod %s of %sr*   )r    r   map_class_requestonlymap_class_nativer   r   )r#   r   ronlymapped_viewr   r   r   r(   ;   s    
zDefaultViewMapper.map_classc                s   |}t || j}|r | |}n| jr0| |}t|r|t|rR|  fdd}| jd k	rrd| jt|f |_n
t||_|S )Nc                s
    | |S )Nr   )contextr   )_mapped_viewr   r   r.   [   s    z3DefaultViewMapper.map_nonclass.<locals>.mapped_viewzattr %s of %s)	r    r   map_nonclass_requestonlymap_nonclass_attrr&   	isroutiner   r   r   )r#   r   r.   r-   r   )r0   r   r)   G   s     



zDefaultViewMapper.map_nonclassc                s   | j   fdd}|S )Nc                s.   |}||_  d kr| }nt|  }|S )N)__view__getattr)r/   r   instresponse)r   r   r   r   _class_requestonly_viewk   s    zHDefaultViewMapper.map_class_requestonly.<locals>._class_requestonly_view)r   )r#   r   r8   r   )r   r   r   r+   g   s    	z'DefaultViewMapper.map_class_requestonlyc                s   | j   fdd}|S )Nc                s0   | |}||_  d kr | }nt|  }|S )N)r4   r5   )r/   r   r6   r7   )r   r   r   r   _class_view{   s    
z7DefaultViewMapper.map_class_native.<locals>._class_view)r   )r#   r   r9   r   )r   r   r   r,   v   s    	z"DefaultViewMapper.map_class_nativec                s   | j   fdd}|S )Nc                s$    d kr|}nt  |}|S )N)r5   )r/   r   r7   )r   r   r   r   _requestonly_view   s    
zEDefaultViewMapper.map_nonclass_requestonly.<locals>._requestonly_view)r   )r#   r   r:   r   )r   r   r   r1      s    z*DefaultViewMapper.map_nonclass_requestonlyc                s    fdd}|S )Nc                s   t  j| |}|S )N)r5   r   )r/   r   r7   )r#   r   r   r   
_attr_view   s    z7DefaultViewMapper.map_nonclass_attr.<locals>._attr_viewr   )r#   r   r;   r   )r#   r   r   r2      s    z#DefaultViewMapper.map_nonclass_attrN)__name__
__module____qualname__r%   r*   r(   r)   r+   r,   r1   r2   r   r   r   r   r!   (   s    r!   c                s    fdd}|S )Nc                s    | |}t | |S )N)preserve_view_attrs)r   infoZwrapper_view)wrapperr   r   inner   s    
zwraps_view.<locals>.innerr   )rA   rB   r   )rA   r   
wraps_view   s    rC   c          	   C   s   | d kr|S || kr| S t | dd }|d kr0| }| |_||_| j|_| j|_y| j|_W n tk
rv   t| |_Y nX x8dD ]0}yt||t | | W q~ tk
r   Y q~X q~W |S )N__original_view__)__permitted____call_permissive____permission__Z__predicated__Z__predicates__Z
__accept__	__order__r   )	r5   Z	__wraps__rD   r=   __doc__r<   r   reprsetattr)r   rA   Zoriginal_viewr   r   r   r   r?      s,    	
r?   c             C   sT   |j d}|d kr@t| dd }|d kr@|jt}|d kr@t}|f |j | }|S )NmapperZ__view_mapper__)optionsr"   r5   registryqueryUtilityr   r!   )r   r@   rL   r.   r   r   r   r.      s    r.   )rL   r   c                s4   |j d|j ds  S  fdd}|S )NrA   namec                sF    | |}||_ |j|_ |_t| |}|d krBtdf |S )Nz;No wrapper view named %r found when executing view named %r)wrapped_responsebodyZwrapped_bodywrapped_viewr   
ValueError)r/   r   r7   rQ   )r   viewnamewrapper_viewnamer   r   _owrapped_view   s    

z%owrapped_view.<locals>._owrapped_view)rM   r"   )r   r@   rW   r   )r   rU   rV   r   owrapped_view   s    rX   )rP   rA   c                s   |j ddrS |jdd kr*S i  tttfrly\ W n" tk
rj   tdf Y nX  fdd}|S )NZprevent_http_cacheF
http_cachez]If http_cache parameter is a tuple or list, it must be in the form (seconds, options); not %sc                s.   | |}t |jdd}|s*|jf  |S )NZprevent_autoF)r5   Zcache_controlZcache_expires)r/   r   r7   Zprevent_caching)rM   secondsr   r   r   rA     s    
z!http_cached_view.<locals>.wrapper)settingsr"   rM   
isinstancetuplelistrT   r   )r   r@   rA   r   )rM   rZ   r   r   http_cached_view   s    	r_   )rY   c             C   s$   xt tfD ]}t|| |} q
W | S )N)_secured_view_authdebug_viewrC   )r   r@   rA   r   r   r   secured_view  s    rb   )
permissionc                s   |j d  } d kr$|jt  tkr0d  |jt|d krN|jrNS r d k	r fddfdd}|_|_	 |_
|S S d S )Nrc   c                s    ||  S )N)permits)r/   r   )rc   policyr   r   	permitted9  s    z _secured_view.<locals>.permittedc                sD    | |}|r| |S t d}t |dd| }t||dd S )Nr<   authdebug_messagez(Unauthorized: %s failed permission check)result)r5   r   )r/   r   rh   	view_namemsg)rf   r   r   r   rb   <  s    


z#_secured_view.<locals>.secured_view)rM   r"   rN   rO   r   r   r   exception_onlyrF   rE   rG   )r   r@   explicit_valrb   r   )rc   rf   re   r   r   r`   '  s     r`   c                s   }|j }|jd }d kr.|jt|jt|jt |d krX|jrXS |r~|ddr~ fdd}|}|S )Nrc   Zdebug_authorizationFc                s   t |dd }rDtkrd}qHd kr,d}qH|| }t|}nd}t |dd }t |dd }d||| |f } r~ | |d k	r||_| |S )Nri   z Allowed (NO_PERMISSION_REQUIRED)z"Allowed (no permission registered)z#Allowed (no security policy in use)urlzCdebug_authorization of url %s (view name %r against context %r): %s)r5   r   rd   strdebugrg   )r/   r   ri   rj   rh   rm   )loggerrc   re   r   r   r   authdebug_view_  s$    

z'_authdebug_view.<locals>.authdebug_view)	r[   rM   r"   rN   rO   r   r   r	   rk   )r   r@   rS   r[   rl   rq   r   )rp   rc   re   r   r   ra   P  s    ra   c                sH    j dd kr& fdd}|S tjkr4S  fdd}|S )Nrendererc                sr   | |}|j tkr|}nT j|t}|d krn|d kr>d}nt|trNd}nd}d| }t|t|f |S )NzA You may have forgotten to return a value from the view callable.zG You may have forgotten to define a renderer in the view configuration. ziCould not convert return value of the view callable %s into a response object. The value returned was %r.)		__class__r   rN   queryAdapterOrSelfr   r\   dictrT   r   )r/   r   rh   r7   appendrj   )r@   r   r   r   viewresult_to_response  s    


z-rendered_view.<locals>.viewresult_to_responsec                s   | |}|j tkr|}n j|t}|d krt|di }d|krd|d}tj| j	 jd}n
 }d|kr|d}ntd}||||| }|S )N__dict__Zoverride_renderer)rP   packagerN   r4   rD   )rt   r   rN   ru   r   r5   popr   ZRendererHelperrz   cloneZrender_view)r/   r   rh   r7   attrsZrenderer_nameZview_rendererZ	view_inst)r@   rr   r   r   r   rendered_view  s&    


z$rendered_view.<locals>.rendered_view)rM   r"   r   Znull_renderer)r   r@   rx   r~   r   )r@   rr   r   r   r~   ~  s    
r~   )rr   c             C   s    |j d}|d kr| S || S )N	decorator)rM   r"   )r   r@   r   r   r   r   decorated_view  s    r   )r   c                s   |j d}|jt}|d krJd}ddtddddgd	d d n*|j}|j|j|j	|j
|j |j|d	kp|dk	o|o|j }|op}}|r fd
d}|}|S )Nrequire_csrfFZ
csrf_tokenzX-CSRF-TokenGETHEADOPTIONSTRACETc                sF   |j kr<d ks|r<r,t|d d t|dd | |S )NT)raisesallow_no_origin)r   )methodr   r   )r/   r   )r   callbackcheck_originheadersafe_methodstokenr   r   r   	csrf_view  s    
zcsrf_view.<locals>.csrf_view)rM   r"   rN   rO   r
   	frozensetr   r   r   r   r   r   r   rk   )r   r@   rl   defaultsZdefault_valenabledrS   r   r   )r   r   r   r   r   r   r   r   r     s2    r   )r   VIEWINGRESS)N)1r&   Zzope.interfacer   r   Zpyramidr   Zpyramid.csrfr   r   Zpyramid.exceptionsr   Zpyramid.httpexceptionsr   Zpyramid.interfacesr	   r
   r   r   r   r   r   Zpyramid.responser   Zpyramid.securityr   Zpyramid.utilr   r   r   r   Zpyramid.viewr   r   r    r!   rC   r?   r.   rM   rX   r_   rb   r`   ra   r~   r   r   r   r   r   r   r   r   <module>   sD   $	
u* ).L/