+
    ¾¾j8  ã                  ór  € R t ^ RIHt ^ RIt^ RIHtHtHt ^ RIHtH	t	 ^ RI
HtHtHtHtHtHtHtHtHtHtHtHtHtHtHtHtHtHtHtHtHtH t H!t!H"t"H#t#H$t$H%t%H&t&H't'H(t(H)t)H*t*H+t+H,t,H-t-H.t.H/t/ ^ RI0H1t1 ^ RI2H3t3 ]'       d)   ^ RI4H5t5H6t6 ^ R	I7H8t8 ^ R
I9H:t: ^ RI;H<t<H=t= ^ RI>H?t? ^ RI@HAtA  ! R R]14      tBR.tCR# )z:rfc:`5545` VTODO component.)ÚannotationsN)ÚdateÚdatetimeÚ	timedelta)ÚTYPE_CHECKINGÚLiteral)%ÚCONCEPTS_TYPE_SETTERÚLINKS_TYPE_SETTERÚRELATED_TO_TYPE_SETTERÚREQUEST_STATUS_propertyÚX_MOZ_LASTACK_propertyÚX_MOZ_SNOOZE_TIME_propertyÚattendees_propertyÚcategories_propertyÚclass_propertyÚcolor_propertyÚconferences_propertyÚcontacts_propertyÚcreate_single_propertyÚdescription_propertyÚexdates_propertyÚget_duration_propertyÚget_end_propertyÚ&get_start_end_duration_with_validationÚget_start_propertyÚimages_propertyÚlocation_propertyÚorganizer_propertyÚpriority_propertyÚproperty_del_durationÚproperty_doc_duration_templateÚproperty_get_durationÚproperty_set_durationÚrdates_propertyÚrrules_propertyÚsequence_propertyÚset_duration_with_lockingÚset_end_with_lockingÚset_start_with_lockingÚstatus_propertyÚsummary_propertyÚuid_propertyÚurl_property)Ú	Component)Úget_example)ÚIterableÚSequence©ÚAlarms)ÚSelf)ÚCLASSÚSTATUS)ÚvCalAddress)Ú
Conferencec            	      óN  a € ] tR t^=tRtRtR$tR%tR&tR't	]
! RR]]3]R4      t]
! RR]]3]R4      t]! ]]]]P(                  ! RR7      4      tR	 t]R
 R l4       t]P0                  R R l4       t]R R l4       t]P0                  R R l4       t]R R l4       t]P0                  R R l4       tR(R R lltR)R R lltR(R R llt]t] t!]R R l4       t"]#t$]%t&]'t(])t*]+t,]-t.]/t0]1t2]3t4]5t6]7t8]9t:];t<]=t>]?t@]AtB]CtD]EtF]GtH]ItJ^ RIKHLtL ]MR*R V 3R  lll4       tN]MR+R! R" ll4       tOR#tPV ;tQ# ),ÚTodoa  
A "VTODO" calendar component is a grouping of component
properties that represents an action item or assignment. For
example, it can be used to represent an item of work assigned to
an individual, such as "Prepare for the upcoming conference
seminar on Internet Calendaring".

Examples:
    Create a new Todo:

        >>> from icalendar import Todo
        >>> todo = Todo.new()
        >>> print(todo.to_ical())
        BEGIN:VTODO
        DTSTAMP:20250517T080612Z
        UID:d755cef5-2311-46ed-a0e1-6733c9e15c63
        END:VTODO

    Complete the example Todo.

    .. code-block:: pycon

        >>> from datetime import datetime, timezone
        >>> from icalendar import Todo, STATUS
        >>> todo = Todo.example()
        >>> todo["PERCENT-COMPLETE"] = 100
        >>> todo["COMPLETED"] = datetime(2007, 5, 1, 12, tzinfo=timezone.utc)
        >>> todo.status = STATUS.COMPLETED
        >>> print(todo.to_ical().decode())
        BEGIN:VTODO
        CATEGORIES:FAMILY,FINANCE
        CLASS:CONFIDENTIAL
        COMPLETED:2007-05-01 12:00:00+00:00
        DTSTAMP:20070313T123432Z
        DUE;VALUE=DATE:20070501
        PERCENT-COMPLETE:100
        STATUS:COMPLETED
        SUMMARY:Submit Quebec Income Tax Return for 2006
        UID:20070313T123432Z-456553@example.com
        END:VTODO

ÚVTODOÚDTSTARTÚDUEÚdtzOThe "DTSTART" property for a "VTODO" specifies the inclusive start of the Todo.z`The "DUE" property for a "VTODO" calendar component specifies the non-inclusive end of the Todo.)Ú	componentc                ó   € \        V RRR4      # )z=Verify the calendar validity and return the right attributes.r;   r<   r:   )r   ©Úselfs   &ÚQ/home/ralf/ical-fahrzeuge/venv/lib/python3.14/site-packages/icalendar/cal/todo.pyÚ_get_start_end_durationÚTodo._get_start_end_duration¬   s   € ä5°d¸IÀuÈgÓVÐVó    c               ó   € V ^8„  d   QhRR/# ©é   Úreturnúdate | datetime© )Úformats   "rB   Ú__annotate__ÚTodo.__annotate__±   s   € ÷ (ñ (�ñ (rE   c                ó   € \        V 4      # )aW  The start of the VTODO.

Invalid values raise an :exc:`~icalendar.error.InvalidCalendar`.
If there is no start, we also raise an :exc:`~icalendar.error.IncompleteComponent` error.

You can get the start, end and duration of a Todo as follows:

>>> from datetime import datetime
>>> from icalendar import Todo
>>> todo = Todo()
>>> todo.start = datetime(2021, 1, 1, 12)
>>> todo.end = datetime(2021, 1, 1, 12, 30) # 30 minutes
>>> todo.duration  # 1800 seconds == 30 minutes
datetime.timedelta(seconds=1800)
>>> print(todo.to_ical())
BEGIN:VTODO
DTSTART:20210101T120000
DUE:20210101T123000
END:VTODO
)r   r@   s   &rB   ÚstartÚ
Todo.start°   s   € ô, " $Ó'Ð'rE   c               ó   € V ^8„  d   QhRR/# )rH   rP   údate | datetime | NonerK   )rL   s   "rB   rM   rN   É   s   € ÷ ñ Ð1ñ rE   c                ó   € Wn         R# )zSet the start.N)r;   )rA   rP   s   &&rB   rP   rQ   È   s	   € ð ŽrE   c               ó   € V ^8„  d   QhRR/# rG   rK   )rL   s   "rB   rM   rN   Î   s   € ÷ -ñ -�_ñ -rE   c                ó   € \        V R4      # )zµThe end of the todo.

Invalid values raise an :exc:`~icalendar.error.InvalidCalendar` error.
If there is no end, we also raise an :exc:`~icalendar.error.IncompleteComponent` error.
r<   )r   r@   s   &rB   ÚendÚTodo.endÍ   s   € ô    eÓ,Ð,rE   c               ó   € V ^8„  d   QhRR/# )rH   rW   rS   rK   )rL   s   "rB   rM   rN   ×   s   € ÷ ñ Ð-ñ rE   c                ó   € Wn         R# )zSet the end.N)r<   )rA   rW   s   &&rB   rW   rX   Ö   s	   € ð ŽrE   c               ó   € V ^8„  d   QhRR/# )rH   rI   r   rK   )rL   s   "rB   rM   rN   Ü   s   € ÷ +ñ +˜)ñ +rE   c                ó   € \        V 4      # )a�  The duration of the VTODO.

Returns the DURATION property if set, otherwise calculated from start and end.
You can set the duration to automatically adjust the end time while keeping
start locked.

Setting the duration will do the following.

1.  Keep the start time locked (unchanged)
2.  Adjust the end time to start + duration
3.  Remove any existing DUE property
4.  Set the DURATION property
)r   r@   s   &rB   ÚdurationÚTodo.durationÛ   s   € ô % TÓ*Ð*rE   c               ó   € V ^8„  d   QhRR/# )rH   Úvaluer   rK   )rL   s   "rB   rM   rN   í   s   € ÷ 1ñ 1˜iñ 1rE   c                	óœ   € \        V\        4      '       g#   \        R \        V4      P                   R24      hV P                  VRR7       R# )zUse timedelta, not Ú.rP   )ÚlockedN)Ú
isinstancer   Ú	TypeErrorÚtypeÚ__name__Úset_duration)rA   r`   s   &&rB   r]   r^   ì   sD   € ä˜%¤×+Ò+ÜÐ1´$°u³+×2FÑ2FÐ1GÀqÐIÓJÐJð 	×Ñ˜%¨ÐÖ0rE   c               ó    € V ^8„  d   QhRRRR/# )rH   r]   ztimedelta | Nonerc   zLiteral['start', 'end']rK   )rL   s   "rB   rM   rN   ô   s    € ÷ 	Añ 	AØ(ð	AØ2Iñ	ArE   c                ó    € \        WVR4       R# )z×Set the duration of the event relative to either start or end.

Parameters:
    duration: The duration to set, or None to convert to DURATION property
    locked: Which property to keep unchanged ('start' or 'end')
r<   N)r&   )rA   r]   rc   s   &&&rB   rh   ÚTodo.set_durationô   s   € ô 	" $°&¸%Ö@rE   c               ó    € V ^8„  d   QhRRRR/# )rH   rP   rJ   rc   z!Literal['duration', 'end'] | NonerK   )rL   s   "rB   rM   rN   ÿ   s   € ÷ 
;ñ 
;Ø$ð
;Ø.Oñ
;rE   c                ó    € \        WVR4       R# )z¾Set the start with explicit locking behavior.

Parameters:
    start: The start time to set
    locked: Which property to keep unchanged ('duration', 'end', or None
        for auto-detect)
r<   N)r(   )rA   rP   rc   s   &&&rB   Ú	set_startÚTodo.set_startÿ   s   € ô 	˜t¨F°EÖ:rE   c               ó    € V ^8„  d   QhRRRR/# )rH   rW   rJ   rc   zLiteral['start', 'duration']rK   )rL   s   "rB   rM   rN     s   € ÷ 	7ñ 	7Ø"ð	7Ø,Hñ	7rE   c                ó    € \        WVR4       R# )z¼Set the end of the component, keeping either the start or the duration same.

Parameters:
    end: The end time to set
    locked: Which property to keep unchanged ('start' or 'duration')
r<   N)r'   )rA   rW   rc   s   &&&rB   Úset_endÚTodo.set_end  s   € ô 	˜T¨°Ö6rE   c               ó   € V ^8„  d   QhRR/# )rH   rI   r2   rK   )rL   s   "rB   rM   rN     s   € ÷ ñ ˜ñ rE   c                ó   € ^ RI Hp V! V 4      # )aA  Compute the alarm times for this component.

>>> from datetime import datetime
>>> from icalendar import Todo
>>> todo = Todo()  # empty without alarms
>>> todo.start = datetime(2024, 10, 26, 10, 21)
>>> len(todo.alarms.times)
0

Note that this only uses DTSTART and DUE, but ignores
RDATE, EXDATE, and RRULE properties.
r1   )Úicalendar.alarmsr2   )rA   r2   s   & rB   ÚalarmsÚTodo.alarms  s   € õ 	,á�d‹|ÐrE   )ÚRECURRENCE_IDc          :     óŒ   € V ^8„  d   QhRRRRRRRRR	R
RRRR
RRRRRRRRRRRRRRRRRRRRRR
RR R!R
R"RR#RR$RR%R&R'R(R)RR*R+R,RR-R./# )/rH   Ú	attendeeszlist[vCalAddress] | NoneÚ
categorieszSequence[str]ÚclassificationzCLASS | NoneÚcolorz
str | NoneÚcommentszlist[str] | str | NoneÚconceptsr   ÚcontactsÚconferenceszlist[Conference] | NoneÚcreatedzdate | NoneÚdescriptionrW   rS   Úlast_modifiedÚlinksr	   ÚlocationÚ	organizerzvCalAddress | str | NoneÚpriorityz
int | NoneÚrecurrence_idÚrefidsÚ
related_tor
   Úrequest_statusÚsequenceÚstamprP   ÚstatuszSTATUS | NoneÚsubcomponentszIterable[Component] | NoneÚsummaryÚuidzstr | uuid.UUID | NoneÚurlrI   r3   rK   )rL   s   "rB   rM   rN   B  sM  € ÷ mñ mð ,ðmð "ð	mð
 %ðmð ðmð )ðmð 'ðmð )ðmð -ðmð ðmð  ðmð $ðmð #ðmð !ðmð  ð!mð" ,ð#mð$ ð%mð& .ð'mð( 'ð)mð* +ð+mð, /ð-mð. ð/mð0 ð1mð2 &ð3mð4 ð5mð6 2ð7mð8 ð9mð: $ð;mð< ð=mð> 
ñ?mrE   c               óä  <€ \         ST `  Ve   TMV P                  4       V	VVVVVVVR7	      pVVn        V
Vn        Ve   TM\
        P                  ! 4       Vn        VVn        VVn	        VVn
        VVn        VVn        VVn        VVn        VVn        VVn        VVn        VVn        VVn        VVn        VVn        VVn        VVn        V P0                  '       d   V P3                  VV4       V# )ab  Create a new TODO with all required properties.

This creates a new Todo in accordance with :rfc:`5545`.

Parameters:
    attendees: The :attr:`attendees` of the todo.
    categories: The :attr:`categories` of the todo.
    classification: The :attr:`classification` of the todo.
    color: The :attr:`color` of the todo.
    comments: The :attr:`~icalendar.Component.comments` of the todo.
    concepts: The :attr:`~icalendar.Component.concepts` of the todo.
    contacts: The :attr:`contacts` of the todo.
    conferences: The :attr:`conferences` of the todo.
    created: The :attr:`~icalendar.Component.created` of the todo.
    description: The :attr:`description` of the todo.
    end: The :attr:`end` of the todo.
    last_modified: The :attr:`~icalendar.Component.last_modified` of the todo.
    links: The :attr:`~icalendar.Component.links` of the todo.
    location: The :attr:`location` of the todo.
    organizer: The :attr:`organizer` of the todo.
    recurrence_id: The :attr:`RECURRENCE_ID` of the todo.
    refids: :attr:`~icalendar.Component.refids` of the todo.
    related_to: :attr:`~icalendar.Component.related_to` of the todo.
    request_status: The :attr:`REQUEST_STATUS` of the todo.
    sequence: The :attr:`sequence` of the todo.
    stamp: The :attr:`~icalendar.Component.DTSTAMP` of the todo.
        If None, this is set to the current time.
    start: The :attr:`start` of the todo.
    status: The :attr:`status` of the todo.
    subcomponents: The subcomponents of the todo.
    summary: The :attr:`summary` of the todo.
    uid: The :attr:`uid` of the todo.
        If None, this is set to a new :func:`uuid.uuid4`.
    url: The :attr:`url` of the todo.

Returns:
    :class:`Todo`

Raises:
    ~error.InvalidCalendar: If the content is not valid
        according to :rfc:`5545`.

.. warning:: As time progresses, we will be stricter with the validation.
)	r�   rƒ   r…   r   r†   rŒ   r‹   r€   r‘   )ÚsuperÚnewÚ_utc_nowr’   r„   ÚuuidÚuuid4r“   rP   rW   r~   r|   rŽ   r}   r”   rˆ   r‡   r‰   r�   r�   ÚREQUEST_STATUSr{   r‚   ry   Ú_validate_newÚ_validate_start_and_end)Úclsr{   r|   r}   r~   r   r€   r�   r‚   rƒ   r„   rW   r…   r†   r‡   rˆ   r‰   rŠ   r‹   rŒ   r�   rŽ   r�   rP   r�   r‘   r’   r“   r”   ÚtodoÚ	__class__s   "&&&&&&&&&&&&&&&&&&&&&&&&&&&& €rB   r—   ÚTodo.newA  sú   ø€ ôZ ‘W‘[Ø Ò,‘%°#·,±,³.ØØ'ØØØ!ØØØ'ð !ó 

ˆð ˆŒØ&ˆÔØš/‘3¬t¯zªz«|ˆŒØˆŒ
ØˆŒØˆŒ
Ø$ˆŒØ ˆŒØ,ˆÔØˆŒØ"ˆŒØ ˆŒØ ˆŒØ ˆŒØˆŒØ,ˆÔØ"ˆŒØ&ˆÔØ*ˆÔà××ÐØ×'Ñ'¨¨sÔ3ØˆrE   c               ó    € V ^8„  d   QhRRRR/# )rH   ÚnameÚstrrI   r9   rK   )rL   s   "rB   rM   rN   ²  s   € ÷ 9ñ 9˜3ð 9¨tñ 9rE   c                ó8   € V P                  \        RV4      4      # )z,Return the todo example with the given name.Útodos)Ú	from_icalr.   )rž   r£   s   &&rB   ÚexampleÚTodo.example±  s   € ð �}‰}œ[¨°$Ó7Ó8Ð8rE   )r;   r<   )ÚUIDÚDTSTAMP)r4   ÚCOLORÚ	COMPLETEDÚCREATEDÚDESCRIPTIONr«   r;   ÚGEOzLAST-MODIFIEDÚLOCATIONÚ	ORGANIZERzPERCENT-COMPLETEÚPRIORITYzRECURRENCE-IDÚSEQUENCEr5   ÚSUMMARYrª   ÚURLr<   ÚDURATION)r<   r·   )ÚATTACHÚATTENDEEÚ
CATEGORIESÚCOMMENTÚCONTACTÚEXDATEzREQUEST-STATUSÚRELATEDÚ	RESOURCESÚRDATEÚRRULE)rP   )N)NrK   NNNNNNNNNNNNNNNNNNNNNNNNNN)r¨   )Rrg   Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r£   ÚrequiredÚ
singletonsÚ	exclusiveÚmultipler   r   r   r;   r<   Úpropertyr!   r"   r   r    rL   r·   rC   rP   ÚsetterrW   r]   rh   rn   rr   r   ÚX_MOZ_SNOOZE_TIMEr   ÚX_MOZ_LASTACKrw   r   r~   r%   rŽ   r   r|   r#   Úrdatesr   Úexdatesr$   Úrrulesr   r›   r+   r“   r*   r’   r   r„   r   r}   r,   r”   r   rˆ   r   r‡   r   r‰   r   r�   r)   r�   r   r{   r   Úimagesr   r‚   Úicalendar.attrry   Úclassmethodr—   r¨   Ú__static_attributes__Ú__classcell__)r    s   @rB   r9   r9   =   sà  ø† ñ)ðV €Dð€Hð€Jð.€Ið€Hñ %ØØØ	�4ÐØØYó€Gñ !ØØØ	�4ÐØØjó€Cñ ØØØØ&×-Ò-¸Ô@ó	€HòWð ô(ó ð(ð. ‡\�\ôó ðð ô-ó ð-ð 	‡Z�Zôó ðð ô+ó ð+ð  ‡_�_ô1ó ð1÷	A÷
;÷	7ð 3ÐØ*€Màôó ðð" €EØ €HØ$€JØ€FØ€GØ€FØ,€NØ
€CØ€GØ&€KØ#€NØ
€CØ"€IØ €HØ €HØ €HØ€FØ"€IØ€FØ&€KÝ,à÷mñ mó ðmð^ ö9ó ö9rE   r9   )DrÅ   Ú
__future__r   r™   r   r   r   Útypingr   r   rÒ   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   Úicalendar.cal.componentr-   Úicalendar.cal.examplesr.   Úcollections.abcr/   r0   rv   r2   Úicalendar.compatibilityr3   Úicalendar.enumsr4   r5   Úicalendar.propr6   Úicalendar.prop.conferencer7   r9   Ú__all__rK   rE   rB   Ú<module>rà      s   ðÙ "å "ã ß .Ñ .ß )÷&÷ &÷ &÷ &÷ &÷ &÷ &÷ &÷ &õ &õN .Ý .çß2å'Ý,ß-Ý*Ý4ôw9ˆ9ô w9ðt ˆ(‚rE   