o
    NK&h                     @   s   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 d dlmZ G dd	 d	eZG d
d deZG dd deZdS )    )ABCabstractmethod)get_terminal_size)indentwrap)Optional)__version__)is_atty)loggerc                   @   s   e Zd ZdZdee dedeeef deeef ddf
dd	Zed
d Z	e
dee dedeeef deeef ddf
ddZdS )MOTDz5Base class for the Message of the Day (MOTD) display.logoserve_locationdataextrareturnNc                 C   s(   || _ || _|| _|| _d| _d| _d S )Nr   )r   r   r   r   	key_widthvalue_width)selfr   r   r   r    r   I/var/www/html/venv/lib/python3.10/site-packages/sanic/application/motd.py__init__   s   
zMOTD.__init__c                 C   s   dS )zDisplay the MOTD.Nr   )r   r   r   r   display   s    zMOTD.displayc                 C   s$   t  rtnt}|||||  dS )zOutput the MOTD.

        Args:
            logo (Optional[str]): Logo to display.
            serve_location (str): Location to serve.
            data (Dict[str, str]): Data to display.
            extra (Dict[str, str]): Extra data to display.
        N)r	   MOTDTTY	MOTDBasicr   )clsr   r   r   r   
motd_classr   r   r   output    s   zMOTD.output)__name__
__module____qualname____doc__r   strdictr   r   r   classmethodr   r   r   r   r   r      s6    





r   c                   @   s   e Zd ZdZdd ZdS )r   zbA basic MOTD display.

    This is used when the terminal does not support ANSI escape codes.
    c                 C   s~   | j r	t| j  dt g}| jr|d| j  |g dd | j D dd | j D 7 }|D ]}t	| q5d S )NzSanic vzGoin' Fast @ c                 s   "    | ]\}}| d | V  qdS : Nr   .0keyvaluer   r   r   	<genexpr>A        z$MOTDBasic.display.<locals>.<genexpr>c                 s   r$   r%   r   r'   r   r   r   r+   B   r,   )
r   r
   debugr   r   appendr   itemsr   info)r   linesliner   r   r   r   :   s   zMOTDBasic.displayN)r   r   r   r    r   r   r   r   r   r   4   s    r   c                       sL   e Zd ZdZd fddZdd Zdd
dZdd Zdd Zdd Z	  Z
S )r   z<A MOTD display for terminals that support ANSI escape codes.r   Nc                    s   t  j|i | |   d S )N)superr   set_variables)r   argskwargs	__class__r   r   r   K   s   zMOTDTTY.__init__c                 C   s  d}t t|dj|d }||d  d | _d| _| j| _| jr:t tt| j	 | _t
t tt| j | j| _| jrat | jt tt| j	 | _t
t g tt| j | jR | j| _| jrj| jdng | _d| _| j| j d | j | _| j| j d | _d	S )
z#Set the variables used for display.)l      )fallbackr   $      
r:      N)maxr   columnsmax_value_widthr   r   r   maplenkeysminvaluesr   r   split
logo_lineslogo_line_lengthcentering_lengthdisplay_length)r   r;   terminal_widthr   r   r   r4   O   s2   zMOTDTTY.set_variablesT
Goin' Fastc                 C   sN  |st j}d}|r|dt 7 }|| j}| jr!| d| j nd| j}t|d | j }d| jd  }d| }d| jd  }	d| d| d	d
| dd
| dd| d| dg}
| 	|
| j
d | jr| t|
d }|
d
| d|	 d | 	|
| jt|
d  | |
 |
d| d| d |td|
d dS )a@  Display the MOTD.

        Args:
            version (bool, optional): Display the version. Defaults to `True`.
            action (str, optional): Action to display. Defaults to
                `"Goin' Fast"`.
            out (Optional[Callable], optional): Output function. Defaults to
                `None`.
        Sanicz vz @  r?   u   ─   u   
┌u   ┐   │     │u   ├u   ┬u   ┤r   r=   u    ├u   └u   ┴u   ┘
r>     N)r
   r0   r   centerrK   r   rD   rJ   rL   _render_datar   r   _get_logo_partr.   _render_fillr   join)r   versionactionoutheaderrunninglengthfirst_fillersecond_fillerdisplay_fillerr1   	logo_partr   r   r   r   m   s4   



zMOTDTTY.displayc              	   C   s   d}t | |dD ]T\}\}}|| j}t|| jdd}t |D ];\}	}
|
| j}
| || |	 }|	dkr@| d|
 n
dt	| d|
  }|
d| d	| d
 |	r]|d7 }q"q
d S )Nr   )startF)break_on_hyphensr&    rT   rR       │ rS   rQ   )	enumerater/   rjustr   r   rB   ljustr   rW   rD   r.   )r   r1   r   rd   offsetidxr)   r*   wrapped
wrap_indexpartrc   r   r   r   r   rV      s"   zMOTDTTY._render_datac                 C   sZ   d| j  }t|d }tdt| j| D ]}| j||  }|d| d| d qd S )Nrf      rQ   rR   rg   rS   )rL   rD   rangerI   r.   )r   r1   fillerrl   irc   r   r   r   rX      s   
zMOTDTTY._render_fillc                 C   s4   z| j | }W |S  ty   d| jd  }Y |S w )Nrf      )rI   
IndexErrorrJ   )r   rl   rc   r   r   r   rW      s   zMOTDTTY._get_logo_part)r   N)TrN   N)r   r   r   r    r   r4   r   rV   rX   rW   __classcell__r   r   r7   r   r   H   s    
)r   N)abcr   r   shutilr   textwrapr   r   typingr   sanicr   sanic.helpersr	   	sanic.logr
   r   r   r   r   r   r   r   <module>   s    )