
    }f+                         d dl Z d dlmZmZ d dlmZmZmZ d dlZd dlm	Z	 ddl
mZ ddlmZ d dlmZ dd	lmZmZ d d
lmZ d dlmZ  G d de      Zy)    N)datetime	timedelta)IterableListOptional)map   )	BaseAlarm)	Component)	Container)	get_arrowuid_gen)
TodoParser)TodoSerializerc                   Z   e Zd ZdZ G d d      Z	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d'dedededed	ed
edededee	   defdZ
edee   fd       Zej                  dee   fd       Zedee   fd       Zej                  dee   fd       Zed        Zej                  d        Zed        Zej                  d        Zed        Zej                  d        Zedee   fd       Zej                  dee   fd       ZdefdZdefdZdefd Zdefd!Zdefd"Zdefd#Zdefd$Zd% Zd& Zy)(TodozsA todo list entry.

    Can have a start time and duration, or start and due time,
    or only start/due time.
    c                       e Zd ZdZeZeZy)	Todo.MetaVTODON)__name__
__module____qualname__namer   parserr   
serializer     G/var/www/feuerwehr-webapp/venv/lib/python3.12/site-packages/ics/todo.pyMetar      s    #
r   r   Nuiddescriptionlocationpercentpriorityr   urldurationalarmsstatusc                 .   d| _         d| _        d| _        d| _        d| _        |s
t               n|| _        |st        j                         n
t        |      | _
        t        |      | _        t        |      | _        || _        || _        || _        || _        |	| _        |
| _        || _        t)               | _        t-        d      | _        |r|rt1        d      |r|st1        d      || _        n	|r|| _        |t)        |      | _        || _        y)a  Instantiates a new :class:`ics.todo.Todo`.

        Args:
            uid (string): must be unique
            dtstamp (Arrow-compatible)
            completed (Arrow-compatible)
            created (Arrow-compatible)
            description (string)
            begin (Arrow-compatible)
            location (string)
            percent (int): 0-100
            priority (int): 0-9
            name (string) : rfc5545 SUMMARY property
            url (string)
            due (Arrow-compatible)
            duration (datetime.timedelta)
            alarms (:class:`ics.alarm.Alarm`)
            status (string)

        Raises:
            ValueError: if `duration` and `due` are specified at the same time
        Nr   )r   zNTodo() may not specify a duration and due date                at the same timezITodo() must specify a begin if a duration                    is specified)_percent	_priority_begin	_due_time	_durationr   r    arrownowr   dtstamp	completedcreatedr!   beginr"   r#   r$   r   r%   listr'   r   extra
ValueErrorr&   duer(   )selfr1   r    r2   r3   r!   r4   r"   r#   r$   r   r%   r8   r&   r'   r(   s                   r   __init__zTodo.__init__   s   N (,(,$'79S*1uyy{y7I"9- )&
  	'+vG,
"# #  "# # %DMDHv,DKr   returnc                     | j                   S N)r*   r9   s    r   r#   zTodo.percentj   s    }}r   valuec                 V    |r t        |      }|dk  s|dkD  rt        d      || _        y )Nr   d   zpercent must be [0, 100])intr7   r*   r9   r?   s     r   r#   zTodo.percentn   s.    JEqyECK !;<<r   c                     | j                   S r=   )r+   r>   s    r   r$   zTodo.priorityv   s    ~~r   c                 V    |r t        |      }|dk  s|dkD  rt        d      || _        y )Nr   	   zpriority must be [0, 9])rB   r7   r+   rC   s     r   r$   zTodo.priorityz   s.    JEqyEAI !:;;r   c                     | j                   S )a  Get or set the beginning of the todo.

        |  Will return an :class:`Arrow` object.
        |  May be set to anything that :func:`Arrow.get` understands.
        |  If a due time is defined (not a duration), .begin must not
            be set to a superior value.
        )r,   r>   s    r   r4   z
Todo.begin   s     {{r   c                 x    t        |      }|r&| j                  r|| j                  kD  rt        d      || _        y )NzBegin must be before due time)r   r-   r7   r,   rC   s     r   r4   z
Todo.begin   s3    % T^^(><==r   c                 ~    | j                   r| j                  | j                   z   S | j                  r| j                  S y)a  Get or set the end of the todo.

        |  Will return an :class:`Arrow` object.
        |  May be set to anything that :func:`Arrow.get` understands.
        |  If set to a non null value, removes any already
            existing duration.
        |  Setting to None will have unexpected behavior if
            begin is not None.
        |  Must not be set to an inferior value than self.begin.
        N)r.   r4   r-   r>   s    r   r8   zTodo.due   s2     >>::..^^>>!r   c                     t        |      }|r&| j                  r|| j                  k  rt        d      || _        |rd | _        y y )NzDue must be after begin)r   r,   r7   r-   r.   rC   s     r   r8   zTodo.due   sB    % T[[UT[[%8677!DN r   c                 ~    | j                   r| j                   S | j                  r| j                  | j                  z
  S y)a.  Get or set the duration of the todo.

        |  Will return a timedelta object.
        |  May be set to anything that timedelta() understands.
        |  May be set with a dict ({"days":2, "hours":6}).
        |  If set to a non null value, removes any already
            existing end time.
        N)r.   r8   r4   r>   s    r   r&   zTodo.duration   s4     >>>>!XX88djj(( r   c                     t        |t              rt        di |}n t        |t              r|}n|t        |      }|| _        |rd | _        y y )Nr   )
isinstancedictr   r.   r-   rC   s     r   r&   zTodo.duration   sN    eT"&&Ey)Ee$E!DN r   c                     | j                   S r=   )_statusr>   s    r   r(   zTodo.status   s    ||r   c                     t        |t              r|j                         }d}||vr4t        ddj	                  |D cg c]  }t        |       c}      z        || _        y c c}w )N)NzNEEDS-ACTION	COMPLETEDz
IN-PROCESS	CANCELLEDzstatus must be one of %sz, )rM   strupperr7   joinreprrP   )r9   r?   statusesxs       r   r(   zTodo.status   s]    eS!KKMEQ 7$))V^D_QRT!WD_:``aa E`s   A#c                    | j                   y| j                  '| j                  dj                  | j                         S | j                  &dj                  | j                   | j                        S | j                  &dj                  | j                   | j                        S dj                  | j                   | j                  | j                        S )Nz<Todo>z<Todo '{}'>z<Todo '{}' begin:{}>z<Todo '{}' due:{}>z<Todo '{}' begin:{} due:{}>)r   r4   r8   formatr>   s    r   __repr__zTodo.__repr__   s    99::$(("2 ''		2288)00DJJGG::'..tyy$((CC,33DIItzz488TTr   c                    t        |t              r}| j                  X|j                  L| j                  |j                  y| j                  y|j                  y| j                  |j                  k  S | j                  |j                  k  S t        |t              r| j                  r| j                  |k  S t        dj                  t        |                  NFTCannot compare Todo and {}rM   r   r8   r   r   NotImplementedErrorr[   typer9   others     r   __lt__zTodo.__lt__   s    eT"xxEII$599$); YY&ZZ' 99uzz1188eii''eX&xxxx%''!(//U<> 	>r   c                    t        |t              r}| j                  X|j                  L| j                  |j                  y| j                  y|j                  y| j                  |j                  k  S | j                  |j                  k  S t        |t              r| j                  r| j                  |k  S t        dj                  t        |                  NTFr_   r`   rc   s     r   __le__zTodo.__le__       eT"xxEII$599$);YY&ZZ' 99

2288uyy((eX&xxxx5((!(//U<> 	>r   c                    t        |t              r}| j                  X|j                  L| j                  |j                  y| j                  y|j                  y| j                  |j                  kD  S | j                  |j                  kD  S t        |t              r| j                  r| j                  |kD  S t        dj                  t        |                  r^   r`   rc   s     r   __gt__zTodo.__gt__  s    eT"xxEII$599$); YY& ZZ'99uzz1188eii''eX&xxxx%''!(//U<> 	>r   c                    t        |t              r}| j                  X|j                  L| j                  |j                  y| j                  y|j                  y| j                  |j                  k\  S | j                  |j                  k\  S t        |t              r| j                  r| j                  |k\  S t        dj                  t        |                  rg   r`   rc   s     r   __ge__zTodo.__ge__#  ri   r   c                     t        |t              r| j                  |j                  k(  S t        dj	                  t        |                  )z9Two todos are considered equal if they have the same uid.r_   rM   r   r    ra   r[   rb   rc   s     r   __eq__zTodo.__eq__5  >    eT"88uyy((!(//U<> 	>r   c                     t        |t              r| j                  |j                  k7  S t        dj	                  t        |                  )zDTwo todos are considered not equal if they do not have the same uid.r_   ro   rc   s     r   __ne__zTodo.__ne__<  rq   r   c                     t        j                   |       }|j                  j                         |_        t        j                   | j                        |_        |S )z9
        Returns:
            Todo: an exact copy of self)copyr6   cloner'   )r9   rv   s     r   rv   z
Todo.cloneC  s>     		$kk'')yy-r   c                 `    t        dj                  t        d | j                                    S )zC
        Returns:
            int: hash of self. Based on self.uid. c                     dt        |       z  S )Nz%.3d)ord)rY   s    r   <lambda>zTodo.__hash__.<locals>.<lambda>P  s    #a& r   )rB   rV   r   r    r>   s    r   __hash__zTodo.__hash__L  s$     27738$((CDEEr   )NNNNNNNNNNNNNNN)r   r   r   __doc__r   rT   rB   r   r   r
   r:   propertyr   r#   setterr$   r4   r8   r&   r(   r\   boolre   rh   rk   rm   rp   rs   rv   r|   r   r   r   r   r      sc   $ $  $(!% $!%! '+/3#JJ
 "J J J J J J %J "),J JX #   ^^Xc]   (3-   __hsm     \\   * 	ZZ" "  " __" "    ]]HSM  	U# 	U>t >$>t >$>t >$>t >$>t >>t >Fr   r   )ru   r   r   typingr   r   r   r/   	six.movesr   
alarm.baser
   	componentr   ics.grammar.parser   utilsr   r   ics.parsers.todo_parserr   ics.serializers.todo_serializerr   r   r   r   r   <module>r      s9     ( + +   !   ' % . :F9 Fr   