a
    jK6                     @   s@  d Z ddlZddlZddlZddlZddlmZ ddlZdejv rHdZ	ndZ	e
dd Ze
dd	 Ze
dd
 Ze
dd Ze
dd Ze
dd Ze
dd Ze
dd Ze
dd Ze
dd Ze
dd Ze
dd Ze
dd Ze
dd Ze
dd Ze
dd Ze
dd ZG dd dZdZG dd dZdZdS )z1.4.0    N)
ensure_strTERMTF   z[0mz[30mz[31mz[32mz[33mz[34mz[35mz[36mz[37mz[30;1mz[31;1mz[32;1mz[33;1mz[34;1mz[35;1mz[36;1mz[37;1mc                   @   s:   e Zd Zdd Zdd Zdd Zdd Zi Zdd
dZd	S )NoDebugc                 O   s
   g | _ d S N)debug_flagsselfargskwargs r   P/Users/admin/.hermes/hermes-agent/venv/lib/python3.9/site-packages/xmpp/debug.py__init__k   s    zNoDebug.__init__c                 O   s   d S r   r   r   r   r   r   showm   s    zNoDebug.showc                 O   s   d S r   r   r   r   r   r   Showo   s    zNoDebug.Showc                 C   s   d S r   r   r	   flagr   r   r   	is_activeq   s    zNoDebug.is_activeNc                 C   s   dS )Nr   r   )r	   active_flagsr   r   r   
active_sett   s    zNoDebug.active_set)N)	__name__
__module____qualname__r   r   r   r   colorsr   r   r   r   r   r   j   s   r   
c                   @   s   e Zd ZdejddddddfddZdd	d
Zdd ZdddZdd Z	dd Z
dd Zdd Zdd Zi ZdddZdd ZdS ) DebugNzDEBUG: r   r      c	                 C   sj  g | _ |dkr$|r t|r d}nd}|   |rzt|tdu rrzt|d| _W qx   td td Y qx0 q|| _ntj	| _|dvrd| }	t
d	|	|| _|| _|| _d | _|| _| | |r.| d td}
zd
|
jd  }W n   d}Y n0 | d|
jj|f  | dd| j  t|tdtd fv rP|| _ndt| }	t
d|	d S )Nr   r   r    wzERROR: can open %s for writing)r   r      %szInvalid time_stamp paramz:%sr   zDebug created for %s%sz flags defined: %s,zInvalid type for flag_show!)r   len_remove_dupe_flagstypeopen_fhprintsysexitstdout	Exceptionprefixsufix
time_stamp	flag_showvalidate_flagsr   r   	_getframef_localsf_codeco_filenamejoinactive)r	   r   Zlog_filer-   r.   r/   r0   r1   Zwelcomemsg2Zcallermod_namer   r   r   r   |   sN    ,




zDebug.__init__c              	   C   s  | j r| | | |sdS |r(|}n| j}|r8|}n| j}| jdkrhd|tdtt f }n.| jdkrdtdtt |f }n|}| j	r|rd||| j	f }nd|| j	f }d|||f }|r|d }	|dkr|	t
kr|t
 }n |dkr|	t
kr|dd }z| j| W nb   d	}
tt|D ].}t|| d
k r^|| }nd}|
| }
q>| jd||
|f  Y n0 | j  dS )a  
        flag can be of folowing types:
            None - this msg will always be shown if any debugging is on
            flag - will be shown if flag is active
            (flag1,flag2,,,) - will be shown if any of the given flags
                               are active

        if prefix / sufix are not given, default ones from init will be used

        lf = -1 means strip linefeed if pressent
        lf = 1 means add linefeed if not pressent
        Nr    z%s%s z%b %d %H:%M:%Sr   z%s %sz%s%s%sr   r      ?)r1   _validate_flagr   r-   r.   r/   timestrftime	localtimer0   	LINE_FEEDr'   writeranger#   ordflush)r	   msgr   r-   r.   lfpresufoutputZ	last_charsicr   r   r   r      sZ    





z
Debug.showc                 C   sR   | j s
dS |r|| j v rdS t|tdtg fv rN|D ]}|| j v r8 dS q8dS )z(If given flag(s) should generate output.r   r   r   )r7   r%   )r	   r   rJ   r   r   r   r   $  s    
zDebug.is_activec                 C   s   d}g }|sg | _ nt|ttfv rh| |}|D ](}|| jvrPtjd|  |	| q2|| _ d}nrz|
d}W n@   | d | d|  | d | d | j| _ Y n0 |D ]}| }|	| q|| _ |   |S )	z7returns 1 if any flags where actually set, otherwise 0.r   zInvalid debugflag given: %s
r   r"   z***z!*** Invalid debug param given: %sz*** please correct your param!z)*** due to this, full debuging is enabled)r7   r%   tuplelist_as_one_listr   r)   stderrrA   appendsplitr   stripr$   )r	   r   rZok_flagsflagstfrJ   r   r   r   r   5  s4    




zDebug.active_setc                 C   s   | j S )zreturns currently active flags.)r7   )r	   r   r   r   
active_getX  s    zDebug.active_getc                 C   s   t |t g kr&t |t dkr&|gS g }|D ]N}t |t g krd| |}|D ]}| || qPq.|dkrpq.q.| || q.|S )z~ init param might contain nested lists, typically from group flags.

        This code organises lst and remves dupes
        r   N)r%   rO   _append_unique_str)r	   itemsrT   lZlst2l2r   r   r   rO   ]  s     
zDebug._as_one_listc                 C   s8   t |t dkr"d| }td|||vr4|| |S )zfilter out any dupes.r   r!   z$Invalid item type (should be string))r%   r,   rQ   )r	   lstitemr8   r   r   r   rY   q  s    

zDebug._append_unique_strc                 C   s4   |r0|  |D ] }|| jvrd| }td|qdS )zverify that flag is defined.r!   zInvalid debugflag givenN)rO   r   r,   )r	   rU   rW   r8   r   r   r   r<   {  s
    
zDebug._validate_flagc                 C   s,   g }| j D ]}||vr
|| q
|| _ dS )z
        if multiple instances of Debug is used in same app,
        some flags might be created multiple time, filter out dupes
        N)r   rQ   )r	   Zunique_flagsrW   r   r   r   r$     s
    
zDebug._remove_dupe_flagsr   c              	   C   s   t |d}|dddddd}ts,n&|| jv rJ| j| | t }nt| }ts\d}n|| jv rr| j| }nt}|d	krt }|d
 r|d dt	|d
 |d |d 
  }| j| |d d d  d |d d d  }| ||| d S )Nzutf-8z\rr   z\nz><z>
  <r   errorr   r   r    z                z         )r   replacecolors_enabledr   
color_noner)   exc_infor6   	tracebackformat_exceptionrstripr-   r   )r	   r   rE   r-   ZprefixcolorZ
_exceptionr   r   r   r     s    

,.z
Debug.Showc                 C   s>   | j s
dS |r6|| j v r"t| j vs6|| j vr:t| j v r:dS dS )Nr   r   )r7   
DBG_ALWAYSr   r   r   r   r     s    
0)NNNr   )N)r   )r   r   r   r)   rP   r   r   r   r   rX   rO   rY   r<   r$   r   r   r   r   r   r   r   {   s,   	
_  
I
#

r   always) Z	_version_r)   rh   r=   ossixr   typesenvironre   chrrf   Zcolor_blackZ	color_redZcolor_greenZcolor_brownZ
color_blueZcolor_magentaZ
color_cyanZcolor_light_grayZcolor_dark_grayZcolor_bright_redZcolor_bright_greenZcolor_yellowZcolor_bright_blueZcolor_purpleZcolor_bright_cyanZcolor_whiter   r@   r   rk   r   r   r   r   <module>   s@   
#  -