Internet Calendaring and Scheduling (iCalendar) for Python
 
 
Go to file
Nicco Kunzmann 4eb94f5b88 address commit
https://github.com/collective/icalendar/pull/623#discussion_r1632213752
2024-06-10 12:29:55 +01:00
.github Merge branch 'master' into niccokunzmann-patch-3 2024-04-16 12:55:02 +02:00
docs Make tests run for pypy3, too 2024-06-07 18:26:53 +01:00
src/icalendar Make tests run for pypy3, too 2024-06-07 18:26:53 +01:00
.gitignore Add scripts and tests to reproduce fuzzer errors in pytest 2023-11-21 14:53:47 +00:00
.readthedocs.yml Update readthedocs config 2023-08-30 08:40:09 +01:00
CHANGES.rst include suggestion 2024-06-10 12:14:02 +01:00
CONTRIBUTING.rst update links (#378) 2022-08-17 00:31:15 +03:00
LICENSE.rst Clean up trailing and leading white space throughout project (#247) 2017-10-23 14:15:27 +02:00
MANIFEST.in Added ics exclude to MANIFEST.in 2023-11-06 20:22:42 -05:00
README.rst address commit 2024-06-10 12:29:55 +01:00
bootstrap.py update links (#378) 2022-08-17 00:31:15 +03:00
buildout.cfg Whitespaces cleanup 2014-08-26 00:55:26 +02:00
requirements_docs.txt Revert "fix Sphinx build" 2022-09-26 17:34:52 +01:00
setup.cfg Do not create a universal wheel for the release. 2022-10-19 09:29:58 +02:00
setup.py Add tzdata package to add-on timezones 2024-06-05 11:59:40 +01:00
tox.ini Make documentation build under Python 3.12 2024-06-07 16:36:59 +01:00

README.rst

==========================================================
Internet Calendaring and Scheduling (iCalendar) for Python
==========================================================

The `icalendar`_ package is a `RFC 5545`_ compatible parser/generator for iCalendar
files.

----

:Homepage: https://icalendar.readthedocs.io
:Code: https://github.com/collective/icalendar
:Mailing list: https://github.com/collective/icalendar/issues
:Dependencies: `python-dateutil`_ and `pytz`_.
:Compatible with: Python 2.7 and 3.4+
:License: `BSD`_

----

.. image:: https://badge.fury.io/py/icalendar.svg
   :target: https://pypi.org/project/icalendar/
   :alt: Python Package Version on PyPI

.. image:: https://img.shields.io/pypi/dm/icalendar.svg
   :target: https://pypi.org/project/icalendar/#files
   :alt: Downloads from PyPI

.. image:: https://img.shields.io/github/actions/workflow/status/collective/icalendar/tests.yml?branch=master&label=master&logo=github
    :target: https://github.com/collective/icalendar/actions/workflows/tests.yml?query=branch%3Amaster
    :alt: GitHub Actions build status for master

.. image:: https://img.shields.io/github/actions/workflow/status/collective/icalendar/tests.yml?branch=4.x&label=4.x&logo=github
    :target: https://github.com/collective/icalendar/actions/workflows/tests.yml?query=branch%3A4.x++
    :alt: GitHub Actions build status for 4.x

.. image:: https://readthedocs.org/projects/icalendar/badge/?version=latest
    :target: https://icalendar.readthedocs.io/en/latest/?badge=latest
    :alt: Documentation Status

.. _`icalendar`: https://pypi.org/project/icalendar/
.. _`RFC 5545`: https://www.ietf.org/rfc/rfc5545.txt
.. _`python-dateutil`: https://github.com/dateutil/dateutil/
.. _`pytz`: https://pypi.org/project/pytz/
.. _`BSD`: https://github.com/collective/icalendar/issues/2

Quick Guide
-----------

To **install** the package, run::

    pip install icalendar

You can open an ``.ics`` file and see all the events::

  >>> import icalendar
  >>> path_to_ics_file = "src/icalendar/tests/calendars/example.ics"
  >>> with open(path_to_ics_file) as f:
  ...     calendar = icalendar.Calendar.from_ical(f.read())
  >>> for event in calendar.walk('VEVENT'):
  ...     print(event.get("SUMMARY"))
  New Year's Day
  Orthodox Christmas
  International Women's Day

Using this package, you can also create calendars from scratch or edit existing ones.

Versions and Compatibility
--------------------------

``icalendar`` is a critical project used by many. It has been there for a long time and maintaining
long-term compatibility with projects conflicts partially with providing and using the features that
the latest Python versions bring.

Since we pour more `effort into maintaining and developing icalendar <https://github.com/collective/icalendar/discussions/360>`__,
this is an overview of the versions:

Version 6
~~~~~~~~~

Version 6 of ``icalendar`` switches the timezone implementation to ``zoneinfo``.

    >>> dt = icalendar.Calendar.example("timezoned").walk("VEVENT")[0]["DTSTART"].dt
    >>> dt.tzinfo
    ZoneInfo(key='Europe/Vienna')

If you would like to continue to use ``pytz`` and receive the latest updates, you
can switch back:

    >>> icalendar.use_pytz()
    >>> dt = icalendar.Calendar.example("timezoned").walk("VEVENT")[0]["DTSTART"].dt
    >>> dt.tzinfo
    <DstTzInfo 'Europe/Vienna' CET+1:00:00 STD>

`Branch master <https://github.com/collective/icalendar/>`_ with the compatibility to Python versions ``3.7+`` and ``PyPy3``.
We expect the ``master`` branch with versions ``6+`` to receive the latest updates and features.

Version 5
~~~~~~~~~

Version 5 uses only the ``pytz`` timezone implementation, and not ``zoneinfo``.
No updates will be released for this.
Please use version 6 and switch to use ``pytz`` as documented above.

Version 4
~~~~~~~~~

Version 4 is on `Branch 4.x <https://github.com/collective/icalendar/tree/4.x>`__ with maximum compatibility to Python versions ``2.7`` and ``3.4+``, ``PyPy2`` and ``PyPy3``.
The ``4.x`` branch only receives security and bug fixes if someone makes the effort.
We recommend migrating to later Python versions and also providing feedback if you depend on the ``4.x`` features.

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.
* `recurring-ical-events <https://pypi.org/project/recurring-ical-events/>`_. Library to query an ``ICalendar`` object for events happening at a certain date or within a certain time.
* `x-wr-timezone <https://pypi.org/project/x-wr-timezone/>`_. Library to make ``ICalendar`` objects and files using the non-standard ``X-WR-TIMEZONE`` compliant with the standard (RFC 5545).