
    }tfY                     b    d Z ddlZddlmZmZ ddlmZ ddlmZ ddl	m
Z
 h dZd	ed
efdZd Zy)zLog utilities.    N)urlparse
urlunparse)
access_log   )User)prometheus_log_method>   keyauthcodexsrfstatetokenurireturnc                 R   t        |       }|j                  r|j                  j                  d      }d}t        |      D ]6  \  }}|j	                  d      \  }}}t
        D ]  }	|	|v s| | d||<   d} 8 |r,|j                  dj                  |            }t        |      S | S )zscrub auth info from uri&F=z[secret]T)query)	r   r   split	enumerate	partition_SCRUB_PARAM_KEYS_replacejoinr   )
r   parsedpartschangedisr	   sepvalue	substrings
             \/var/www/html/software/conda/envs/higlass/lib/python3.12/site-packages/jupyter_server/log.py
_scrub_urir$      s    c]F|| ""3'e$ 	#DAqkk#.OCe. #	#"%se84E!H"G#	# __388E?_;Ff%%J    c                    | j                         }| j                  }	 | j                  }|dk  s|dk(  r|j
                  }n0|dk  r|j                  }n|dk  r|j                  }n|j                  }d| j                  j                         z  }||j                  |j                  t        |j                        |d}	 | j                  }|rt!        |t"              r|j$                  ndnd	}||d
<   d}	|dk\  r-t        |j&                  j)                  dd            |d<   |	dz   }	|dk\  rL|dk7  rGi }
dD ]#  }||j&                  v s|j&                  |   |
|<   %  |t+        j,                  |
d              | |	j.                  di |       t1        |        y# t        $ r
 t        }Y w xY w# t        $ r d}Y w xY w)a  log a bit more information about each request than tornado's default

    - move static file get success to debug-level (reduces noise)
    - get proxied IP instead of proxy IP
    - log referer for redirect and failed requests
    - log user-agent for failed requests
    i,  i0  i  i  g     @@)statusmethodipr   request_timeNunknown usernamez>{status} {method} {uri} ({username}@{ip}) {request_time:.2f}msRefererNonerefererz referer={referer}i  )HostAcceptr.   z
User-Agent   )indent )
get_statusrequestlogAttributeErrorr   debuginfowarningerrorr*   r(   	remote_ipr$   r   current_user	Exception
isinstancer   r-   headersgetjsondumpsformatr   )handlerr'   r7   logger
log_methodr*   nsuserr-   msgrB   headers               r#   log_requestrN   ,   s    !FooG |v}\\
	#[[
	#^^
\\
GOO88::L..'++&$
B## LPD$!7YUWHBzN
JC}"7??#6#6y&#IJ9((}3A 	:F(")//&"9	: 	4::ga01zszzB '"Y  4  s#   F >F0 F-,F-0F>=F>)__doc__rD   urllib.parser   r   tornado.logr   r
   r   prometheus.log_functionsr   r   strr$   rN   r5   r%   r#   <module>rT      s:      - "  ;
 F C C *8#r%   