a
    4i                     @   s6   d dl mZ ddlT ddlT ddlT G dd dZdS )    )defaultdict   )*c                   @   s`   e Zd Zedd Zedd Ze ZdZdd Z	dddZ
d	d
 Zedd Zedd ZdS )	eventlistc                   C   s   t tS Nr   list r	   r	   //usr/lib/python3/dist-packages/isc/eventlist.py<lambda>       zeventlist.<lambda>c                   C   s   t tS r   r   r	   r	   r	   r
   r      r   Nc           
      C   s   g d}|| _ | D ]}| j| ||  D ]\}}| D ]Z}|D ]P}||}|s^qJt|||}	|jr| j	| | 
|	 qJ| j| | 
|	 qJqBt| j	| | dd d| j	| |< t| j| | dd d| j| |< q2qd S )N)ZSyncPublishZPublishZ
SyncDeleteZActivateZInactiveZDeletec                 S   s   | j S r   wheneventr	   r	   r
   r   1   r   z$eventlist.__init__.<locals>.<lambda>)keyc                 S   s   | j S r   r   r   r	   r	   r
   r   4   r   )_kdictZzones_zonesadditemsvaluesZgettimekeyeventsep_Kappend_Zsorted)
selfZkdictZ
propertieszonealgkeyskZpropter	   r	   r
   __init__   s(    
zeventlist.__init__c                 C   s  dd }|s|}|r |dkr dnd}|r4|dkr4dnd}d }}	d}
|rb|| j vrb|d|  dS |rd}
|s~| |d||}|s| |d||}	nX| j D ]P}|s|| j v rd}
| |d||}|s|| j v rd}
| |d||}	q|
s|d dS |o|	S )	Nc                  _   s   d S r   r	   )argskwargsr	   r	   r
   noop:   s    z eventlist.coverage.<locals>.noopKSKTFZZSKz!ERROR: No key events found for %szERROR: No key events found)r   	checkzoner   r    r   )r   r   keytypeuntiloutputr'   Zno_zskZno_kskZkokZzokfoundzr	   r	   r
   coverage9   s6    
zeventlist.coveragec           	      C   st   d}|dkr| j | }n
| j| }| D ]D}|d||t|f  t|| |||}|rf|d |ol|}q*|S )NTr(   z9Checking scheduled %s events for zone %s, algorithm %s...zNo errors found)r   r   r    dnskeyZalgstrr   checkset)	r   r   r*   r+   r,   ZallokZkzr   okr	   r	   r
   r)   ^   s    

zeventlist.checkzonec                 C   sN   | sd S |d| d    d dd | D ] }|d|jt|jf dd q(d S )Nz  r   :F)skipz
    %s: %s)ZshowtimeZwhatreprr   )eventsetr,   r   r	   r	   r
   showsetq   s
    zeventlist.showsetc           
   	   C   sH  t  }t  }d}| D ]P}d}|r0|d j|jkr:|| |d j|jkr|| t  }|| q|rt|| |s|d|  dS d  }}	|D ]}|rt|d j|kr|dtdt|   dS |D ]}|||	\}}	qt	
|| |s|d|   dS |	s&|d|   dS |	|s|d	|   dS qdS )
NFTr   zERROR: No %s events foundzIgnoring events after %sz%a %b %d %H:%M:%S UTC %Yz*ERROR: No %s's are active after this eventz-ERROR: No %s's are published after this eventz=ERROR: No %s's are both active and published after this event)r   r   r   ZcalendarZtimegmtimestrftimegmtimeZstatusr   r7   intersection)
r6   r*   r+   r,   groupsgroupZeventsfoundr   ZactiveZ	publishedr	   r	   r
   r1   y   sT    



zeventlist.checkset)N)__name__
__module____qualname__r   r   r   setr   r   r$   r/   r)   staticmethodr7   r1   r	   r	   r	   r
   r      s   !
%
r   N)collectionsr   r0   Zkeydictr   r   r	   r	   r	   r
   <module>   s   