
    }fS                         d dl Z d dlmZmZ d dlmZmZmZ d dlmZm	Z	 d dl
mZ d dlmZmZ d dlmZ d dlmZ d d	lmZ  G d
 dee      Zy)    N)datetime	timedelta)OptionalUnionAny)ABCMetaabstractmethod)	Component)	get_arrow	get_lines)	Container)BaseAlarmSerializer)BaseAlarmParserc            	           e Zd ZdZ G d d      Z	 	 	 ddeeef   dededdfd	Z	e
d
ededef fd       Zedeeeef      fd       Zej"                  deeeef      ddfd       Zedee   fd       Zej"                  dee   ddfd       Zedee   fd       Zej"                  dee   ddfd       Zeed               Zd ZdefdZdefdZd Z xZS )	BaseAlarmz,
    A calendar event VALARM base class
    c                       e Zd ZdZeZeZy)BaseAlarm.MetaVALARMN)__name__
__module____qualname__namer   parserr   
serializer     M/var/www/feuerwehr-webapp/venv/lib/python3.12/site-packages/ics/alarm/base.pyMetar      s     (
r   r   Ntriggerrepeatdurationreturnc                     d| _         d| _        d| _        || _        ||t	        d      |r|| _        |r|| _        t        d      | _        y)a.  
        Instantiates a new :class:`ics.alarm.BaseAlarm`.

        Adheres to RFC5545 VALARM standard: http://icalendar.org/iCalendar-RFC-5545/3-6-6-alarm-component.html

        Args:
            trigger (datetime.timedelta OR datetime.datetime) : Timespan to alert before parent action, or absolute time to alert
            repeat (integer) : How many times to repeat the alarm
            duration (datetime.timedelta) : Duration between repeats

        Raises:
            ValueError: If trigger, repeat, or duration do not match the RFC spec.
        NzgA definition of an alarm with a repeating trigger MUST include both the DURATION and REPEAT properties.r   )r   )	_trigger_repeat	_durationr   
ValueErrorr    r!   r   extra)selfr   r    r!   s       r   __init__zBaseAlarm.__init__   sb    ( ?C&*.2  X%5y   DK$DMH-
r   	containerargskwargsc                 ^    t        |   |g|i |}t        |j                  dd       |S )NACTIONF)keep)super_from_containerr   r(   )clsr+   r,   r-   ret	__class__s        r   r2   zBaseAlarm._from_containerD   s1    g%iA$A&A#))XE2
r   c                     | j                   S )zeThe trigger condition for the alarm

        | Returns either a timedelta or datetime object
        )r$   r)   s    r   r   zBaseAlarm.triggerJ   s     }}r   valuec                 H    t        |t              rt        |      }|| _        y N)
isinstancer   r   r$   r)   r8   s     r   r   zBaseAlarm.triggerR   s    eX&e$Er   c                     | j                   S )zNumber of times to repeat alarm

        | Returns an integer for number of alarm repeats
        | Value must be >= 0
        )r%   r7   s    r   r    zBaseAlarm.repeatY   s     ||r   c                 6    ||dk  rt        d      || _        y )Nr   z(Repeat must be great than or equal to 0.)r'   r%   r<   s     r   r    zBaseAlarm.repeatb   s!    GHHr   c                     | j                   S )zDuration between alarm repeats

        | Returns a timedelta object
        | Timespan must return positive total_seconds() value
        )r&   r7   s    r   r!   zBaseAlarm.durationi   s     ~~r   c                 R    ||j                         dk  rt        d      || _        y )Nr   z)Alarm duration timespan must be positive.)total_secondsr'   r&   r<   s     r   r!   zBaseAlarm.durationr   s+    !4!4!6!:HIIr   c                     t        d      )z= VALARM action to be implemented by concrete classes
        z*Base class cannot be instantiated directly)NotImplementedErrorr7   s    r   actionzBaseAlarm.actiony   s    
 ""NOOr   c                     dj                  t        |       j                  | j                        }| j                  r)|dj                  | j                  | j
                        z  }dj                  |      S )Nz{0} trigger:{1}z repeat:{0} duration:{1}z<{0}>)formattyper   r   r    r!   r<   s     r   __repr__zBaseAlarm.__repr__   sX    !((d)<)<dllK;;/66t{{DMMRRE~~e$$r   c                 &    | j                  |       S r:   )__eq__r)   others     r   __ne__zBaseAlarm.__ne__   s    ;;u%%%r   c                     t        |       t        |      u xrO | j                  |j                  k(  xr4 | j                  |j                  k(  xr | j                  |j                  k(  S )zKTwo alarms are considered equal if they have the same type and base values.)rG   r   r    r!   rK   s     r   rJ   zBaseAlarm.__eq__   sZ     J$u+% 0-0u||+0 /		
r   c                 n    t        j                   |       }|j                  j                         |_        |S )z:
        Returns:
            Alarm: an exact copy of self)copyr(   clone)r)   rQ   s     r   rQ   zBaseAlarm.clone   s*     		$kk'')r   )NNN)r   r   r   __doc__r   r   r   r   intr*   classmethodr   r   r2   propertyr   r   setterr    r!   r	   rD   rH   boolrM   rJ   rQ   __classcell__)r5   s   @r   r   r      s   ) ) /3"	'.y(*+'. '. 	'.
 
'.R 	 #   
 %	8(;"<=   ^^XeIx,?&@A d      ]]HSM d   (9-   __hy1 d   P  P
%&t &
t 
r   r   )	metaclass)rP   r   r   typingr   r   r   abcr   r	   ics.componentr
   	ics.utilsr   r   ics.grammar.parser    ics.serializers.alarm_serializerr   ics.parsers.alarm_parserr   r   r   r   r   <module>ra      s7     ( ' ' ' # ( @ 4I	W Ir   