icalendar.cal.calendar module#
RFC 5545 iCalendar component.
- class icalendar.cal.calendar.Calendar(*args, **kwargs)[source]#
Bases:
ComponentThe "VCALENDAR" object is a collection of calendar information. This information can include a variety of components, such as "VEVENT", "VTODO", "VJOURNAL", "VFREEBUSY", "VTIMEZONE", or any other type of calendar component.
Examples
Create a new Calendar:
>>> from icalendar import Calendar >>> calendar = Calendar.new(name="My Calendar") >>> print(calendar.calendar_name) My Calendar
Set keys to upper for initial dict.
- property CREATED: datetime | None#
The CREATED property. datetime in UTC
All values will be converted to a datetime in UTC.
CREATED specifies the date and time that the calendar information was created by the calendar user agent in the calendar store.
- Conformance:
The property can be specified once in "VEVENT", "VTODO", or "VJOURNAL" calendar components. The value MUST be specified as a date with UTC time.
- property DTSTAMP: datetime | None#
The DTSTAMP property. datetime in UTC
All values will be converted to a datetime in UTC. RFC 5545:
Conformance: This property MUST be included in the "VEVENT", "VTODO", "VJOURNAL", or "VFREEBUSY" calendar components.
Description: In the case of an iCalendar object that specifies a "METHOD" property, this property specifies the date and time that the instance of the iCalendar object was created. In the case of an iCalendar object that doesn't specify a "METHOD" property, this property specifies the date and time that the information associated with the calendar component was last revised in the calendar store.
The value MUST be specified in the UTC time format.
In the case of an iCalendar object that doesn't specify a "METHOD" property, this property is equivalent to the "LAST-MODIFIED" property.
- property LAST_MODIFIED: datetime | None#
The LAST-MODIFIED property. datetime in UTC
All values will be converted to a datetime in UTC. RFC 5545:
Purpose: This property specifies the date and time that the information associated with the calendar component was last revised in the calendar store.
Note: This is analogous to the modification date and time for a file in the file system.
Conformance: This property can be specified in the "VEVENT", "VTODO", "VJOURNAL", or "VTIMEZONE" calendar components.
- add(name, value, parameters=None, encode=True)#
Add a property.
- Parameters:
name (string) – Name of the property.
value (Python native type or icalendar property type.) – Value of the property. Either of a basic Python type of any of the icalendar's own property types.
parameters (Dictionary) – Property parameter dictionary for the value. Only available, if encode is set to True.
encode (Boolean) – True, if the value should be encoded to one of icalendar's own property types (Fallback is "vText") or False, if not.
- Returns:
None
- add_component(component)#
Add a subcomponent to this component.
- add_missing_timezones(first_date=datetime.date(1970, 1, 1), last_date=datetime.date(2038, 1, 1))[source]#
Add all missing VTIMEZONE components.
This adds all the timezone components that are required. VTIMEZONE components are inserted at the beginning of the calendar to ensure they appear before other components that reference them.
Note
Timezones that are not known will not be added.
- Parameters:
>>> from icalendar import Calendar, Event >>> from datetime import datetime >>> from zoneinfo import ZoneInfo >>> calendar = Calendar() >>> event = Event() >>> calendar.add_component(event) >>> event.start = datetime(1990, 10, 11, 12, tzinfo=ZoneInfo("Europe/Berlin")) >>> calendar.timezones [] >>> calendar.add_missing_timezones() >>> calendar.timezones[0].tz_name 'Europe/Berlin' >>> calendar.get_missing_tzids() # check that all are added set()
- property availabilities: list[Availability]#
All
Availabilitycomponents in the calendar.This is a shortcut to get all availabilities. Modifications do not change the calendar. Use
Component.add_component().
- property calendar_name: str | None#
This property specifies the name of the calendar.
This implements RFC 7986
NAMEandX-WR-CALNAME.- Property Parameters:
IANA, non-standard, alternate text representation, and language property parameters can be specified on this property.
- Conformance:
This property can be specified multiple times in an iCalendar object. However, each property MUST represent the name of the calendar in a different language.
- Description:
This property is used to specify a name of the iCalendar object that can be used by calendar user agents when presenting the calendar data to a user. Whilst a calendar only has a single name, multiple language variants can be specified by including this property multiple times with different "LANGUAGE" parameter values on each.
Example
Below, we set the name of the calendar.
>>> from icalendar import Calendar >>> calendar = Calendar() >>> calendar.calendar_name = "My Calendar" >>> print(calendar.to_ical()) BEGIN:VCALENDAR NAME:My Calendar END:VCALENDAR
- property calscale: str#
CALSCALE defines the calendar scale used for the calendar information specified in the iCalendar object.
- Compatibility:
RFC 7529 makes the case that GREGORIAN stays the default and other calendar scales are implemented on the RRULE.
- Conformance:
This property can be specified once in an iCalendar object. The default value is "GREGORIAN".
- Description:
This memo is based on the Gregorian calendar scale. The Gregorian calendar scale is assumed if this property is not specified in the iCalendar object. It is expected that other calendar scales will be defined in other specifications or by future versions of this memo.
- canonical_order = ('VERSION', 'PRODID', 'CALSCALE', 'METHOD', 'DESCRIPTION', 'X-WR-CALDESC', 'NAME', 'X-WR-CALNAME')#
- property categories: list[str]#
This property defines the categories for a component.
- Property Parameters:
IANA, non-standard, and language property parameters can be specified on this property.
- Conformance:
The property can be specified within "VEVENT", "VTODO", or "VJOURNAL" calendar components. Since RFC 7986 it can also be defined on a "VCALENDAR" component.
- Description:
This property is used to specify categories or subtypes of the calendar component. The categories are useful in searching for a calendar component of a particular type and category. Within the "VEVENT", "VTODO", or "VJOURNAL" calendar components, more than one category can be specified as a COMMA-separated list of categories.
Example
Below, we add the categories to an event:
>>> from icalendar import Event >>> event = Event() >>> event.categories = ["Work", "Meeting"] >>> print(event.to_ical()) BEGIN:VEVENT CATEGORIES:Work,Meeting END:VEVENT >>> event.categories.append("Lecture") >>> event.categories == ["Work", "Meeting", "Lecture"] True
Note
At present, we do not take the LANGUAGE parameter into account.
See also
Component.concepts
- clear()#
Remove all items from ordered dict.
- property color: str#
This property specifies a color used for displaying the calendar.
This implements RFC 7986
COLORandX-APPLE-CALENDAR-COLOR. Please note that since RFC 7986, subcomponents can have their own color.- Property Parameters:
IANA and non-standard property parameters can be specified on this property.
- Conformance:
This property can be specified once in an iCalendar object or in
VEVENT,VTODO, orVJOURNALcalendar components.- Description:
This property specifies a color that clients MAY use when presenting the relevant data to a user. Typically, this would appear as the "background" color of events or tasks. The value is a case-insensitive color name taken from the CSS3 set of names, defined in Section 4.3 of W3C.REC-css3-color-20110607.
Example
"turquoise","#ffffff">>> from icalendar import Calendar >>> calendar = Calendar() >>> calendar.color = "black" >>> print(calendar.to_ical()) BEGIN:VCALENDAR COLOR:black END:VCALENDAR
- property comments: list[str]#
COMMENT is used to specify a comment to the calendar user.
- Purpose:
This property specifies non-processing information intended to provide a comment to the calendar user.
- Conformance:
In RFC 5545, this property can be specified multiple times in "VEVENT", "VTODO", "VJOURNAL", and "VFREEBUSY" calendar components as well as in the "STANDARD" and "DAYLIGHT" sub-components. In RFC 7953, this property can be specified multiple times in "VAVAILABILITY" and "VAVAILABLE".
- Property Parameters:
IANA, non-standard, alternate text representation, and language property parameters can be specified on this property.
- property concepts: list[vUri]#
CONCEPT
- Purpose:
CONCEPT defines the formal categories for a calendar component.
- Conformance:
Since RFC 9253, this property can be specified zero or more times in any iCalendar component.
- Description:
This property is used to specify formal categories or classifications of the calendar component. The values are useful in searching for a calendar component of a particular type and category.
This categorization is distinct from the more informal "tagging" of components provided by the existing CATEGORIES property. It is expected that the value of the CONCEPT property will reference an external resource that provides information about the categorization.
In addition, a structured URI value allows for hierarchical categorization of events.
Possible category resources are the various proprietary systems, for example, the Library of Congress, or an open source of categorization data.
Examples
The following is an example of this property. It points to a server acting as the source for the calendar object.
CONCEPT:https://example.com/event-types/arts/music
See also
Component.categories
- content_line(name, value, sorted=True)#
Returns property as content line.
- content_lines(sorted=True)#
Converts the Component and subcomponents into content lines.
- copy(recursive=False)#
Copy the component.
- Parameters:
recursive (
bool) – IfTrue, this creates copies of the component, its subcomponents, and all its properties. IfFalse, this only creates a shallow copy of the component.- Return type:
- Returns:
A copy of the component.
Examples
Create a shallow copy of a component:
>>> from icalendar import Event >>> event = Event.new(description="Event to be copied") >>> event_copy = event.copy() >>> str(event_copy.description) 'Event to be copied'
Shallow copies lose their subcomponents:
>>> from icalendar import Calendar >>> calendar = Calendar.example() >>> len(calendar.subcomponents) 3 >>> calendar_copy = calendar.copy() >>> len(calendar_copy.subcomponents) 0
A recursive copy also copies all the subcomponents:
>>> full_calendar_copy = calendar.copy(recursive=True) >>> len(full_calendar_copy.subcomponents) 3 >>> full_calendar_copy.events[0] == calendar.events[0] True >>> full_calendar_copy.events[0] is calendar.events[0] False
- property created: datetime#
Datetime when the information associated with the component was created.
Since
CREATEDis an optional property, this returnsDTSTAMPifCREATEDis not set.
- decoded(name, default=[])#
Returns decoded value of property.
A component maps keys to icalendar property value types. This function returns values compatible to native Python types.
- Return type:
- property description: str | None#
This property specifies the description of the calendar.
This implements RFC 7986
DESCRIPTIONandX-WR-CALDESC.- Conformance:
This property can be specified multiple times in an iCalendar object. However, each property MUST represent the description of the calendar in a different language.
- Description:
This property is used to specify a lengthy textual description of the iCalendar object that can be used by calendar user agents when describing the nature of the calendar data to a user. Whilst a calendar only has a single description, multiple language variants can be specified by including this property multiple times with different "LANGUAGE" parameter values on each.
Example
Below, we add a description to a calendar.
>>> from icalendar import Calendar >>> calendar = Calendar() >>> calendar.description = "This is a calendar" >>> print(calendar.to_ical()) BEGIN:VCALENDAR DESCRIPTION:This is a calendar END:VCALENDAR
- property events: list[Event]#
All event components in the calendar.
This is a shortcut to get all events. Modifications do not change the calendar. Use
Component.add_component().>>> from icalendar import Calendar >>> calendar = Calendar.example() >>> event = calendar.events[0] >>> event.start datetime.date(2022, 1, 1) >>> print(event["SUMMARY"]) New Year's Day
- classmethod example(name='example')[source]#
Return the calendar example with the given name.
- Return type:
- property freebusy: list[FreeBusy]#
All FreeBusy components in the calendar.
This is a shortcut to get all FreeBusy. Modifications do not change the calendar. Use
Component.add_component().
- classmethod from_ical(st, multiple=False)[source]#
Parse iCalendar data into Calendar instances.
Wraps
Component.from_ical()with timezone forward-reference resolution and VTIMEZONE caching.
- classmethod from_jcal(jcal)#
Create a component from a jCal list.
- Parameters:
jcal (
str|list) – jCal list or JSON string according to RFC 7265.- Raises:
JCalParsingError – If the jCal provided is invalid.
JSONDecodeError – If the provided string is not valid JSON.
- Return type:
This reverses
to_json()andto_jcal().The following code parses an example from RFC 7265:
>>> from icalendar import Component >>> jcal = ["vcalendar", ... [ ... ["calscale", {}, "text", "GREGORIAN"], ... ["prodid", {}, "text", "-//Example Inc.//Example Calendar//EN"], ... ["version", {}, "text", "2.0"] ... ], ... [ ... ["vevent", ... [ ... ["dtstamp", {}, "date-time", "2008-02-05T19:12:24Z"], ... ["dtstart", {}, "date", "2008-10-06"], ... ["summary", {}, "text", "Planning meeting"], ... ["uid", {}, "text", "4088E990AD89CB3DBB484909"] ... ], ... [] ... ] ... ] ... ] >>> calendar = Component.from_jcal(jcal) >>> print(calendar.name) VCALENDAR >>> print(calendar.prodid) -//Example Inc.//Example Calendar//EN >>> event = calendar.events[0] >>> print(event.summary) Planning meeting
- classmethod fromkeys(iterable, value=None)#
Create a new ordered dictionary with keys from iterable and values set to value.
- get(key, default=None)#
Get property value with default.
- classmethod get_component_class(name)#
Return a component with this name.
- get_inline(name, decode=1)#
Returns a list of values (split on comma).
- get_missing_tzids()[source]#
The set of missing timezone component tzids.
To create a RFC 5545 compatible calendar, all of these timezones should be added.
- get_used_tzids()[source]#
The set of TZIDs in use.
This goes through the whole calendar to find all occurrences of timezone information like the TZID parameter in all attributes.
>>> from icalendar import Calendar >>> calendar = Calendar.example("timezone_rdate") >>> calendar.get_used_tzids() {'posix/Europe/Vaduz'}
Even if you use UTC, this will not show up.
- ignore_exceptions: ClassVar[bool] = False#
Whether or not to ignore exceptions when parsing.
If
True, and this component can't be parsed, then it will silently ignore it, rather than let the exception propagate upwards.
- property images: list[Image]#
IMAGE specifies an image associated with the calendar or a calendar component.
- Description:
This property specifies an image for an iCalendar object or a calendar component via a URI or directly with inline data that can be used by calendar user agents when presenting the calendar data to a user. Multiple properties MAY be used to specify alternative sets of images with, for example, varying media subtypes, resolutions, or sizes. When multiple properties are present, calendar user agents SHOULD display only one of them, picking one that provides the most appropriate image quality, or display none. The "DISPLAY" parameter is used to indicate the intended display mode for the image. The "ALTREP" parameter, defined in RFC 5545, can be used to provide a "clickable" image where the URI in the parameter value can be "launched" by a click on the image in the calendar user agent.
- Conformance:
This property can be specified multiple times in an iCalendar object or in "VEVENT", "VTODO", or "VJOURNAL" calendar components.
Note
At the present moment, this property is read-only. If you require a setter, please open an issue or a pull request.
- inclusive: ClassVar[tuple[str] | tuple[tuple[str, str]]] = ()#
These properties are inclusive.
In other words, if the first property in the tuple occurs, then the second one must also occur.
Example
('duration', 'repeat')
- is_empty()#
Returns True if Component has no items or subcomponents, else False.
- is_thunderbird()#
Whether this component has attributes that indicate that Mozilla Thunderbird created it.
- Return type:
- items()#
Return a set-like object providing a view on the dict's items.
- keys()#
Return a set-like object providing a view on the dict's keys.
- property last_modified: datetime#
Datetime when the information associated with the component was last revised.
Since
LAST_MODIFIEDis an optional property, this returnsDTSTAMPifLAST_MODIFIEDis not set.
- property links: list[vUri | vUid | vXmlReference]#
LINK properties as a list.
- Purpose:
LINK provides a reference to external information related to a component.
- Property Parameters:
The VALUE parameter is required. Non-standard, link relation type, format type, label, and language parameters can also be specified on this property. The LABEL parameter is defined in RFC 7986.
- Conformance:
This property can be specified zero or more times in any iCalendar component. LINK is specified in RFC 9253. The LINKREL parameter is required.
- Description:
When used in a component, the value of this property points to additional information related to the component. For example, it may reference the originating web server.
This property is a serialization of the model in RFC 8288, where the link target is carried in the property value, the link context is the containing calendar entity, and the link relation type and any target attributes are carried in iCalendar property parameters.
The LINK property parameters map to RFC 8288 attributes as follows:
- LABEL
This parameter maps to the "title" attribute defined in Section 3.4.1 of RFC 8288. LABEL is used to label the destination of a link such that it can be used as a human-readable identifier (e.g., a menu entry) in the language indicated by the LANGUAGE (if present).
- LANGUAGE
This parameter maps to the "hreflang" attribute defined in Section 3.4.1 of RFC 8288. See RFC 5646. Example:
en,de-ch.- LINKREL
This parameter maps to the link relation type defined in Section 2.1 of RFC 8288. See Registered Link Relation Types.
- FMTTYPE
This parameter maps to the "type" attribute defined in Section 3.4.1 of RFC 8288.
There is no mapping for "title*", "anchor", "rev", or "media" RFC 8288.
Examples
The following is an example of this property, which provides a reference to the source for the calendar object.
LINK;LINKREL=SOURCE;LABEL=Venue;VALUE=URI: https://example.com/events
The following is an example of this property, which provides a reference to an entity from which this one was derived. The link relation is a vendor-defined value.
LINK;LINKREL="https://example.com/linkrel/derivedFrom"; VALUE=URI: https://example.com/tasks/01234567-abcd1234.ics
The following is an example of this property, which provides a reference to a fragment of an XML document. The link relation is a vendor-defined value.
LINK;LINKREL="https://example.com/linkrel/costStructure"; VALUE=XML-REFERENCE: https://example.com/xmlDocs/bidFramework.xml #xpointer(descendant::CostStruc/range-to( following::CostStrucEND[1]))
Set a link
icalendar.vUrito the event page:>>> from icalendar import Event, vUri >>> from datetime import datetime >>> link = vUri( ... "http://example.com/event-page", ... params={"LINKREL":"SOURCE"} ... ) >>> event = Event.new( ... start=datetime(2025, 9, 17, 12, 0), ... summary="An Example Event with a page" ... ) >>> event.links = [link] >>> print(event.to_ical()) BEGIN:VEVENT SUMMARY:An Example Event with a page DTSTART:20250917T120000 DTSTAMP:20250517T080612Z UID:d755cef5-2311-46ed-a0e1-6733c9e15c63 LINK;LINKREL="SOURCE":http://example.com/event-page END:VEVENT
- property method: str#
METHOD defines the iCalendar object method associated with the calendar object.
- Description:
When used in a MIME message entity, the value of this property MUST be the same as the Content-Type "method" parameter value. If either the "METHOD" property or the Content-Type "method" parameter is specified, then the other MUST also be specified.
No methods are defined by this specification. This is the subject of other specifications, such as the iCalendar Transport- independent Interoperability Protocol (iTIP) defined by RFC 5546.
If this property is not present in the iCalendar object, then a scheduling transaction MUST NOT be assumed. In such cases, the iCalendar object is merely being used to transport a snapshot of some calendar information; without the intention of conveying a scheduling semantic.
- move_to_end(key, last=True)#
Move an existing element to the end (or beginning if last is false).
Raise KeyError if the element does not exist.
- multiple: ClassVar[tuple[()]] = ('CATEGORIES', 'DESCRIPTION', 'NAME')#
These properties may occur more than once.
- name: ClassVar[str | None] = 'VCALENDAR'#
The name of the component.
This should be defined in each component class.
Example:
VCALENDAR.
- classmethod new(calscale=None, categories=(), color=None, concepts=None, description=None, language=None, last_modified=None, links=None, method=None, name=None, organization=None, prodid=None, refresh_interval=None, refids=None, related_to=None, source=None, subcomponents=None, uid=None, url=None, version='2.0')[source]#
Create a new Calendar with all required properties.
This creates a new Calendar in accordance with RFC 5545 and RFC 7986.
- Parameters:
categories (
Sequence[str]) – Thecategoriesof the calendar.concepts (
list[vUri|str] |str|vUri|None) – Theconceptsof the calendar.description (
str|None) – Thedescriptionof the calendar.language (
str|None) – The language for the calendar. Used to generate localized prodid.last_modified (
date|datetime|None) – Thelast_modifiedof the calendar.links (
str|vUri|vUid|vXmlReference|None|list[str|vUri|vUid|vXmlReference]) – Thelinksof the calendar.name (
str|None) – Thecalendar_nameof the calendar.organization (
str|None) – The organization name. Used to generate prodid if not provided.prodid (
str|None) – Theprodidof the component. If None and organization is provided, generates a prodid in format "-//organization//name//language".refresh_interval (
timedelta|None) – Therefresh_intervalof the calendar.related_to (
None|str|vText|vUri|vUid|list[str|vText|vUri|vUid]) –related_toof the calendar.subcomponents (
Iterable[Component] |None) – The subcomponents of the calendar.uid (
str|UUID|None) – Theuidof the calendar. If None, this is set to a newuuid.uuid4().
- Returns:
- Raises:
InvalidCalendar – If the content is not valid according to RFC 5545.
Warning
As time progresses, we will be stricter with the validation.
- property prodid: str#
PRODID specifies the identifier for the product that created the iCalendar object.
- Conformance:
The property MUST be specified once in an iCalendar object.
- Description:
The vendor of the implementation SHOULD assure that this is a globally unique identifier; using some technique such as an FPI value, as defined in [ISO.9070.1991].
This property SHOULD NOT be used to alter the interpretation of an iCalendar object beyond the semantics specified in this memo. For example, it is not to be used to further the understanding of non- standard properties.
Example
The following is an example of this property. It does not imply that English is the default language.
-//ABC Corporation//NONSGML My Product//EN
- property_items(recursive=True, sorted=True)#
Returns properties in this component and subcomponents as: [(name, value), …]
- property refids: list[str]#
REFID
- Purpose:
REFID acts as a key for associated iCalendar entities.
- Conformance:
Since RFC 9253, this property can be specified zero or more times in any iCalendar component.
- Description:
The value of this property is free-form text that creates an identifier for associated components. All components that use the same REFID value are associated through that value and can be located or retrieved as a group. For example, all of the events in a travel itinerary would have the same REFID value, so as to be grouped together.
Examples
The following is an example of this property.
REFID:itinerary-2014-11-17
Use a REFID to associate several VTODOs:
>>> from icalendar import Todo >>> todo_1 = Todo.new( ... summary="turn off stove", ... refids=["travel", "alps"] ... ) >>> todo_2 = Todo.new( ... summary="pack backpack", ... refids=["travel", "alps"] ... ) >>> todo_1.refids == todo_2.refids True
Note
List modifications do not modify the component.
- property refresh_interval: timedelta | None#
REFRESH-INTERVAL specifies a suggested minimum interval for polling for changes of the calendar data from the original source of that data.
- Conformance:
This property can be specified once in an iCalendar object, consisting of a positive duration of time.
- Description:
This property specifies a positive duration that gives a suggested minimum polling interval for checking for updates to the calendar data. The value of this property SHOULD be used by calendar user agents to limit the polling interval for calendar data updates to the minimum interval specified.
- Raises:
ValueError – When setting a negative duration.
- classmethod register(component_class)#
Register a custom component class.
- Parameters:
component_class (
type[Component]) – Component subclass to register. Must have anameattribute.- Raises:
ValueError – If
component_classhas nonameattribute.ValueError – If a component with this name is already registered.
- Return type:
Examples
Create a custom icalendar component with the name
X-EXAMPLE:>>> from icalendar import Component >>> class XExample(Component): ... name = "X-EXAMPLE" ... def custom_method(self): ... return "custom" >>> Component.register(XExample)
RELATED-TO properties as a list.
- Purpose:
This property is used to represent a relationship or reference between one calendar component and another. RFC 9523 allows URI or UID values and a GAP parameter.
- Value Type:
- Conformance:
Since RFC 5545. this property can be specified in the "VEVENT", "VTODO", and "VJOURNAL" calendar components. Since RFC 9523, this property MAY be specified in any iCalendar component.
- Description (RFC 5545):
The property value consists of the persistent, globally unique identifier of another calendar component. This value would be represented in a calendar component by the "UID" property.
By default, the property value points to another calendar component that has a PARENT relationship to the referencing object. The "RELTYPE" property parameter is used to either explicitly state the default PARENT relationship type to the referenced calendar component or to override the default PARENT relationship type and specify either a CHILD or SIBLING relationship. The PARENT relationship indicates that the calendar component is a subordinate of the referenced calendar component. The CHILD relationship indicates that the calendar component is a superior of the referenced calendar component. The SIBLING relationship indicates that the calendar component is a peer of the referenced calendar component.
Changes to a calendar component referenced by this property can have an implicit impact on the related calendar component. For example, if a group event changes its start or end date or time, then the related, dependent events will need to have their start and end dates changed in a corresponding way. Similarly, if a PARENT calendar component is cancelled or deleted, then there is an implied impact to the related CHILD calendar components. This property is intended only to provide information on the relationship of calendar components. It is up to the target calendar system to maintain any property implications of this relationship.
- Description (RFC 9253):
By default or when VALUE=UID is specified, the property value consists of the persistent, globally unique identifier of another calendar component. This value would be represented in a calendar component by the UID property.
By default, the property value points to another calendar component that has a PARENT relationship to the referencing object. The RELTYPE property parameter is used to either explicitly state the default PARENT relationship type to the referenced calendar component or to override the default PARENT relationship type and specify either a CHILD or SIBLING relationship or a temporal relationship.
The PARENT relationship indicates that the calendar component is a subordinate of the referenced calendar component. The CHILD relationship indicates that the calendar component is a superior of the referenced calendar component. The SIBLING relationship indicates that the calendar component is a peer of the referenced calendar component.
To preserve backwards compatibility, the value type MUST be UID when the PARENT, SIBLING, or CHILD relationships are specified.
The FINISHTOSTART, FINISHTOFINISH, STARTTOFINISH, or STARTTOSTART relationships define temporal relationships, as specified in the RELTYPE parameter definition.
The FIRST and NEXT define ordering relationships between calendar components.
The DEPENDS-ON relationship indicates that the current calendar component depends on the referenced calendar component in some manner. For example, a task may be blocked waiting on the other, referenced, task.
The REFID and CONCEPT relationships establish a reference from the current component to the referenced component. Changes to a calendar component referenced by this property can have an implicit impact on the related calendar component. For example, if a group event changes its start or end date or time, then the related, dependent events will need to have their start and end dates and times changed in a corresponding way. Similarly, if a PARENT calendar component is canceled or deleted, then there is an implied impact to the related CHILD calendar components. This property is intended only to provide information on the relationship of calendar components.
Deletion of the target component, for example, the target of a FIRST, NEXT, or temporal relationship, can result in broken links.
It is up to the target calendar system to maintain any property implications of these relationships.
Examples
RFC 5545 examples of this property:
RELATED-TO:jsmith.part7.19960817T083000.xyzMail@example.com
RELATED-TO:19960401-080045-4000F192713-0052@example.com
RFC 9253 examples of this property:
RELATED-TO;VALUE=URI;RELTYPE=STARTTOFINISH: https://example.com/caldav/user/jb/cal/ 19960401-080045-4000F192713.ics
See also
icalendar.enum.RELTYPE.
- set_inline(name, values, encode=1)#
Converts a list of values into comma separated string and sets value to that.
- singletons: ClassVar[tuple[()]] = ('PRODID', 'VERSION', 'CALSCALE', 'METHOD', 'COLOR')#
These properties must appear only once.
- property source: str#
A URI from where calendar data can be refreshed.
- Description:
This property identifies a location where a client can retrieve updated data for the calendar. Clients SHOULD honor any specified "REFRESH-INTERVAL" value when periodically retrieving data. Note that this property differs from the "URL" property in that "URL" is meant to provide an alternative representation of the calendar data rather than the original location of the data.
- Conformance:
This property can be specified once in an iCalendar object.
Example
The following is an example of this property:
SOURCE;VALUE=URI:https://example.com/holidays.ics
- property stamp: datetime | None#
The DTSTAMP property. datetime in UTC
All values will be converted to a datetime in UTC. RFC 5545:
Conformance: This property MUST be included in the "VEVENT", "VTODO", "VJOURNAL", or "VFREEBUSY" calendar components.
Description: In the case of an iCalendar object that specifies a "METHOD" property, this property specifies the date and time that the instance of the iCalendar object was created. In the case of an iCalendar object that doesn't specify a "METHOD" property, this property specifies the date and time that the information associated with the calendar component was last revised in the calendar store.
The value MUST be specified in the UTC time format.
In the case of an iCalendar object that doesn't specify a "METHOD" property, this property is equivalent to the "LAST-MODIFIED" property.
- property timezones: list[Timezone]#
Return the timezones components in this calendar.
>>> from icalendar import Calendar >>> calendar = Calendar.example("pacific_fiji") >>> [timezone.tz_name for timezone in calendar.timezones] ['custom_Pacific/Fiji']
Note
This is a read-only property.
- to_ical(sorted=True)#
- Parameters:
sorted (
bool) – Whether parameters and properties should be lexicographically sorted.
- to_jcal()#
Convert this component to a jCal object.
- Return type:
- Returns:
jCal object
See also
to_json.In this example, we create a simple VEVENT component and convert it to jCal:
>>> from icalendar import Event >>> from datetime import date >>> from pprint import pprint >>> event = Event.new(summary="My Event", start=date(2025, 11, 22)) >>> pprint(event.to_jcal()) ['vevent', [['dtstamp', {}, 'date-time', '2025-05-17T08:06:12Z'], ['summary', {}, 'text', 'My Event'], ['uid', {}, 'text', 'd755cef5-2311-46ed-a0e1-6733c9e15c63'], ['dtstart', {}, 'date', '2025-11-22']], []]
- to_json()#
Return this component as a jCal JSON string.
- Return type:
- Returns:
JSON string
See also
to_jcal.
- property todos: list[Todo]#
All todo components in the calendar.
This is a shortcut to get all todos. Modifications do not change the calendar. Use
Component.add_component().
- types_factory: ClassVar[TypesFactory] = {'ADR': <class 'icalendar.prop.adr.vAdr'>, 'BINARY': <class 'icalendar.prop.binary.vBinary'>, 'BOOLEAN': <class 'icalendar.prop.boolean.vBoolean'>, 'CAL-ADDRESS': <class 'icalendar.prop.cal_address.vCalAddress'>, 'CATEGORIES': <class 'icalendar.prop.categories.vCategory'>, 'DATE': <class 'icalendar.prop.dt.types.vDDDTypes'>, 'DATE-TIME': <class 'icalendar.prop.dt.types.vDDDTypes'>, 'DATE-TIME-LIST': <class 'icalendar.prop.dt.list.vDDDLists'>, 'DURATION': <class 'icalendar.prop.dt.types.vDDDTypes'>, 'FLOAT': <class 'icalendar.prop.float.vFloat'>, 'GEO': <class 'icalendar.prop.geo.vGeo'>, 'INLINE': <class 'icalendar.prop.inline.vInline'>, 'INTEGER': <class 'icalendar.prop.integer.vInt'>, 'N': <class 'icalendar.prop.n.vN'>, 'ORG': <class 'icalendar.prop.org.vOrg'>, 'PERIOD': <class 'icalendar.prop.dt.period.vPeriod'>, 'RECUR': <class 'icalendar.prop.recur.recur.vRecur'>, 'TEXT': <class 'icalendar.prop.text.vText'>, 'TIME': <class 'icalendar.prop.dt.time.vTime'>, 'UID': <class 'icalendar.prop.uid.vUid'>, 'UNKNOWN': <class 'icalendar.prop.unknown.vUnknown'>, 'URI': <class 'icalendar.prop.uri.vUri'>, 'UTC-OFFSET': <class 'icalendar.prop.dt.utc_offset.vUTCOffset'>, 'XML-REFERENCE': <class 'icalendar.prop.xml_reference.vXmlReference'>}#
- property uid: str#
UID specifies the persistent, globally unique identifier for a component.
We recommend using
uuid.uuid4()to generate new values.- Returns:
The value of the UID property as a string or
""if no value is set.
- Description:
The "UID" itself MUST be a globally unique identifier. The generator of the identifier MUST guarantee that the identifier is unique.
This is the method for correlating scheduling messages with the referenced "VEVENT", "VTODO", or "VJOURNAL" calendar component. The full range of calendar components specified by a recurrence set is referenced by referring to just the "UID" property value corresponding to the calendar component. The "RECURRENCE-ID" property allows the reference to an individual instance within the recurrence set.
This property is an important method for group-scheduling applications to match requests with later replies, modifications, or deletion requests. Calendaring and scheduling applications MUST generate this property in "VEVENT", "VTODO", and "VJOURNAL" calendar components to assure interoperability with other group- scheduling applications. This identifier is created by the calendar system that generates an iCalendar object.
Implementations MUST be able to receive and persist values of at least 255 octets for this property, but they MUST NOT truncate values in the middle of a UTF-8 multi-octet sequence.
RFC 7986 states that UID can be used, for example, to identify duplicate calendar streams that a client may have been given access to. It can be used in conjunction with the "LAST-MODIFIED" property also specified on the "VCALENDAR" object to identify the most recent version of a calendar.
- Conformance:
RFC 5545 states that the "UID" property can be specified on "VEVENT", "VTODO", and "VJOURNAL" calendar components. RFC 7986 modifies the definition of the "UID" property to allow it to be defined in an iCalendar object. RFC 9074 adds a "UID" property to "VALARM" components to allow a unique identifier to be specified. The value of this property can then be used to refer uniquely to the "VALARM" component.
This property can be specified once only.
- Security:
RFC 7986 states that UID values MUST NOT include any data that might identify a user, host, domain, or any other security- or privacy-sensitive information. It is RECOMMENDED that calendar user agents now generate "UID" values that are hex-encoded random Universally Unique Identifier (UUID) values as defined in Sections 4.4 and 4.5 of RFC 4122. You can use the
uuidmodule to generate new UUIDs.- Compatibility:
For Alarms,
X-ALARMUIDis also considered.
Examples
The following is an example of such a property value:
5FC53010-1267-4F8E-BC28-1D7AE55A7C99.Set the UID of a calendar:
>>> from icalendar import Calendar >>> from uuid import uuid4 >>> calendar = Calendar() >>> calendar.uid = uuid4() >>> print(calendar.to_ical()) BEGIN:VCALENDAR UID:d755cef5-2311-46ed-a0e1-6733c9e15c63 END:VCALENDAR
- property url: str#
A Uniform Resource Locator (URL) associated with the iCalendar object.
- Description:
This property may be used in a calendar component to convey a location where a more dynamic rendition of the calendar information associated with the calendar component can be found. This memo does not attempt to standardize the form of the URI, nor the format of the resource pointed to by the property value. If the URL property and Content-Location MIME header are both specified, they MUST point to the same resource.
- Conformance:
This property can be specified once in the "VEVENT", "VTODO", "VJOURNAL", or "VFREEBUSY" calendar components. Since RFC 7986, this property can also be defined on a "VCALENDAR".
Example
The following is an example of this property:
URL:http://example.com/pub/calendars/jsmith/mytime.ics
- validate()[source]#
Validate that the calendar has required properties and components.
This method can be called explicitly to validate a calendar before output.
- Raises:
IncompleteComponent – If the calendar lacks required properties or components.
- values()#
Return an object providing a view on the dict's values.
- property version: str#
VERSION of the calendar specification.
The default is
"2.0"for RFC 5545.- Purpose:
This property specifies the identifier corresponding to the highest version number or the minimum and maximum range of the iCalendar specification that is required in order to interpret the iCalendar object.
- walk(name=None, select=<function Component.<lambda>>)#
Recursively traverses component and subcomponents. Returns sequence of same. If name is passed, only components with name will be returned.