icalendar/README.rst

195 wiersze
7.0 KiB
ReStructuredText
Czysty Zwykły widok Historia

2011-08-17 21:40:23 +00:00
==========================================================
Internet Calendaring and Scheduling (iCalendar) for Python
==========================================================
The `icalendar`_ package is a :rfc:`5545` compatible parser/generator for iCalendar
2017-11-08 13:00:36 +00:00
files.
2011-08-17 21:40:23 +00:00
----
2017-06-25 02:54:04 +00:00
:Homepage: https://icalendar.readthedocs.io
:Community Discussions: https://github.com/collective/icalendar/discussions
:Issue Tracker: https://github.com/collective/icalendar/issues
2017-06-25 02:54:04 +00:00
:Code: https://github.com/collective/icalendar
:Dependencies: `python-dateutil`_ and `tzdata`_.
:License: `BSD`_
----
2011-08-17 21:40:23 +00:00
.. image:: https://badge.fury.io/py/icalendar.svg
:target: https://pypi.org/project/icalendar/
:alt: Python Package Version on PyPI
2024-06-22 17:33:37 +00:00
.. image:: https://img.shields.io/pypi/pyversions/icalendar
:target: https://pypi.org/project/icalendar/
:alt: PyPI - Python Version
.. image:: https://img.shields.io/pypi/dm/icalendar.svg
:target: https://pypi.org/project/icalendar/#files
:alt: Downloads from PyPI
2024-06-20 13:27:30 +00:00
.. image:: https://img.shields.io/github/actions/workflow/status/collective/icalendar/tests.yml?branch=main&label=main&logo=github
:target: https://github.com/collective/icalendar/actions/workflows/tests.yml?query=branch%3Amain
:alt: GitHub Actions build status for main
2022-08-13 12:04:13 +00:00
.. image:: https://readthedocs.org/projects/icalendar/badge/?version=latest
:target: https://icalendar.readthedocs.io/en/latest/?badge=latest
:alt: Documentation Status
2024-06-28 12:51:55 +00:00
.. image:: https://coveralls.io/repos/github/collective/icalendar/badge.svg
:target: https://coveralls.io/github/collective/icalendar
:alt: Test Coverage
.. _`icalendar`: https://pypi.org/project/icalendar/
.. _`python-dateutil`: https://github.com/dateutil/dateutil/
.. _`tzdata`: https://pypi.org/project/tzdata/
.. _`BSD`: https://github.com/collective/icalendar/issues/2
Quick start guide
2024-07-03 14:50:47 +00:00
=================
2024-06-19 10:25:02 +00:00
``icalendar`` enables you to **create**, **inspect** and **modify**
calendaring information with Python.
To **install** the package, run::
pip install icalendar
2024-06-19 10:25:02 +00:00
Inspect Files
2024-07-03 14:50:47 +00:00
-------------
2024-06-19 10:25:02 +00:00
2024-09-29 21:04:42 +00:00
You can open an ``.ics`` file and see all the events:
.. code:: python
>>> import icalendar
2024-06-19 10:25:02 +00:00
>>> from pathlib import Path
>>> ics_path = Path("src/icalendar/tests/calendars/example.ics")
>>> calendar = icalendar.Calendar.from_ical(ics_path.read_bytes())
>>> for event in calendar.events:
... print(event.get("SUMMARY"))
New Year's Day
Orthodox Christmas
International Women's Day
2024-06-19 10:25:02 +00:00
Modify Content
2024-07-03 14:50:47 +00:00
--------------
2024-06-19 10:25:02 +00:00
Such a calendar can then be edited and saved again.
.. code:: python
>>> calendar.calendar_name = "My Modified Calendar" # modify
>>> print(calendar.to_ical()[:121]) # save modification
2024-06-19 10:25:02 +00:00
BEGIN:VCALENDAR
VERSION:2.0
PRODID:collective/icalendar
CALSCALE:GREGORIAN
METHOD:PUBLISH
NAME:My Modified Calendar
2024-06-19 10:25:02 +00:00
Create Events, TODOs, Journals, Alarms, ...
2024-07-03 14:50:47 +00:00
-------------------------------------------
2024-06-19 10:25:02 +00:00
``icalendar`` supports the creation and parsing of all kinds of objects
in the iCalendar (:rfc:`5545`) standard.
2024-06-19 10:25:02 +00:00
.. code:: python
>>> icalendar.Event() # events
VEVENT({})
>>> icalendar.FreeBusy() # free/busy times
VFREEBUSY({})
>>> icalendar.Todo() # Todo list entries
VTODO({})
>>> icalendar.Alarm() # Alarms e.g. for events
VALARM({})
>>> icalendar.Journal() # Journal entries
VJOURNAL({})
Have a look at `more examples
<https://icalendar.readthedocs.io/en/latest/usage.html>`_.
Use timezones of your choice
2024-07-03 14:50:47 +00:00
----------------------------
2024-06-19 10:25:02 +00:00
With ``icalendar``, you can localize your events to take place in different
timezones.
``zoneinfo``, ``dateutil.tz`` and ``pytz`` are compatible with ``icalendar``.
This example creates an event that uses all of the timezone implementations
with the same result:
.. code:: python
>>> import pytz, zoneinfo, dateutil.tz # timezone libraries
>>> import datetime, icalendar
>>> e = icalendar.Event()
>>> tz = dateutil.tz.tzstr("Europe/London")
>>> e["X-DT-DATEUTIL"] = icalendar.vDatetime(datetime.datetime(2024, 6, 19, 10, 1, tzinfo=tz))
>>> tz = pytz.timezone("Europe/London")
>>> e["X-DT-USE-PYTZ"] = icalendar.vDatetime(datetime.datetime(2024, 6, 19, 10, 1, tzinfo=tz))
>>> tz = zoneinfo.ZoneInfo("Europe/London")
>>> e["X-DT-ZONEINFO"] = icalendar.vDatetime(datetime.datetime(2024, 6, 19, 10, 1, tzinfo=tz))
>>> print(e.to_ical()) # the libraries yield the same result
BEGIN:VEVENT
X-DT-DATEUTIL;TZID=Europe/London:20240619T100100
X-DT-USE-PYTZ;TZID=Europe/London:20240619T100100
X-DT-ZONEINFO;TZID=Europe/London:20240619T100100
END:VEVENT
Version 6 with zoneinfo
2024-07-03 14:50:47 +00:00
-----------------------
2024-06-07 16:49:41 +00:00
2024-06-07 17:04:46 +00:00
Version 6 of ``icalendar`` switches the timezone implementation to ``zoneinfo``.
2024-06-19 10:25:02 +00:00
This only affects you if you parse ``icalendar`` objects with ``from_ical()``.
The functionality is extended and is tested since 6.0.0 with both timezone
implementations ``pytz`` and ``zoneinfo``.
2024-06-19 10:25:02 +00:00
By default and since 6.0.0, ``zoneinfo`` timezones are created.
.. code:: python
2024-06-07 16:49:41 +00:00
2025-04-29 17:10:20 +00:00
>>> dt = icalendar.Calendar.example("timezoned").events[0].start
2024-06-07 16:49:41 +00:00
>>> dt.tzinfo
2024-06-07 17:26:53 +00:00
ZoneInfo(key='Europe/Vienna')
2024-06-07 16:49:41 +00:00
2024-07-01 22:24:47 +00:00
If you would like to continue to receive ``pytz`` timezones in parse results,
you can receive all the latest updates, and switch back to earlier behavior:
2024-06-19 10:25:02 +00:00
.. code:: python
2024-06-07 16:49:41 +00:00
>>> icalendar.use_pytz()
2025-04-29 17:10:20 +00:00
>>> dt = icalendar.Calendar.example("timezoned").events[0].start
2024-06-07 16:49:41 +00:00
>>> dt.tzinfo
<DstTzInfo 'Europe/Vienna' CET+1:00:00 STD>
Version 6 is on `branch main <https://github.com/collective/icalendar/>`_.
2024-10-13 17:24:02 +00:00
It is compatible with Python versions 3.8 - 3.13, and PyPy3.
We expect the ``main`` branch with versions ``6+`` to receive the latest updates and features.
2024-06-07 17:26:53 +00:00
Related projects
================
* `icalevents <https://github.com/irgangla/icalevents>`_. It is built on top of icalendar and allows you to query iCal files and get the events happening on specific dates. It manages recurrent events as well.
2024-10-16 11:40:32 +00:00
* `recurring-ical-events <https://pypi.org/project/recurring-ical-events/>`_. Library to query an ``icalendar.Calendar`` object for events and other components happening at a certain date or within a certain time.
* `x-wr-timezone <https://pypi.org/project/x-wr-timezone/>`_. Library and command line tool to make ``icalendar.Calendar`` objects and files from Google Calendar (using the non-standard ``X-WR-TIMEZONE`` property) compliant with the standard (:rfc:`5545`).
* `ics-query <http://pypi.org/project/ics-query>`_. Command line tool to query iCalendar files for occurrences of events and other components.
2025-01-24 12:55:53 +00:00
* `icalendar-compatibility <https://icalendar-compatibility.readthedocs.io/en/latest/>`_ - access to event data compatible with RFC5545 and different implementations
Further Reading
===============
You can find out more about this project:
* `Contributing`_
* `Changelog`_
* `License`_
.. _`Contributing`: https://icalendar.readthedocs.io/en/latest/contributing.html
.. _`Changelog`: https://icalendar.readthedocs.io/en/latest/changelog.html
.. _`License`: https://icalendar.readthedocs.io/en/latest/license.html