o
    š„L  ã                   @   s<   d Z ddlZddlZdZG dd„ deƒZG dd„ deƒZdS )uõ   
A simple logging module which allows hierarchical logging without centralized
control.

>>> log = ConsoleLogger()
>>> log.start('ABC', nSteps=3)
ABC
>>> log.log('A')
â”œâ”€ A
>>> log.log('B')
â”œâ”€ B
>>> log.log('C')
â””â”€ C
>>> log.finish()
é    NÚutf8c                   @   sF   e Zd ZdZddefdd„Zddd„Zdd	d
„Zdd„ Zddd„Z	dS )ÚConsoleLoggerz€
    A console logging object, which can optionally be given an output stream
    which it prints to, defaulting to stdout.
    NéN   c                 C   s&   t  |¡|ptjƒ| _g | _|| _d S ©N)ÚcodecsÚ	getwriterÚsysÚstdoutÚoStreamÚlogStackÚtrim)ÚselfÚoutputr   Úencoding© r   úG/var/www/html/env/lib/python3.10/site-packages/consoleLog/consoleLog.pyÚ__init__(   s   
zConsoleLogger.__init__c                 C   s    |   |¡ | j t|d�¡ dS )z‡
        Starts a new hierarchical logging section. Every call to start() must
        be later matched by a call to finish().
        )ÚnStepsN)Úlogr   ÚappendÚ_SectionPadding)r   Úmessager   r   r   r   Ústart-   s   
zConsoleLogger.startTc                 C   s®   | j r!g }| j dd… D ]	}| | ¡ ¡ q| | j d  ¡ ¡ nd}dd |¡|f }| jrAt|ƒ| jkrA|d| jd … d }| j |¡ |rPt	| j?  dS | j 
¡  dS )z›
        Logs a message, with an optional newline. The most common case for
        not using the newline is for subsequent use of a progress bar.
        NéÿÿÿÿÚ ú%s%sé   z...)r   r   ÚgetIntermediatePaddingÚgetCurrentPaddingÚjoinr   Úlenr
   ÚwriteÚprintÚflush)r   r   ÚnewLineÚpaddingÚlevelLoggerÚoLiner   r   r   r   6   s   

ÿzConsoleLogger.logc                 C   sF   | j rg }| j D ]	}| | ¡ ¡ qd |¡}nd}t| j? |f d S )Nr   )r   r   r   r   r"   r
   )r   r%   r&   r   r   r   ÚspaceL   s   
zConsoleLogger.spaceÚDonec                 C   sf   g }| j dd… D ]	}| | ¡ ¡ q	| j  ¡ }| | ¡ ¡ | ¡ r1t| j? dd |¡|f f dS )zi
        Ends a hierarchical logging section which was previously created using
        start().
        Nr   r   r   )	r   r   r   ÚpopÚgetLastPaddingÚneedsFinishr"   r
   r   )r   r   r%   r&   Úlastr   r   r   ÚfinishW   s   
zConsoleLogger.finishr   )T)r)   )
Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú_default_encodingr   r   r   r(   r.   r   r   r   r   r   #   s    

	r   c                   @   s:   e Zd ZdZddd„Zdd„ Zdd„ Zd	d
„ Zdd„ ZdS )r   zŒ
    A manager for the amount of padding needed for any given log line, as well
    as any embellishments needed to indicate hierarchy.
    Nc                 C   s   || _ d| _dS )z$Private constructor used internally.r   N)r   ÚcurrentStep)r   r   r   r   r   r   l   s   
z_SectionPadding.__init__c                 C   s   | j | jkrdS dS )Nz   u   â”‚  ©r4   r   ©r   r   r   r   r   q   s   z&_SectionPadding.getIntermediatePaddingc                 C   s"   |  j d7  _ | j | jkrdS dS )Né   õ   â””â”€ u   â”œâ”€ r5   r6   r   r   r   r   w   s   z!_SectionPadding.getCurrentPaddingc                 C   s   | j | jkS r   r5   r6   r   r   r   r,   ~   s   z_SectionPadding.needsFinishc                 C   s   dS )Nr8   r   r6   r   r   r   r+   �   s   z_SectionPadding.getLastPaddingr   )	r/   r0   r1   r2   r   r   r   r,   r+   r   r   r   r   r   g   s    
r   )r2   r   r   r3   Úobjectr   r   r   r   r   r   Ú<module>   s   	D