
    #hS                         S SK r S SKJrJr  S SKJrJrJr  S SKJrJ	r	  S SK
Jr  S SKJrJr  S SKJr  S SKJr  S S	KJr   " S
 S\\S9rg)    N)datetime	timedelta)OptionalUnionAny)ABCMetaabstractmethod)	Component)	get_arrow	get_lines)	Container)BaseAlarmSerializer)BaseAlarmParserc            	         ^  \ rS rSrSr " S S5      r   SS\\\4   S\	S\S	S4S
 jjr
\S\S\S\4U 4S jj5       r\S	\\\\4      4S j5       r\R$                  S\\\\4      S	S4S j5       r\S	\\	   4S j5       r\R$                  S\\	   S	S4S j5       r\S	\\   4S j5       r\R$                  S\\   S	S4S j5       r\\S 5       5       rS rS	\4S jrS	\4S jrS rSrU =r$ )	BaseAlarm   z$
A calendar event VALARM base class
c                        \ rS rSrSr\r\rSr	g)BaseAlarm.Meta   VALARM N)
__name__
__module____qualname____firstlineno__namer   parserr   
serializer__static_attributes__r       N/Users/user/Downloads/htwk/venv/lib/python3.13/site-packages/ics/alarm/base.pyMetar      s     (
r    r"   Ntriggerrepeatdurationreturnc                     SU l         SU l        SU l        Xl        Ub  Uc  [	        S5      eU(       a  X l        U(       a  X0l        [        SS9U l        g)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__BaseAlarm.__init__   s\    ( ?C&*.2  X%5y   K$MH-
r    	containerargskwargsc                 Z   > [         TU ]  " U/UQ70 UD6n[        UR                  SSS9  U$ )NACTIONF)keep)super_from_containerr   r,   )clsr0   r1   r2   ret	__class__s        r!   r7   BaseAlarm._from_containerD   s1    g%iA$A&A#))XE2
r    c                     U R                   $ )zUThe trigger condition for the alarm

| Returns either a timedelta or datetime object
)r(   r-   s    r!   r#   BaseAlarm.triggerJ   s     }}r    valuec                 P    [        U[        5      (       a  [        U5      nXl        g N)
isinstancer   r   r(   r-   r?   s     r!   r#   r>   R   s    eX&&e$Er    c                     U R                   $ )zgNumber of times to repeat alarm

| Returns an integer for number of alarm repeats
| Value must be >= 0
)r)   r=   s    r!   r$   BaseAlarm.repeatY   s     ||r    c                 8    Ub  US:  a  [        S5      eXl        g )Nr   z(Repeat must be great than or equal to 0.)r+   r)   rC   s     r!   r$   rE   b   s    GHHr    c                     U R                   $ )zsDuration between alarm repeats

| Returns a timedelta object
| Timespan must return positive total_seconds() value
)r*   r=   s    r!   r%   BaseAlarm.durationi   s     ~~r    c                 T    Ub  UR                  5       S:  a  [        S5      eXl        g )Nr   z)Alarm duration timespan must be positive.)total_secondsr+   r*   rC   s     r!   r%   rH   r   s)    !4!4!6!:HIIr    c                     [        S5      e)z<VALARM action to be implemented by concrete classes
        z*Base class cannot be instantiated directly)NotImplementedErrorr=   s    r!   actionBaseAlarm.actiony   s    
 ""NOOr    c                     SR                  [        U 5      R                  U R                  5      nU R                  (       a)  USR                  U R                  U R
                  5      -  nSR                  U5      $ )Nz{0} trigger:{1}z repeat:{0} duration:{1}z<{0}>)formattyper   r#   r$   r%   rC   s     r!   __repr__BaseAlarm.__repr__   sX    !((d)<)<dllK;;/66t{{DMMRRE~~e$$r    c                 .    U R                  U5      (       + $ rA   )__eq__r-   others     r!   __ne__BaseAlarm.__ne__   s    ;;u%%%r    c                     [        U 5      [        U5      L =(       aY    U R                  UR                  :H  =(       a9    U R                  UR                  :H  =(       a    U R                  UR                  :H  $ )zKTwo alarms are considered equal if they have the same type and base values.)rQ   r#   r$   r%   rV   s     r!   rU   BaseAlarm.__eq__   sZ     J$u+% 0-0u||+0 /		
r    c                 p    [         R                   " U 5      nUR                  R                  5       Ul        U$ )z*
Returns:
    Alarm: an exact copy of self)copyr,   clone)r-   r^   s     r!   r^   BaseAlarm.clone   s*     		$kk'')r    )r*   r)   r(   r%   r,   r$   r#   )NNN)r   r   r   r   __doc__r"   r   r   r   intr.   classmethodr   r   r7   propertyr   r#   setterr$   r%   r	   rM   rR   boolrX   rU   r^   r   __classcell__)r:   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)r]   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>ro      s7     ( ' ' ' # ( @ 4I	W Ir    