U
    Hi                     @  sN   d dl mZ d dlZd dlZd dlmZ d dlmZmZ dZG dd dZ	dS )    )annotationsN)datetime)AnyOptionalzF----------------------------------------------------------------------c                   @  sD  e Zd ZdZejejejeZ	ej
e	ddZedd Zedd Zedd	d
ddZeddddZed	dddZedd	dddZedd	dddZedd	dddZedd	dddZedd	dddZedd	dddZed*dd d	d!d"d#Zedd$d	d%d&d'Zed	dd(d)ZdS )+LogNZlogszvoicebot.logc                  C  s(   t jtj} t j| s$t |  dS )z!Ensure the logs directory exists.N)ospathdirnamer   _log_file_pathexistsmakedirs)Zlog_dir r   7/var/www/html/live_calls/homebook/services/log_utils.py_ensure_log_directory   s    zLog._ensure_log_directoryc                   C  s*   t jdkr$t   tt jdddt _t jS )z"Get or create the log file handle.Nazutf-8)encoding)r   	_log_filer   openr
   r   r   r   r   _get_log_file   s    
zLog._get_log_filestrNone)messagereturnc              
   C  sX   z"t  }|| d  |  W n0 tk
rR } ztd|  W 5 d}~X Y nX dS )zWrite message to log file.
zError writing to log file: N)r   r   writeflush	Exceptionprint)r   Zlog_fileer   r   r   _write_to_file   s    zLog._write_to_file)r   c                   C  s   t  dS )Nz%Y-%m-%d %H:%M:%S)r   nowstrftimer   r   r   r   _ts(   s    zLog._tsc                  C  s   t } t|  t|  d S )N)DASHr   r   r   )r   r   r   r   line,   s    zLog.line)titler   c                 C  s6   dt  dt  d|  dt  }t| t| d S )Nr   
[] )r#   r   r"   r   r   r%   r   r   r   r   header2   s     z
Log.headerc                 C  s0   dt   d|  dt }t| t | d S )Nr&   r'   r   )r   r"   r#   r   r   r(   r   r   r   	subheader8   s    zLog.subheader)msgr   c                 C  s^   dt   d|  }zt| W n. tk
rN   |ddd}t| Y nX t | d S )N[r'   asciireplacer   r"   r   UnicodeEncodeErrorencodedecoder   r+   r   Zsafe_messager   r   r   info>   s    zLog.infoc                 C  s^   dt   d|  }zt| W n. tk
rN   |ddd}t| Y nX t | d S )Nr,   z	] ERROR: r-   r.   r/   r3   r   r   r   errorI   s    z	Log.errorc                 C  s^   dt   d|  }zt| W n. tk
rN   |ddd}t| Y nX t | d S )Nr,   z] WARNING: r-   r.   r/   r3   r   r   r   warningT   s    zLog.warningc                 C  s^   dt   d|  }zt| W n. tk
rN   |ddd}t| Y nX t | d S )Nr,   z	] DEBUG: r-   r.   r/   r3   r   r   r   debug_   s    z	Log.debugzOptional[dict[str, Any]])r%   detailsr   c                 C  st   t |  |d k	rhz&tj|ddd}t| t | W n. tk
rf   t|}t| t | Y nX t   d S N   F)indentensure_ascii)	r   r)   jsondumpsr   r   r   r   r$   )r%   r8   Zdetails_strr   r   r   eventj   s    
z	Log.eventr   )labeldatar   c                 C  sl   t |  z&tj|ddd}t| t | W n. tk
r^   t|}t| t | Y nX t   d S r9   )	r   r*   r=   r>   r   r   r   r   r$   )r@   rA   Zdata_strr   r   r   r=   x   s    
zLog.jsonc                   C  s   t jrt j  dt _dS )zClose the log file handle.N)r   r   closer   r   r   r   close_log_file   s    
zLog.close_log_file)N)__name__
__module____qualname__r   r   r   r	   abspath__file__Z	_base_dirjoinr
   staticmethodr   r   r   r"   r$   r)   r*   r4   r5   r6   r7   r?   r=   rC   r   r   r   r   r   	   s>   

	



r   )

__future__r   r=   r   r   typingr   r   r#   r   r   r   r   r   <module>   s   