B
    `)                 @   s   d dl Z d dlZd dl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 ejdfdd	ZG d
d dZedkree pd  dS )    N)
IMultiView)	bootstrapsetup_logging)Request)
parse_vars)_find_viewsFc             C   s   t | |}| S )N)PViewsCommandrun)argvquietcommand r   ^/home/kop/projects/devel/pgwui/test_venv/lib/python3.7/site-packages/pyramid/scripts/pviews.pymain   s    
r   c               @   s   e Zd ZdZejZeje	eej
dZejddddd ejdddd	d ejd
dddd eeZeeZdddZdd Zdd Zdd Zdd ZdddZdd ZdS ) r   aV      Print, for a given URL, the views that might match. Underneath each
    potentially matching route, list the predicates required. Underneath
    each route+predicate set, print each view that might match and its
    predicates.

    This command accepts two positional arguments: 'config_uri' specifies the
    PasteDeploy config file to use for the interactive shell. The format is
    'inifile#name'. If the name is left off, 'main' will be assumed.  'url'
    specifies the path info portion of a URL that will be used to find
    matching views.  Example: 'proutes myapp.ini#main /url'
    )descriptionformatter_class
config_uri?Nz"The URI to the configuration file.)nargsdefaulthelpurlz!The path info portion of the URL.config_vars*r   zVariables required by the config file. For example, `http_port=%%(http_port)s` would expect `http_port=8080` to be passed here.Fc             C   s    || _ | j|dd  | _d S )N   )r   parser
parse_argsargs)selfr
   r   r   r   r   __init__>   s    zPViewsCommand.__init__c             C   s   | j st| d S )N)r   print)r   msgr   r   r   outB   s    zPViewsCommand.outc             C   sF   g }|j }x6| D ]*}||}|d k	r||d}|| qW |S )N)matchroute)Z	path_infoZ
get_routesr#   append)r   Zmapperrequestinfospathr$   r#   infor   r   r   _find_multi_routesF   s    

z PViewsCommand._find_multi_routesc                s  ddl m}m} ddlm m}mm}m ddl	m
}m |jj}|||d}||}	j|tG  fddd}
d}d}|j} }|	dk	r*| |	|}t|d	kr|d }|d
 |d  }}|dk	r||d< ||d< ||jd< j|j d}|jp|}t|d	kr*|}||}||d< |}|dkrX|}||}|d |d  }}|| ||}|dkrt|j|||}|r|d }nd}n|
||||}|dkr t|j||d}|r|d }nd}t|r d}|dk	r||_|S )z
        Accept ``url`` and ``registry``; create a :term:`request` and
        find a :app:`Pyramid` view based on introspection of :term:`view
        configuration` within the application registry; return the view.
        r   )implementer
providedBy)IRequestIRootFactoryIRouteRequestIRoutesMapper
ITraverser)DefaultRootFactoryResourceTreeTraverser)r   c                   s"   e Zd Z fddZdS )z1PViewsCommand._find_view.<locals>.RoutesMultiViewc                s   g | _ x|D ]}|d |d  }}|d k	rj|j d}t|j||d}	|	sRq|	d }
i |
_||
jd< ||
jd< |jp||}||}|}|d kr|}||}|
j| t	|
dsd|
_
| j d |
d f qW d S )	Nr#   r$   )namer    r   	matchdictmatched_route__view_attr__)viewsqueryUtilityr4   r   registry__request_attrs__factoryqueryAdapterupdatehasattrr8   r%   )r   r'   context_ifaceroot_factoryr&   r)   r#   r$   request_ifacer9   viewroot	traversertdict)r-   r/   r1   r3   adaptersr;   r   r   r   k   s0    




z:PViewsCommand._find_view.<locals>.RoutesMultiView.__init__N)__name__
__module____qualname__r   r   )r-   r/   r1   r3   rH   r;   r   r   RoutesMultiViewi   s   rL   Nr   r#   r$   r6   r7   zbfg.routes.matchdict)r4   r   rE   context	view_namer5   )Zzope.interfacer+   r,   pyramid.interfacesr-   r.   r/   r0   r1   Zpyramid.traversalr2   r3   r;   r:   rH   r   __dict__r*   lenenvironr4   r=   r>   r?   r   r<   )r   r&   r+   r,   r.   r0   r2   qrB   Zroutes_mapperrL   rM   Zroutes_multiviewattrsrC   r'   r)   r#   r$   rE   rF   rG   rN   rA   r9   rD   r   )r-   r/   r1   r3   rH   r;   r   
_find_viewQ   sl    $









zPViewsCommand._find_viewc             C   s   |d }|  d||jf  |  d||jf  |  d||jf  |  d|d|d f  dd	d
 |jD }|dkr|  d||f  d S )Nr7   z%sroute name: %sz%sroute pattern: %sz%sroute path: %sz%ssubpath: %s/subpathz, c             S   s   g | ]}|  qS r   )text).0pr   r   r   
<listcomp>   s    z4PViewsCommand.output_route_attrs.<locals>.<listcomp>r5   z%sroute predicates (%s))r"   r4   patternr(   join
predicates)r   rT   indentr$   r^   r   r   r   output_route_attrs   s    z PViewsCommand.output_route_attrsr   c             C   sn  d| }t |dd}t |dd}t |dd }t |di }|d k	rPd|||f }n |jj}|dkrd|}d	||f }| d d
|kr| d|  | d|  | || t |dd }	t|s|d
= | ||d  n| d|  | d|  | d||f  t |dd }	|	d k	r.| d||	f  t |dd }
|
d k	rjddd |
D }| d||f  d S )Nz    rI   r5   rJ   r8   r<   z%s.%s.%sfunctionz%s.%sr7   z%sRoute:z%s------Z__permission__r   z%sView:z%s-----z%s%sz%srequired permission = %sZ__predicates__z, c             S   s   g | ]}|  qS r   )rX   )rY   rZ   r   r   r   r[      s    z2PViewsCommand.output_view_info.<locals>.<listcomp>z%sview predicates (%s))	getattr	__class__rI   r"   r`   r   r,   output_view_infor]   )r   view_wrapperlevelr_   r4   moduleattrZrequest_attrsZview_callableZ
permissionr^   Zpredicate_textr   r   r   rd      s<    



zPViewsCommand.output_view_infoc       
      C   sf  | j jr| j js| d dS | j j}t| j j}| j j}| j||d |dsZd| }t	|}| j
|||d}| |}| d | d|  | d |d k	r| d	|jd
   | d|jd   t|r.xp|jD ]D\}}}| | t|rx$|jD ]\}}	}| j|	dd q
W qW n |d k	rD| | n
| d | d |d   dS )Nz0Command requires a config file arg and a url arg   )Zglobal_confrV   z/%s)optionsr&   r5   zURL = %sz    context: %srM   z    view name: %srN   )rf   z    Not found.closerr   )r   r   r   r"   r   r   r   
startswithr   Zblankr   rU   r<   r   r,   r9   rd   )
r   r   r   r   r&   envrD   dummyre   Zmv_view_wrapperr   r   r   r	      s<    











zPViewsCommand.run)F)r   )rI   rJ   rK   r   sysstdoutargparseArgumentParsertextwrapdedentRawDescriptionHelpFormatterr   add_argumentstaticmethodr   r   r   r"   r*   rU   r`   rd   r	   r   r   r   r   r      s:   

w

#r   __main__)rq   ro   rs   rO   r   Zpyramid.pasterr   r   Zpyramid.requestr   Zpyramid.scripts.commonr   Zpyramid.viewr   r
   r   r   rI   exitr   r   r   r   <module>   s     