U
    祡cs.                  	   @   s   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	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 ddlmZmZ ddlmZmZ ddlmZ ddlmZ G dd deZ e!dkrd dl"m#Z# dZ$e j%de$de dddgd e &dZ'e'(d e'(d e#d e'(d e'(d e'(d e')d e#d e'*d d!d"d#d$d%d&gd'gd(d)d!ddd(d* e'*d+ e'+d, e'(d- e'(d. e')d/ dd0d1d2Z,e,  e#d e'-d3 e'(d4 e'j(d5e.dd6d7 dS )8    N)datetime)Handler	LogRecord)Path)
ModuleType)ClassVarIterableListOptionalTypeUnion)NullFile   )get_console)FormatTimeCallable	LogRender)ConsoleConsoleRenderable)HighlighterReprHighlighter)Text)	Tracebackc                       s:  e Zd ZU dZdddddddd	gZeeee   e	d
< e
Zeee  e	d< ejdfdddddddddddddddddddeeef ee eeeeeee eeee eee eeeeeef  eeeeef eee  dd fddZeedddZeddddZeedddd Zeee ddd!d"d#Z  ZS )$RichHandlera
  A logging handler that renders output with Rich. The time / level / message and file are displayed in columns.
    The level is color coded, and the message is syntax highlighted.

    Note:
        Be careful when enabling console markup in log messages if you have configured logging for libraries not
        under your control. If a dependency writes messages containing square brackets, it may not produce the intended output.

    Args:
        level (Union[int, str], optional): Log level. Defaults to logging.NOTSET.
        console (:class:`~rich.console.Console`, optional): Optional console instance to write logs.
            Default will use a global console instance writing to stdout.
        show_time (bool, optional): Show a column for the time. Defaults to True.
        omit_repeated_times (bool, optional): Omit repetition of the same time. Defaults to True.
        show_level (bool, optional): Show a column for the level. Defaults to True.
        show_path (bool, optional): Show the path to the original log call. Defaults to True.
        enable_link_path (bool, optional): Enable terminal link of path column to file. Defaults to True.
        highlighter (Highlighter, optional): Highlighter to style log messages, or None to use ReprHighlighter. Defaults to None.
        markup (bool, optional): Enable console markup in log messages. Defaults to False.
        rich_tracebacks (bool, optional): Enable rich tracebacks with syntax highlighting and formatting. Defaults to False.
        tracebacks_width (Optional[int], optional): Number of characters used to render tracebacks, or None for full width. Defaults to None.
        tracebacks_extra_lines (int, optional): Additional lines of code to render tracebacks, or None for full width. Defaults to None.
        tracebacks_theme (str, optional): Override pygments theme used in traceback.
        tracebacks_word_wrap (bool, optional): Enable word wrapping of long tracebacks lines. Defaults to True.
        tracebacks_show_locals (bool, optional): Enable display of locals in tracebacks. Defaults to False.
        tracebacks_suppress (Sequence[Union[str, ModuleType]]): Optional sequence of modules or paths to exclude from traceback.
        locals_max_length (int, optional): Maximum length of containers before abbreviating, or None for no abbreviation.
            Defaults to 10.
        locals_max_string (int, optional): Maximum length of string before truncating, or None to disable. Defaults to 80.
        log_time_format (Union[str, TimeFormatterCallable], optional): If ``log_time`` is enabled, either string for strftime or callable that formats the time. Defaults to "[%x %X] ".
        keywords (List[str], optional): List of words to highlight instead of ``RichHandler.KEYWORDS``.
    GETPOSTHEADPUTDELETEOPTIONSTRACEPATCHKEYWORDSHIGHLIGHTER_CLASSNTF    
   P   z[%x %X])	show_timeomit_repeated_times
show_level	show_pathenable_link_pathhighlightermarkuprich_tracebackstracebacks_widthtracebacks_extra_linestracebacks_themetracebacks_word_wraptracebacks_show_localstracebacks_suppresslocals_max_lengthlocals_max_stringlog_time_formatkeywords)levelconsoler'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   returnc                   s   t  j|d |pt | _|p$|  | _t|||||d d| _|| _|	| _	|
| _
|| _|| _|| _|| _|| _|| _|| _|| _|| _d S )N)r9   )r'   r)   r*   time_formatr(   Zlevel_width)super__init__r   r:   r"   r,   r   _log_renderr+   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r8   )selfr9   r:   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   	__class__r$   0/tmp/pip-unpacked-wheel-qkhzhrww/rich/logging.pyr>   ?   s.    zRichHandler.__init__)recordr;   c                 C   s&   |j }t|dd|  }|S )zGet the level name from the record.

        Args:
            record (LogRecord): LogRecord instance.

        Returns:
            Text: A tuple of the style and level name.
           zlogging.level.)	levelnamer   Zstyledljustlower)r@   rD   Z
level_nameZ
level_textr$   r$   rC   get_level_texto   s    	 zRichHandler.get_level_textc           
      C   s.  |  |}d}| jr|jr|jdkr|j\}}}|dk	s<t|dk	sHttj|||| j| j| j| j	| j
| j| j| jd}| }| jr| |_| j}t|dr| r|||j|_||}| ||}| j|||d}	t| jjtr| | n2z| j|	 W n  tk
r(   | | Y nX dS )zInvoked by logging.N)NNN)widthZextra_linesZthemeZ	word_wrapZshow_localsr5   r6   suppressusesTime)rD   	tracebackmessage_renderable) formatr.   exc_infoAssertionErrorr   from_exceptionr/   r0   r1   r2   r3   r5   r6   r4   
getMessage	formattermessagehasattrrL   
formatTimedatefmtasctimeformatMessagerender_messagerender
isinstancer:   filer   handleErrorprint	Exception)
r@   rD   rU   rM   exc_type	exc_valueexc_tracebackrT   rN   log_renderabler$   r$   rC   emit~   sV    


  zRichHandler.emitr   )rD   rU   r;   c                 C   sh   t |d| j}|rt|nt|}t |d| j}|r>||}| jdkrP| j| _| jrd|| jd |S )zRender message text in to Text.

        Args:
            record (LogRecord): logging Record.
            message (str): String containing log message.

        Returns:
            ConsoleRenderable: Renderable to display log message.
        r-   r,   Nzlogging.keyword)getattrr-   r   Zfrom_markupr,   r8   r!   Zhighlight_words)r@   rD   rU   Z
use_markupZmessage_textr,   r$   r$   rC   r[      s    

zRichHandler.render_message)rD   rM   rN   r;   c          	   
   C   st   t |jj}| |}| jdkr$dn| jj}t|j}| j	| j
|sJ|gn||g|||||j| jrh|jndd}|S )av  Render log for display.

        Args:
            record (LogRecord): logging Record.
            traceback (Optional[Traceback]): Traceback instance or None for no Traceback.
            message_renderable (ConsoleRenderable): Renderable (typically Text) containing log message contents.

        Returns:
            ConsoleRenderable: Renderable to display log.
        N)log_timer<   r9   pathZline_no	link_path)r   pathnamenamerI   rT   rX   r   fromtimestampcreatedr?   r:   linenor+   )	r@   rD   rM   rN   ri   r9   r<   rh   re   r$   r$   rC   r\      s    

zRichHandler.render) __name__
__module____qualname____doc__r!   r   r
   r	   str__annotations__r   r"   r   r   loggingNOTSETr   intr   boolr   r   r   r>   r   r   rI   rf   r[   r   r\   __classcell__r$   r$   rA   rC   r      s~   
!



00r   __main__)sleepz%(message)srw   z[%X]T)r.   r3   )r9   rO   rX   handlersZrichzServer starting...z"Listening on http://127.0.0.1:8080zGET /index.html 200 1298z)GET /imgs/backgrounds/back1.jpg 200 54386zGET /css/styles.css 200 54386zGET /favicon.ico 404 242zJSONRPC request
--> %r
<-- %rz1.1ZconfirmFruitPurchaseZappleZorangeZmangoesZpomelog+?Z	194521489)versionmethodparamsid)r~   resulterrorr   zrLoading configuration file /adasd/asdasd/qeqwe/qwrqwrqwr/sdgsdgsdg/werwerwer/dfgerert/ertertert/ertetert/werwerwerz$Unable to find 'pomelo' in database!zPOST /jsonrpc/ 200 65532zPOST /admin/ 401 42234z%password was rejected for admin site.)r;   c                  C   sD   d} d}dgd }t d z| |  W n   t d Y nX d S )Nr   r   Zfood   z	in dividezAn error of some kind occurred!)logdebug	exception)numberZdivisorZfoosr$   r$   rC   divide  s    

r   zOut of memory!zServer exited with code=-1z[bold]EXITING...[/bold])r-   )extra)/rv   r   r   r   pathlibr   typesr   typingr   r   r	   r
   r   r   Zrich._null_filer    r   r?   r   r   r:   r   r   r,   r   r   textr   rM   r   r   rp   timer|   ZFORMATbasicConfig	getLoggerr   infowarningr   r   r   criticaldictr$   r$   r$   rC   <module>   sl     Y















