B
    `                 @   s  d dl Z d dlmZ d dlZd dlmZ d dlmZ d dlZ	d dl
mZ d dlmZ d dlmZ d dlZd dlmZmZmZmZmZ y@d d	lmZ d d
lmZ d dlmZ d dlmZ edZdZ W n e!k
r   dZ Y nX dZ"dZ#dZ$dZ%G dd deZ&d;ddZ'dd Z(dd Z)d<ddZ*dd Z+edZ,d d! Z-d"d# Z.d$d% Z/d&d' Z0d=d(d)Z1d*d+ Z2ed,Z3d-d. Z4d/d0 Z5d1d2 Z6d>d3d4Z7d5d6 Z8d7d8 Z9d?d9d:Z:dS )@    N)deque)islice)	getLogger)ConfigurationError)DottedNameResolver)asbool)binary_typebytes_string_typestext_	text_type)	highlight)HtmlFormatter)SqlLexer)get_style_by_nameZcolorfulTFzdebugtoolbar.zpyramid_debugtoolbar:static/zdebugtoolbar.rootzdebugtoolbar.exceptionc                   s:   e Zd ZdZ fddZdddZdd Zd	d
 Z  ZS )ToolbarStoragez"Deque for storing Toolbar objects.c                s   t t| g | d S )N)superr   __init__)selfZmax_elem)	__class__ b/home/kop/projects/devel/pgwui/test_venv/lib/python3.7/site-packages/pyramid_debugtoolbar/utils.pyr   (   s    zToolbarStorage.__init__Nc             C   s   t | }|||S )N)dictget)r   
request_iddefaultZdict_r   r   r   r   +   s    zToolbarStorage.getc             C   s   |  ||f d S )N)
appendleft)r   r   requestr   r   r   put/   s    zToolbarStorage.putc             C   s   t t| d|S )z,Returns the last `num_items` Toolbar objectsr   )listr   )r   Z	num_itemsr   r   r   last2   s    zToolbarStorage.last)N)	__name__
__module____qualname____doc__r   r   r   r    __classcell__r   r   )r   r   r   %   s
   
r   c             C   s   |d krt j}tj| sN| dr(| S | dtjj r>| S dtjj |  S d}| tjj}x,|D ]$}t|tjj|}||krf|}qfW dtjj||d   S )N){<.r   z<%s>)	syspathosisabs
startswithsepsplitcommon_segment_countjoin)valueZ	_sys_path
prefix_lenZ
value_segsr*   countr   r   r   format_fname7   s    

r5   c             C   sF   d}t | t |krBx,t| |D ]\}}||kr:|d7 }q dS q W |S )z1Return the number of path segments common to bothr      )lenzip)r*   r2   ix1Zx2r   r   r   r0   N   s    
r0   c          	   C   s,   t st| S tt| tddtddtdS )Nzutf-8)encodingT)r;   Z	noclassesstyle)HAVE_PYGMENTSr   r   r   r   PYGMENT_STYLE)queryr   r   r   
format_sqlZ   s    r@   c             C   s   | dkrdS t | dr|  S t| ttfs4t| } t| trny| d W n  tk
rl   | dd} Y nX | ddd	d
dd} |r| dd} | S )aY  Replace special characters "&", "<" and ">" to HTML-safe sequences.  If
    the optional flag `quote` is `True`, the quotation mark character is
    also translated.

    There is a special handling for `None` which escapes to an empty string.

    :param s: the string to escape.
    :param quote: set to true to also escape double quotes.
    N __html__asciizutf-8replace&z&amp;r'   z&lt;>z&gt;"z&quot;)hasattrrB   
isinstancer   r   decode	ExceptionrD   )squoter   r   r   escapei   s    


rN   c             C   sJ   |   }||  }|dkrB| d| | | |t| d  S | S dS )z5 Similar to string.replace() but is case insensitive.r   N)lowerrfindr7   )stringtargetreplacementZno_caseindexr   r   r   replace_insensitive   s
    $rU   c             C   s*   t | tr&ttd dd |  D } | S )Nc             S   s   g | ]}|  qS r   )strip).0xr   r   r   
<listcomp>   s    z(as_cr_separated_list.<locals>.<listcomp>)rI   r
   r   filter
splitlines)r2   r   r   r   as_cr_separated_list   s    
r\   c             C   s   t | trt| } | S )N)rI   r
   int)r2   r   r   r   as_int   s    
r^   c             C   sF   t | }g }x4|D ],} t| tr4|  }|| q||  qW |S )N)r\   rI   r
   r/   extendappend)r2   valuesresultZ	subvaluesr   r   r   as_list   s    

rc   c             C   s6   t | tr"|   }|dkr"|S t| }|r2dS dS )N)Zdisplaydebugrd   F)rI   r
   rO   rV   r   )r2   valbr   r   r   as_display_debug_or_false   s    
rg   c             C   s   |  dt|f |S )Nz%s%s)r   SETTINGS_PREFIX)settingsnamer   r   r   r   get_setting   s    rk   c          	   C   sz   i }x>| D ]6}yt | | ||< W q
 tk
r>   d||< Y q
X q
W yt| S  tk
rt   t| dd dS X d S )Nz	<unknown>c             S   s   t | S )N)str)kr   r   r   <lambda>       zdictrepr.<locals>.<lambda>)key)reprrK   sorteditems	TypeError)doutre   r   r   r   dictrepr   s    
rw   Zpyramid_debugtoolbarc             C   s@   |  dd } x,|D ]$}td|  td| krdS qW dS )N%r   rA   TF)r/   	ipaddress
ip_address
ip_network)addrhostshostr   r   r   addr_in   s    
r   c             O   s   | j dd|i|S )Ndebugtoolbarsubpath)r   )Z	route_url)r   elementskwr   r   r   debug_toolbar_url   s    r   c             C   s   t | }ttt|}|S )z.Hexlify int, str then returns native str type.)rl   r   binasciihexlifyr	   )r2   Zstr_Zhexifiedr   r   r   r      s    r   c             C   s<   t | jd| | j|d d  d}|d k	r8|j| |S )N/)base_url)typeZblankZapplication_urlGETupdate)r   	root_pathr*   paramsZ
subrequestr   r   r   make_subrequest   s    r   c             C   sl   g }xb| D ]Z}t |tr:|||f}|d kr>t|}n|}|d krRtd| ||kr
|| q
W |S )Nz*failed to load debugtoolbar panel named %s)rI   r
   r   resolverZmaybe_resolver   r`   )Zpanels	is_globalZ	panel_mapclassesZpanelZpanel_classr   r   r   resolve_panel_classes   s    


r   c             C   sF   | j }|j}t|dd }|d kr&|j}|dks6|dkr:|S d||f S )Nr#   
exceptionsbuiltinsz%s.%s)r   r"   getattrr!   )excclsmodulerj   r   r   r   get_exc_name  s    r   c                s>   t j|ddkrdS  fdd}j|||d dS )zCallback when a property is accessed.

    This currently only works for reified properties that are called once.

    Originally written for the `Request Vars` panel.
    Nc                s    } |S )N)__get__)r   re   )cbobjorig_propertyr   r   wrapper  s    
zwrap_load.<locals>.wrapper)rj   reify)r   r   Zset_property)r   rj   r   r   r   r   )r   r   r   r   	wrap_load  s
    r   )N)F)N)N)F);r   collectionsr   ry   	itertoolsr   loggingr   os.pathr+   Zpyramid.exceptionsr   Zpyramid.pathr   Zpyramid.settingsr   r)   Zpyramid_debugtoolbar.compatr   r	   r
   r   r   Zpygmentsr   Zpygments.formattersr   Zpygments.lexersr   Zpygments.stylesr   r>   r=   ImportErrorrh   ZSTATIC_PATHZROOT_ROUTE_NAMEZEXC_ROUTE_NAMEr   r5   r0   r@   rN   rU   r   r\   r^   rc   rg   rk   rw   loggerr   r   r   r   r   r   r   r   r   r   r   <module>   sX   






