o
    .j                     @  s   d Z ddlmZ ddlZddlZddlmZmZ ddlm	Z	 ddl
mZ ddlmZ er>ddlmZ dd	lmZ dd
lmZ G dd deZdgZdS )zSelection for alarms.    )annotationsN)TYPE_CHECKINGSequence)EventAdapter)TodoAdapter)SelectComponents)	Component)ComponentAdapter)Seriesc                   @  sB   e Zd ZdZeeffdddZedd ZdddZ	dddZ
dS )AlarmszSelect alarms and find their times.

    By default, alarms from TODOs and events are collected.
    You can use this to change which alarms are collected:

        Alarms((EventAdapter,))
        Alarms((TodoAdapter,))
    parents0tuple[type[ComponentAdapter] | SelectComponents]c                 C  s
   || _ d S )Nr   )selfr    r   Z/home/thesage/.local/lib/python3.10/site-packages/recurring_ical_events/selection/alarm.py__init__   s   
zAlarms.__init__c                   C  s   dS )z'The name of the component we calculate.VALARMr   r   r   r   r   component_name'   s   zAlarms.component_namesourcer   suppress_errorstuple[Exception]returnSequence[Series]c                   s    fdd| j D S )z(Collect the parent components of alarms.c                   s"   g | ]}|  D ]}|q
qS r   )collect_series_from).0parentsr   r   r   r   
<listcomp>0   s    
z5Alarms.collect_parent_series_from.<locals>.<listcomp>r   )r   r   r   r   r   r   collect_parent_series_from,   s   z!Alarms.collect_parent_series_fromc                 C  s   ddl m}m}m} | }g }| ||D ]o}g }	|jD ]g}
|
jD ]a}t|R |j	}|du s4||	v r<	 W d   q!t
|tjrN|||
 |	| n%|jdkra|||| |	| n|jdkrs|||| |	| W d   n1 s}w   Y  q!qq| s|| |S )zCollect all TODOs and Alarms from VEVENTs and VTODOs.

        suppress_errors - a list of errors that should be suppressed.
            A Series of events with such an error is removed from all results.
        r   )AbsoluteAlarmSeriesAlarmSeriesRelativeToEndAlarmSeriesRelativeToStartNSTARTEND)"recurring_ical_events.series.alarmr!   r"   r#   r    
componentsalarms
contextlibsuppressTRIGGER
isinstancedatetimeaddappendTRIGGER_RELATEDis_empty)r   r   r   r!   r"   r#   absolute_alarmsresultseriesused_alarms	componentalarmtriggerr   r   r   r   6   s:   





zAlarms.collect_series_fromN)r   r   )r   r   r   r   r   r   )__name__
__module____qualname____doc__r   r   r   staticmethodr   r    r   r   r   r   r   r      s    	


r   )r<   
__future__r   r)   r-   typingr   r   $recurring_ical_events.adapters.eventr   #recurring_ical_events.adapters.todor   $recurring_ical_events.selection.baser   icalendar.calr   (recurring_ical_events.adapters.componentr	   recurring_ical_events.seriesr
   r   __all__r   r   r   r   <module>   s    
I