icalendar


Nameicalendar JSON
Version 5.0.12 PyPI version JSON
download
home_pagehttps://github.com/collective/icalendar
SummaryiCalendar parser/generator
upload_time2024-03-19 22:10:44
maintainerNone
docs_urlNone
authorPlone Foundation
requires_python>=3.7
licenseBSD-2-Clause
keywords calendar calendaring ical icalendar event todo journal recurring
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            ==========================================================
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>`__,
we split the project into two:

- `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``.
- `Branch master <https://github.com/collective/icalendar/>`__ with the compatibility to Python versions ``3.7+`` and ``PyPy3``.

We expect the ``master`` branch with versions ``5+`` receive the latest updates and features,
and the ``4.x`` branch the subset of security and bug fixes only.
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).

You want to help and contribute? Perfect!
=========================================

These are some contribution examples
------------------------------------

- Reporting issues to the bugtracker.

- Submitting pull requests from a forked icalendar repo.

- Extending the documentation.

- Sponsor a Sprint (https://plone.org/events/sprints/whatis).


For pull requests, keep this in mind
------------------------------------

- Add a test which proves your fix and make it pass.

- Describe your change in CHANGES.rst

- Add yourself to the docs/credits.rst

Development Setup
-----------------

If you would like to setup icalendar to
contribute changes, the `Installation Section
<https://icalendar.readthedocs.io/en/latest/install.html>`_
should help you further.

Changelog
=========

5.0.12 (2024-03-19)
-------------------

Minor changes:

- Added corpus to fuzzing directory
- Added exclusion of fuzzing corpus in MANIFEST.in
- Augmented fuzzer to optionally convert multiple calendars from a source string
- Add script to convert OSS FUZZ test cases to Python/pytest test cases
- Added additional exception handling of defined errors to fuzzer, to allow fuzzer to explore deeper
- Added more instrumentation to fuzz-harness
- Rename "contributor" to "collaborator" in documentation
- Correct the outdated "icalendar view myfile.ics" command in documentation. #588
- Update GitHub Actions steps versions
- Keep GitHub Actions up to date with GitHub's Dependabot


Breaking changes:

- ...

New features:

- ...

Bug fixes:

- ...
- Fixed index error in cal.py when attempting to pop from an empty stack
- Fixed type error in prop.py when attempting to join strings into a byte-string
- Caught Wrong Date Format in ical_fuzzer to resolve fuzzing coverage blocker

5.0.11 (2023-11-03)
-------------------

Minor changes:

- The cli utility now displays start and end datetimes in the user's local timezone.
  Ref: #561
  [vimpostor]

New features:

- Added fuzzing harnesses, for integration to OSSFuzz.
- icalendar releases are deployed to Github releases
  Fixes: #563
  [jacadzaca]

Bug fixes:

- CATEGORIES field now accepts a string as argument
  Ref: #322
  [jacadzaca]
- Multivalue FREEBUSY property is now parsed properly
  Ref: #27
  [jacadzaca]
- Compare equality and inequality of calendars more completely
  Ref: #570
- Use non legacy timezone name.
  Ref: #567
- Add some compare functions.
  Ref: #568
- Change OSS Fuzz build script to point to harnesses in fuzzing directory
  Ref: #574

5.0.10 (2023-09-26)
-------------------

Bug fixes:

- Component._encode stops ignoring parameters argument on native values, now merges them
  Fixes: #557
  [zocker1999net]

5.0.9 (2023-09-24)
------------------

Bug fixes:

- PERIOD values now set the timezone of their start and end. #556

5.0.8 (2023-09-18)
------------------

Minor changes:

- Update build configuration to build readthedocs. #538
- No longer run the ``plone.app.event`` tests.
- Add documentation on how to parse ``.ics`` files. #152
- Move pip caching into Python setup action.
- Check that issue #165 can be closed.
- Updated about.rst for issue #527
- Avoid ``vText.__repr__`` BytesWarning.

Bug fixes:

- Calendar components are now properly compared
  Ref: #550
  Fixes: #526
  [jacadzaca]

5.0.7 (2023-05-29)
------------------

Bug fixes:

- to_ical() now accepts RRULE BYDAY values>=10 #518


5.0.6 (2023-05-26)
------------------

Minor changes:

- Adjusted duration regex

5.0.5 (2023-04-13)
------------------

Minor changes:

- Added support for BYWEEKDAY in vRecur ref: #268

Bug fixes:

- Fix problem with ORGANIZER in FREE/BUSY #348

5.0.4 (2022-12-29)
------------------

Minor changes:

- Improved documentation
  Ref: #503, #504

Bug fixes:

- vBoolean can now be used as an parameter
  Ref: #501
  Fixes: #500
  [jacadzaca]


5.0.3 (2022-11-23)
------------------

New features:

- vDDDTypes is hashable #487 #492 [niccokunzmann]

Bug fixes:

- vDDDTypes' equality also checks the dt attribute #497 #492 [niccokunzmann]

5.0.2 (2022-11-03)
------------------

Minor changes:

- Refactored cal.py, tools.py and completed remaining minimal refactoring in parser.py. Ref: #481 [pronoym99]
- Calendar.from_ical no longer throws long errors
  Ref: #473
  Fixes: #472
  [jacadzaca]
- Make datetime value shorter by removing the value parameter where possible.
  Fixes: #318
  [jacadzaca], [niccokunzmann]

New features:

- source code in documentation is tested using doctest #445 [niccokunzmann]

Bug fixes:

- broken properties are not added to the parent component
  Ref: #471
  Fixes: #464
  [jacadzaca]

5.0.1 (2022-10-22)
------------------

Minor changes:

- fixed setuptools deprecation warnings [mgorny]

Bug fixes:

- a well-known timezone timezone prefixed with a `/` is treated as if the slash wasn't present
  Ref: #467
  Fixes: #466
  [jacadzaca]

5.0.0 (2022-10-17)
------------------

Minor changes:

- removed deprecated test checks [tuergeist]
- Fix: cli does not support DURATION #354 [mamico]
- Add changelog and contributing to readthedocs documentation #428 [peleccom]
- fixed small typos #323 [rohnsha0]
- unittest to parametrized pytest refactoring [jacadzaca]

Breaking changes:

- Require Python 3.7 as minimum Python version.  [maurits] [niccokunzmann]
- icalendar now takes a ics file directly as an input
- icalendar's CLI utility program's output is different
- Drop Support for Python 3.6. Versions 3.7 - 3.11 are supported and tested.

New features:

- icalendar utility outputs a 'Duration' row
- icalendar can take multiple ics files as an input

Bug fixes:

- Changed tools.UIDGenerator instance methods to static methods
  Ref: #345
  [spralja]
- proper handling of datetime objects with `tzinfo` generated through zoneinfo.ZoneInfo.
  Ref: #334
  Fixes: #333
  [tobixen]
- Timestamps in UTC does not need tzid
  Ref: #338
  Fixes: #335
  [tobixen]
-  add ``__eq__`` to ``icalendar.prop.vDDDTypes`` #391 [jacadzaca]
- Refactor deprecated unittest aliases for Python 3.11 compatibility #330 [tirkarthi]

5.0.0a1 (2022-07-11)
--------------------

Breaking changes:

- Drop support for Python 3.4, 3.5 and PyPy2.  [maurits]

New features:

- Document development setup
  Ref: #358
  [niccokunzmann]

Bug fixes:

- Test with GitHub Actions.  [maurits]

4.1.0 (2022-07-11)
------------------

New features:

- No longer test on Python 3.4, 3.5 and PyPy2, because we cannot get it to work.
  Technically it should still work, it is just no longer tested.
  Do not expect much development on branch 4.x anymore.
  The master branch will be for the remaining Python versions that we support.
  [maurits]

Bug fixes:

- Test with GitHub Actions.  [maurits]

4.0.9 (2021-10-16)
------------------

Bug fixes:

- Fix vCategories for correct en/de coding.
  [thet]

- vDuration property value: Fix changing duration sign after multiple ``to_ical`` calls.
  Ref: #320
  Fixes: #319
  [barlik]


4.0.8 (2021-10-07)
------------------

Bug fixes:

- Support added for Python 3.9 and 3.10 (no code changes needed).

- Replace bare 'except:' with 'except Exception:' (#281)


4.0.7 (2020-09-07)
------------------

Bug fixes:

- fixed rrule handling, re-enabled test_create_america_new_york()


4.0.6 (2020-05-06)
------------------

Bug fixes:

- Use ``vText`` as default type, when convert recurrence definition to ical string. [kam193]


4.0.5 (2020-03-21)
------------------

Bug fixes:

- Fixed a docs issue related to building on Read the Docs [davidfischer]

4.0.4 (2019-11-25)
------------------

Bug fixes:

- Reduce Hypothesis iterations to speed up testing, allowing PRs to pass
  [UniversalSuperBox]


4.0.3 (2018-10-10)
------------------

Bug fixes:

- Categories are comma separated not 1 per line #265. [cleder]
- mark test with mixed timezoneaware and naive datetimes as an expected failure. [cleder]


4.0.2 (2018-06-20)
------------------

Bug fixes:

- Update all pypi.python.org URLs to pypi.org
  [jon.dufresne]


4.0.1 (2018-02-11)
------------------

- Added rudimentary command line interface.
  [jfjlaros]

- Readme, setup and travis updates.
  [jdufresne, PabloCastellano]


4.0.0 (2017-11-08)
------------------

Breaking changes:

- Drop support for Python 2.6 and 3.3.


3.12 (2017-11-07)
-----------------

New features:

- Accept Windows timezone identifiers as valid. #242 [geier]

Bug fixes:

- Fix ResourceWarnings in setup.py when Python warnings are enabled. #244 [jdufresne]

- Fix invalid escape sequences in string and bytes literals. #245 [jdufresne]

- Include license file in the generated wheel package. #243 [jdufresne]

- Fix non-ASCII TZID and TZNAME parameter handling. #238 [clivest]

- Docs: update install instructions. #240 [Ekran]


3.11.7 (2017-08-27)
-------------------

New features:

- added vUTCOffset.ignore_exceptions to allow surpressing of failed TZOFFSET
  parsing (for now this ignores the check for offsets > 24h) [geier]


3.11.6 (2017-08-04)
-------------------

Bug fixes:

- Fix VTIMEZONEs including RDATEs #234.  [geier]


3.11.5 (2017-07-03)
-------------------

Bug fixes:

- added an assertion that VTIMEZONE sub-components' DTSTART must be of type
  DATETIME [geier]

- Fix handling of VTIMEZONEs with subcomponents with the same DTSTARTs and
  OFFSETs but which are of different types  [geier]


3.11.4 (2017-05-10)
-------------------

Bug fixes:

- Don't break on parameter values which contain equal signs, e.g. base64 encoded
  binary data [geier]

- Fix handling of VTIMEZONEs with subcomponents with the same DTSTARTs.
  [geier]


3.11.3 (2017-02-15)
-------------------

Bug fixes:

- Removed ``setuptools`` as a dependency as it was only required by setup.py
  and not by the package.

- Don't split content lines on the unicode ``LINE SEPARATOR`` character
  ``\u2028`` but only on ``CRLF`` or ``LF``.

3.11.2 (2017-01-12)
-------------------

Bug fixes:

- Run tests with python 3.5 and 3.6.
  [geier]

- Allow tests failing with pypy3 on travis.ci.
  [geier]


3.11.1 (2016-12-19)
-------------------

Bug fixes:

- Encode error message before adding it to the stack of collected error messages.


3.11 (2016-11-18)
-----------------

Fixes:

- Successfully test with pypy and pypy3.  [gforcada]

- Minor documentation update.  [tpltnt]


3.10 (2016-05-26)
-----------------

New:

- Updated components description to better comply with RFC 5545.
  Refs #183.
  [stlaz]

- Added PERIOD value type to date types.
  Also fixes incompatibilities described in #184.
  Refs #189.
  [stlaz]

Fixes:

- Fix testsuite for use with ``dateutil>=2.5``.
  Refs #195.
  [untitaker]

- Reintroduce cal.Component.is_broken that was removed with 3.9.2.
  Refs #185.
  [geier]


3.9.2 (2016-02-05)
------------------

New:

- Defined ``test_suite`` in setup.py.
  Now tests can be run via ``python setup.py test``.
  [geier]

Fixes:

- Fixed cal.Component.from_ical() representing an unknown component as one of the known.
  [stlaz]

- Fixed possible IndexError exception during parsing of an ical string.
  [stlaz]

- When doing a boolean test on ``icalendar.cal.Component``, always return ``True``.
  Before it was returning ``False`` due to CaselessDict, if it didn't contain any items.
  [stlaz]

- Fixed date-time being recognized as date or time during parsing.
  Added better error handling to parsing from ical strings.
  [stlaz]

- Added __version__ attribute to init.py.
  [TomTry]

- Documentation fixes.
  [TomTry]

- Pep 8, UTF 8 headers, dict/list calls to literals.
  [thet]


3.9.1 (2015-09-08)
------------------

- Fix ``vPeriod.__repr__``.
  [spacekpe]

- Improve foldline() performance. This improves the foldline performance,
  especially for large strings like base64-encoded inline attachements. In some
  cases (1MB string) from 7 Minutes to less than 20ms for ASCII data and 500ms
  for non-ASCII data. Ref: #163.
  [emfree]


3.9.0 (2015-03-24)
------------------

- Creating timezone objects from VTIMEZONE components.
  [geier]

- Make ``python-dateutil`` a dependency.
  [geier]

- Made RRULE tolerant of trailing semicolons.
  [sleeper]

- Documentation fixes.
  [t-8ch, thet]

3.8.4 (2014-11-01)
------------------

- Add missing BYWEEKNO to recurrence rules.
  [russkel]


3.8.3 (2014-08-26)
------------------

- PERCENT property in VTODO renamed to PERCENT-COMPLETE, according to RFC5545.
  [thomascube]


3.8.2 (2014-07-22)
------------------

- Exclude editor backup files from egg distributions. Fixes #144.
  [thet]


3.8.1 (2014-07-17)
------------------

- The representation of CaselessDicts in 3.8 changed the name attribute of
  Components and therefore broke the external API. This has been fixed.
  [untitaker]


3.8 (2014-07-17)
----------------

- Allow dots in property names (Needed for vCard compatibility). Refs #143.
  [untitaker]

- Change class representation for CaselessDict objects to always include the
  class name or the class' name attribute, if available. Also show
  subcomponents for Component objects.
  [thet]

- Don't use data_encode for CaselessDict class representation but use dict's
  __repr__ method.
  [t-8ch]

- Handle parameters with multiple values, which is needed for vCard 3.0.
  Refs #142.
  [t-8ch]


3.7 (2014-06-02)
----------------

- For components with ``ignore_exceptions`` set to ``True``, mark unparseable
  lines as broken instead rising a ``ValueError``. ``VEVENT`` components have
  ``ignore_exceptions`` set to ``True`` by default. Ref #131. Fixes #104.
  [jkiang13]

- Make ``python-dateutil`` a soft-dependency.
  [boltnev]

- Add optional ``sorted`` parameter to ``Component.to_ical``. Setting it to
  false allows the user to preserve the original property and parameter order.
  Ref #136. Fixes #133.
  [untitaker]

- Fix tests for latest ``pytz``. Don't set ``tzinfo`` directly on datetime
  objects, but use pytz's ``localize`` function. Ref #138.
  [untitaker, thet]

- Remove incorrect use of __all__. We don't encourage using ``from package
  import *`` imports. Fixes #129.
  [eric-wieser]


3.6.2 (2014-04-05)
------------------

- Pep8 and cleanup.
  [lasudry]

3.6.1 (2014-01-13)
------------------

- Open text files referenced by setup.py as utf-8, no matter what the locale
  settings are set to. Fixes #122.
  [sochotnicky]

- Add tox.ini to source tarball, which simplifies testing for in distributions.
  [sochotnicky]


3.6 (2014-01-06)
----------------

- Python3 (3.3+) + Python 2 (2.6+) support [geier]

- Made sure to_ical() always returns bytes [geier]

- Support adding lists to a component property, which value already was a list
  and remove the Component.set method, which was only used by the add method.
  [thet]

- Remove ability to add property parameters via a value's params attribute when
  adding via cal.add (that was only possible for custom value objects and makes
  up a strange API), but support a parameter attribute on cal.add's method
  signature to pass a dictionary with property parameter key/value pairs.
  Fixes #116.
  [thet]

- Backport some of Regebro's changes from his regebro-refactor branch.
  [thet]

- Raise explicit error on another malformed content line case.
  [hajdbo]

- Correctly parse datetime component property values with timezone information
  when parsed from ical strings.
  [untitaker]


3.5 (2013-07-03)
----------------

- Let to_unicode be more graceful for non-unicode strings, as like CMFPlone's
  safe_unicode does it.
  [thet]


3.4 (2013-04-24)
----------------

- Switch to unicode internally. This should fix all en/decoding errors.
  [thet]

- Support for non-ascii parameter values. Fixes #88.
  [warvariuc]

- Added functions to transform chars in string with '\\' + any of r'\,;:' chars
  into '%{:02X}' form to avoid splitting on chars escaped with '\\'.
  [warvariuc]

- Allow seconds in vUTCOffset properties. Fixes #55.
  [thet]

- Let ``Component.decode`` better handle vRecur and vDDDLists properties.
  Fixes #70.
  [thet]

- Don't let ``Component.add`` re-encode already encoded values. This simplifies
  the API, since there is no need explicitly pass ``encode=False``. Fixes #82.
  [thet]

- Rename tzinfo_from_dt to tzid_from_dt, which is what it does.
  [thet]

- More support for dateutil parsed tzinfo objects. Fixes #89.
  [leo-naeka]

- Remove python-dateutil version fix at all. Current python-dateutil has Py3
  and Py2 compatibility.
  [thet]

- Declare the required python-dateutil dependency in setup.py. Fixes #90.
  [kleink]

- Raise test coverage.
  [thet]

- Remove interfaces module, as it is unused.
  [thet]

- Remove ``test_doctests.py``, test suite already created properly in
  ``test_icalendar.py``.
  [rnix]

- Transformed doctests into unittests, Test fixes and cleanup.
  [warvariuc]


3.3 (2013-02-08)
----------------

- Drop support for Python < 2.6.
  [thet]

- Allow vGeo to be instantiated with list and not only tuples of geo
  coordinates. Fixes #83.
  [thet]

- Don't force to pass a list to vDDDLists and allow setting individual RDATE
  and EXDATE values without having to wrap them in a list.
  [thet]

- Fix encoding function to allow setting RDATE and EXDATE values and not to
  have bypass encoding with an icalendar property.
  [thet]

- Allow setting of timezone for vDDDLists and support timezone properties for
  RDATE and EXDATE component properties.
  [thet]

- Move setting of TZID properties to vDDDTypes, where it belongs to.
  [thet]

- Use @staticmethod decorator instead of wrapper function.
  [warvariuc, thet]

- Extend quoting of parameter values to all of those characters: ",;: ’'".
  This fixes an outlook incompatibility with some characters. Fixes: #79,
  Fixes: #81.
  [warvariuc]

- Define VTIMETZONE subcomponents STANDARD and DAYLIGHT for RFC5545 compliance.
  [thet]


3.2 (2012-11-27)
----------------

- Documentation file layout restructuring.
  [thet]

- Fix time support. vTime events can be instantiated with a datetime.time
  object, and do not inherit from datetime.time itself.
  [rdunklau]

- Correctly handle tzinfo objects parsed with dateutil. Fixes #77.
  [warvariuc, thet]

- Text values are escaped correclty. Fixes #74.
  [warvariuc]

- Returned old folding algorithm, as the current implementation fails in some
  cases. Fixes #72, Fixes #73.
  [warvariuc]

- Supports to_ical() on date/time properties for dates prior to 1900.
  [cdevienne]


3.1 (2012-09-05)
----------------

- Make sure parameters to certain properties propagate to the ical output.
  [kanarip]

- Re-include doctests.
  [rnix]

- Ensure correct datatype at instance creation time in ``prop.vCalAddress``
  and ``prop.vText``.
  [rnix]

- Apply TZID parameter to datetimes parsed from RECURRENCE-ID
  [dbstovall]

- Localize datetimes for timezones to avoid DST transition errors.
  [dbstovall]

- Allow UTC-OFFSET property value data types in seconds, which follows RFC5545
  specification.
  [nikolaeff]

- Remove utctz and normalized_timezone methods to simplify the codebase. The
  methods were too tiny to be useful and just used at one place.
  [thet]

- When using Component.add() to add icalendar properties, force a value
  conversion to UTC for CREATED, DTSTART and LAST-MODIFIED. The RFC expects UTC
  for those properties.
  [thet]

- Removed last occurrences of old API (from_string).
  [Rembane]

- Add 'recursive' argument to property_items() to switch recursive listing.
  For example when parsing a text/calendar text including multiple components
  (e.g. a VCALENDAR with 5 VEVENTs), the previous situation required us to look
  over all properties in VEVENTs even if we just want the properties under the
  VCALENDAR component (VERSION, PRODID, CALSCALE, METHOD).
  [dmikurube]

- All unit tests fixed.
  [mikaelfrykholm]


3.0.1b2 (2012-03-01)
--------------------

- For all TZID parameters in DATE-TIME properties, use timezone identifiers
  (e.g. Europe/Vienna) instead of timezone names (e.g. CET), as required by
  RFC5545. Timezone names are used together with timezone identifiers in the
  Timezone components.
  [thet]

- Timezone parsing, issues and test fixes.
  [mikaelfrykholm, garbas, tgecho]

- Since we use pytz for timezones, also use UTC tzinfo object from the pytz
  library instead of own implementation.
  [thet]


3.0.1b1 (2012-02-24)
--------------------

- Update Release information.
  [thet]


3.0
---

- Add API for proper Timezone support. Allow creating ical DATE-TIME strings
  with timezone information from Python datetimes with pytz based timezone
  information and vice versa.
  [thet]

- Unify API to only use to_ical and from_ical and remove string casting as a
  requirement for Python 3 compatibility:
  New: to_ical.
  Old: ical, string, as_string and string casting via __str__ and str.
  New: from_ical.
  Old: from_string.
  [thet]


2.2 (2011-08-24)
----------------

- migration to https://github.com/collective/icalendar using svn2git preserving
  tags, branches and authors.
  [garbas]

- using tox for testing on python 2.4, 2.5, 2.6, 2.6.
  [garbas]

- fixed tests so they pass also under python 2.7.
  [garbas]

- running tests on https://jenkins.plone.org/job/icalendar (only 2.6 for now)
  with some other metrics (pylint, clonedigger, coverage).
  [garbas]

- review and merge changes from https://github.com/cozi/icalendar fork.
  [garbas]

- created sphinx documentation and started documenting development and goals.
  [garbas]

- hook out github repository to https://readthedocs.org service so sphinx
  documentation is generated on each commit (for master). Documentation can be
  visible on: https://icalendar.readthedocs.io/en/latest/
  [garbas]


2.1 (2009-12-14)
----------------

- Fix deprecation warnings about ``object.__init__`` taking no parameters.

- Set the VALUE parameter correctly for date values.

- Long binary data would be base64 encoded with newlines, which made the
  iCalendar files incorrect. (This still needs testing).

- Correctly handle content lines which include newlines.


2.0.1 (2008-07-11)
------------------

- Made the tests run under Python 2.5+

- Renamed the UTC class to Utc, so it would not clash with the UTC object,
  since that rendered the UTC object unpicklable.


2.0 (2008-07-11)
----------------

- EXDATE and RDATE now returns a vDDDLists object, which contains a list
  of vDDDTypes objects. This is do that EXDATE and RDATE can contain
  lists of dates, as per RFC.

  ***Note!***: This change is incompatible with earlier behavior, so if you
  handle EXDATE and RDATE you will need to update your code.

- When createing a vDuration of -5 hours (which in itself is nonsensical),
  the ical output of that was -P1DT19H, which is correct, but ugly. Now
  it's '-PT5H', which is prettier.


1.2 (2006-11-25)
----------------

- Fixed a string index out of range error in the new folding code.


1.1 (2006-11-23)
----------------

- Fixed a bug in caselessdicts popitem. (thanks to Michael Smith
  <msmith@fluendo.com>)

- The RFC 2445 was a bit unclear on how to handle line folding when it
  happened to be in the middle of a UTF-8 character. This has been clarified
  in the following discussion:
  http://lists.osafoundation.org/pipermail/ietf-calsify/2006-August/001126.html
  And this is now implemented in iCalendar. It will not fold in the middle of
  a UTF-8 character, but may fold in the middle of a UTF-8 composing character
  sequence.


1.0 (2006-08-03)
----------------

- make get_inline and set_inline support non ascii codes.

- Added support for creating a python egg distribution.


0.11 (2005-11-08)
-----------------

- Changed component .from_string to use types_factory instead of hardcoding
  entries to 'inline'

- Changed UTC tzinfo to a singleton so the same one is used everywhere

- Made the parser more strict by using regular expressions for key name,
  param name and quoted/unquoted safe char as per the RFC

- Added some tests from the schooltool icalendar parser for better coverage

- Be more forgiving on the regex for folding lines

- Allow for multiple top-level components on .from_string

- Fix vWeekdays, wasn't accepting relative param (eg: -3SA vs -SA)

- vDDDTypes didn't accept negative period (eg: -P30M)

- 'N' is also acceptable as newline on content lines, per RFC


0.10 (2005-04-28)
-----------------

- moved code to codespeak.net subversion.

- reorganized package structure so that source code is under 'src' directory.
  Non-package files remain in distribution root.

- redid doc/.py files as doc/.txt, using more modern doctest. Before they
  were .py files with big docstrings.

- added test.py testrunner, and tests/test_icalendar.py that picks up all
  doctests in source code and doc directory, and runs them, when typing::

    python2.3 test.py

- renamed iCalendar to lower case package name, lowercased, de-pluralized and
  shorted module names, which are mostly implementation detail.

- changed tests so they generate .ics files in a temp directory, not in the
  structure itself.

License
=======

Copyright (c) 2012-2013, Plone Foundation
All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:

 - Redistributions of source code must retain the above copyright notice, this
   list of conditions and the following disclaimer.

 - Redistributions in binary form must reproduce the above copyright notice,
   this list of conditions and the following disclaimer in the documentation
   and/or other materials provided with the distribution.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.




            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/collective/icalendar",
    "name": "icalendar",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.7",
    "maintainer_email": null,
    "keywords": "calendar calendaring ical icalendar event todo journal recurring",
    "author": "Plone Foundation",
    "author_email": "plone-developers@lists.sourceforge.net",
    "download_url": "https://files.pythonhosted.org/packages/40/e7/01b5dd6623fda765e6edd605ef551a44071d3034eb4a252c7f61fb24323b/icalendar-5.0.12.tar.gz",
    "platform": null,
    "description": "==========================================================\nInternet Calendaring and Scheduling (iCalendar) for Python\n==========================================================\n\nThe `icalendar`_ package is a `RFC 5545`_ compatible parser/generator for iCalendar\nfiles.\n\n----\n\n:Homepage: https://icalendar.readthedocs.io\n:Code: https://github.com/collective/icalendar\n:Mailing list: https://github.com/collective/icalendar/issues\n:Dependencies: `python-dateutil`_ and `pytz`_.\n:Compatible with: Python 2.7 and 3.4+\n:License: `BSD`_\n\n----\n\n.. image:: https://badge.fury.io/py/icalendar.svg\n   :target: https://pypi.org/project/icalendar/\n   :alt: Python Package Version on PyPI\n\n.. image:: https://img.shields.io/pypi/dm/icalendar.svg\n   :target: https://pypi.org/project/icalendar/#files\n   :alt: Downloads from PyPI\n\n.. image:: https://img.shields.io/github/actions/workflow/status/collective/icalendar/tests.yml?branch=master&label=master&logo=github\n    :target: https://github.com/collective/icalendar/actions/workflows/tests.yml?query=branch%3Amaster\n    :alt: GitHub Actions build status for master\n\n.. image:: https://img.shields.io/github/actions/workflow/status/collective/icalendar/tests.yml?branch=4.x&label=4.x&logo=github\n    :target: https://github.com/collective/icalendar/actions/workflows/tests.yml?query=branch%3A4.x++\n    :alt: GitHub Actions build status for 4.x\n\n.. image:: https://readthedocs.org/projects/icalendar/badge/?version=latest\n    :target: https://icalendar.readthedocs.io/en/latest/?badge=latest\n    :alt: Documentation Status\n\n.. _`icalendar`: https://pypi.org/project/icalendar/\n.. _`RFC 5545`: https://www.ietf.org/rfc/rfc5545.txt\n.. _`python-dateutil`: https://github.com/dateutil/dateutil/\n.. _`pytz`: https://pypi.org/project/pytz/\n.. _`BSD`: https://github.com/collective/icalendar/issues/2\n\nQuick Guide\n-----------\n\nTo **install** the package, run::\n\n    pip install icalendar\n\nYou can open an ``.ics`` file and see all the events::\n\n  >>> import icalendar\n  >>> path_to_ics_file = \"src/icalendar/tests/calendars/example.ics\"\n  >>> with open(path_to_ics_file) as f:\n  ...     calendar = icalendar.Calendar.from_ical(f.read())\n  >>> for event in calendar.walk('VEVENT'):\n  ...     print(event.get(\"SUMMARY\"))\n  New Year's Day\n  Orthodox Christmas\n  International Women's Day\n\nUsing this package, you can also create calendars from scratch or edit existing ones.\n\nVersions and Compatibility\n--------------------------\n\n``icalendar`` is a critical project used by many. It has been there for a long time and maintaining\nlong-term compatibility with projects conflicts partially with providing and using the features that\nthe latest Python versions bring.\n\nSince we pour more `effort into maintaining and developing icalendar <https://github.com/collective/icalendar/discussions/360>`__,\nwe split the project into two:\n\n- `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``.\n- `Branch master <https://github.com/collective/icalendar/>`__ with the compatibility to Python versions ``3.7+`` and ``PyPy3``.\n\nWe expect the ``master`` branch with versions ``5+`` receive the latest updates and features,\nand the ``4.x`` branch the subset of security and bug fixes only.\nWe recommend migrating to later Python versions and also providing feedback if you depend on the ``4.x`` features.\n\nRelated projects\n================\n\n* `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.\n* `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.\n* `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).\n\nYou want to help and contribute? Perfect!\n=========================================\n\nThese are some contribution examples\n------------------------------------\n\n- Reporting issues to the bugtracker.\n\n- Submitting pull requests from a forked icalendar repo.\n\n- Extending the documentation.\n\n- Sponsor a Sprint (https://plone.org/events/sprints/whatis).\n\n\nFor pull requests, keep this in mind\n------------------------------------\n\n- Add a test which proves your fix and make it pass.\n\n- Describe your change in CHANGES.rst\n\n- Add yourself to the docs/credits.rst\n\nDevelopment Setup\n-----------------\n\nIf you would like to setup icalendar to\ncontribute changes, the `Installation Section\n<https://icalendar.readthedocs.io/en/latest/install.html>`_\nshould help you further.\n\nChangelog\n=========\n\n5.0.12 (2024-03-19)\n-------------------\n\nMinor changes:\n\n- Added corpus to fuzzing directory\n- Added exclusion of fuzzing corpus in MANIFEST.in\n- Augmented fuzzer to optionally convert multiple calendars from a source string\n- Add script to convert OSS FUZZ test cases to Python/pytest test cases\n- Added additional exception handling of defined errors to fuzzer, to allow fuzzer to explore deeper\n- Added more instrumentation to fuzz-harness\n- Rename \"contributor\" to \"collaborator\" in documentation\n- Correct the outdated \"icalendar view myfile.ics\" command in documentation. #588\n- Update GitHub Actions steps versions\n- Keep GitHub Actions up to date with GitHub's Dependabot\n\n\nBreaking changes:\n\n- ...\n\nNew features:\n\n- ...\n\nBug fixes:\n\n- ...\n- Fixed index error in cal.py when attempting to pop from an empty stack\n- Fixed type error in prop.py when attempting to join strings into a byte-string\n- Caught Wrong Date Format in ical_fuzzer to resolve fuzzing coverage blocker\n\n5.0.11 (2023-11-03)\n-------------------\n\nMinor changes:\n\n- The cli utility now displays start and end datetimes in the user's local timezone.\n  Ref: #561\n  [vimpostor]\n\nNew features:\n\n- Added fuzzing harnesses, for integration to OSSFuzz.\n- icalendar releases are deployed to Github releases\n  Fixes: #563\n  [jacadzaca]\n\nBug fixes:\n\n- CATEGORIES field now accepts a string as argument\n  Ref: #322\n  [jacadzaca]\n- Multivalue FREEBUSY property is now parsed properly\n  Ref: #27\n  [jacadzaca]\n- Compare equality and inequality of calendars more completely\n  Ref: #570\n- Use non legacy timezone name.\n  Ref: #567\n- Add some compare functions.\n  Ref: #568\n- Change OSS Fuzz build script to point to harnesses in fuzzing directory\n  Ref: #574\n\n5.0.10 (2023-09-26)\n-------------------\n\nBug fixes:\n\n- Component._encode stops ignoring parameters argument on native values, now merges them\n  Fixes: #557\n  [zocker1999net]\n\n5.0.9 (2023-09-24)\n------------------\n\nBug fixes:\n\n- PERIOD values now set the timezone of their start and end. #556\n\n5.0.8 (2023-09-18)\n------------------\n\nMinor changes:\n\n- Update build configuration to build readthedocs. #538\n- No longer run the ``plone.app.event`` tests.\n- Add documentation on how to parse ``.ics`` files. #152\n- Move pip caching into Python setup action.\n- Check that issue #165 can be closed.\n- Updated about.rst for issue #527\n- Avoid ``vText.__repr__`` BytesWarning.\n\nBug fixes:\n\n- Calendar components are now properly compared\n  Ref: #550\n  Fixes: #526\n  [jacadzaca]\n\n5.0.7 (2023-05-29)\n------------------\n\nBug fixes:\n\n- to_ical() now accepts RRULE BYDAY values>=10 #518\n\n\n5.0.6 (2023-05-26)\n------------------\n\nMinor changes:\n\n- Adjusted duration regex\n\n5.0.5 (2023-04-13)\n------------------\n\nMinor changes:\n\n- Added support for BYWEEKDAY in vRecur ref: #268\n\nBug fixes:\n\n- Fix problem with ORGANIZER in FREE/BUSY #348\n\n5.0.4 (2022-12-29)\n------------------\n\nMinor changes:\n\n- Improved documentation\n  Ref: #503, #504\n\nBug fixes:\n\n- vBoolean can now be used as an parameter\n  Ref: #501\n  Fixes: #500\n  [jacadzaca]\n\n\n5.0.3 (2022-11-23)\n------------------\n\nNew features:\n\n- vDDDTypes is hashable #487 #492 [niccokunzmann]\n\nBug fixes:\n\n- vDDDTypes' equality also checks the dt attribute #497 #492 [niccokunzmann]\n\n5.0.2 (2022-11-03)\n------------------\n\nMinor changes:\n\n- Refactored cal.py, tools.py and completed remaining minimal refactoring in parser.py. Ref: #481 [pronoym99]\n- Calendar.from_ical no longer throws long errors\n  Ref: #473\n  Fixes: #472\n  [jacadzaca]\n- Make datetime value shorter by removing the value parameter where possible.\n  Fixes: #318\n  [jacadzaca], [niccokunzmann]\n\nNew features:\n\n- source code in documentation is tested using doctest #445 [niccokunzmann]\n\nBug fixes:\n\n- broken properties are not added to the parent component\n  Ref: #471\n  Fixes: #464\n  [jacadzaca]\n\n5.0.1 (2022-10-22)\n------------------\n\nMinor changes:\n\n- fixed setuptools deprecation warnings [mgorny]\n\nBug fixes:\n\n- a well-known timezone timezone prefixed with a `/` is treated as if the slash wasn't present\n  Ref: #467\n  Fixes: #466\n  [jacadzaca]\n\n5.0.0 (2022-10-17)\n------------------\n\nMinor changes:\n\n- removed deprecated test checks [tuergeist]\n- Fix: cli does not support DURATION #354 [mamico]\n- Add changelog and contributing to readthedocs documentation #428 [peleccom]\n- fixed small typos #323 [rohnsha0]\n- unittest to parametrized pytest refactoring [jacadzaca]\n\nBreaking changes:\n\n- Require Python 3.7 as minimum Python version.  [maurits] [niccokunzmann]\n- icalendar now takes a ics file directly as an input\n- icalendar's CLI utility program's output is different\n- Drop Support for Python 3.6. Versions 3.7 - 3.11 are supported and tested.\n\nNew features:\n\n- icalendar utility outputs a 'Duration' row\n- icalendar can take multiple ics files as an input\n\nBug fixes:\n\n- Changed tools.UIDGenerator instance methods to static methods\n  Ref: #345\n  [spralja]\n- proper handling of datetime objects with `tzinfo` generated through zoneinfo.ZoneInfo.\n  Ref: #334\n  Fixes: #333\n  [tobixen]\n- Timestamps in UTC does not need tzid\n  Ref: #338\n  Fixes: #335\n  [tobixen]\n-  add ``__eq__`` to ``icalendar.prop.vDDDTypes`` #391 [jacadzaca]\n- Refactor deprecated unittest aliases for Python 3.11 compatibility #330 [tirkarthi]\n\n5.0.0a1 (2022-07-11)\n--------------------\n\nBreaking changes:\n\n- Drop support for Python 3.4, 3.5 and PyPy2.  [maurits]\n\nNew features:\n\n- Document development setup\n  Ref: #358\n  [niccokunzmann]\n\nBug fixes:\n\n- Test with GitHub Actions.  [maurits]\n\n4.1.0 (2022-07-11)\n------------------\n\nNew features:\n\n- No longer test on Python 3.4, 3.5 and PyPy2, because we cannot get it to work.\n  Technically it should still work, it is just no longer tested.\n  Do not expect much development on branch 4.x anymore.\n  The master branch will be for the remaining Python versions that we support.\n  [maurits]\n\nBug fixes:\n\n- Test with GitHub Actions.  [maurits]\n\n4.0.9 (2021-10-16)\n------------------\n\nBug fixes:\n\n- Fix vCategories for correct en/de coding.\n  [thet]\n\n- vDuration property value: Fix changing duration sign after multiple ``to_ical`` calls.\n  Ref: #320\n  Fixes: #319\n  [barlik]\n\n\n4.0.8 (2021-10-07)\n------------------\n\nBug fixes:\n\n- Support added for Python 3.9 and 3.10 (no code changes needed).\n\n- Replace bare 'except:' with 'except Exception:' (#281)\n\n\n4.0.7 (2020-09-07)\n------------------\n\nBug fixes:\n\n- fixed rrule handling, re-enabled test_create_america_new_york()\n\n\n4.0.6 (2020-05-06)\n------------------\n\nBug fixes:\n\n- Use ``vText`` as default type, when convert recurrence definition to ical string. [kam193]\n\n\n4.0.5 (2020-03-21)\n------------------\n\nBug fixes:\n\n- Fixed a docs issue related to building on Read the Docs [davidfischer]\n\n4.0.4 (2019-11-25)\n------------------\n\nBug fixes:\n\n- Reduce Hypothesis iterations to speed up testing, allowing PRs to pass\n  [UniversalSuperBox]\n\n\n4.0.3 (2018-10-10)\n------------------\n\nBug fixes:\n\n- Categories are comma separated not 1 per line #265. [cleder]\n- mark test with mixed timezoneaware and naive datetimes as an expected failure. [cleder]\n\n\n4.0.2 (2018-06-20)\n------------------\n\nBug fixes:\n\n- Update all pypi.python.org URLs to pypi.org\n  [jon.dufresne]\n\n\n4.0.1 (2018-02-11)\n------------------\n\n- Added rudimentary command line interface.\n  [jfjlaros]\n\n- Readme, setup and travis updates.\n  [jdufresne, PabloCastellano]\n\n\n4.0.0 (2017-11-08)\n------------------\n\nBreaking changes:\n\n- Drop support for Python 2.6 and 3.3.\n\n\n3.12 (2017-11-07)\n-----------------\n\nNew features:\n\n- Accept Windows timezone identifiers as valid. #242 [geier]\n\nBug fixes:\n\n- Fix ResourceWarnings in setup.py when Python warnings are enabled. #244 [jdufresne]\n\n- Fix invalid escape sequences in string and bytes literals. #245 [jdufresne]\n\n- Include license file in the generated wheel package. #243 [jdufresne]\n\n- Fix non-ASCII TZID and TZNAME parameter handling. #238 [clivest]\n\n- Docs: update install instructions. #240 [Ekran]\n\n\n3.11.7 (2017-08-27)\n-------------------\n\nNew features:\n\n- added vUTCOffset.ignore_exceptions to allow surpressing of failed TZOFFSET\n  parsing (for now this ignores the check for offsets > 24h) [geier]\n\n\n3.11.6 (2017-08-04)\n-------------------\n\nBug fixes:\n\n- Fix VTIMEZONEs including RDATEs #234.  [geier]\n\n\n3.11.5 (2017-07-03)\n-------------------\n\nBug fixes:\n\n- added an assertion that VTIMEZONE sub-components' DTSTART must be of type\n  DATETIME [geier]\n\n- Fix handling of VTIMEZONEs with subcomponents with the same DTSTARTs and\n  OFFSETs but which are of different types  [geier]\n\n\n3.11.4 (2017-05-10)\n-------------------\n\nBug fixes:\n\n- Don't break on parameter values which contain equal signs, e.g. base64 encoded\n  binary data [geier]\n\n- Fix handling of VTIMEZONEs with subcomponents with the same DTSTARTs.\n  [geier]\n\n\n3.11.3 (2017-02-15)\n-------------------\n\nBug fixes:\n\n- Removed ``setuptools`` as a dependency as it was only required by setup.py\n  and not by the package.\n\n- Don't split content lines on the unicode ``LINE SEPARATOR`` character\n  ``\\u2028`` but only on ``CRLF`` or ``LF``.\n\n3.11.2 (2017-01-12)\n-------------------\n\nBug fixes:\n\n- Run tests with python 3.5 and 3.6.\n  [geier]\n\n- Allow tests failing with pypy3 on travis.ci.\n  [geier]\n\n\n3.11.1 (2016-12-19)\n-------------------\n\nBug fixes:\n\n- Encode error message before adding it to the stack of collected error messages.\n\n\n3.11 (2016-11-18)\n-----------------\n\nFixes:\n\n- Successfully test with pypy and pypy3.  [gforcada]\n\n- Minor documentation update.  [tpltnt]\n\n\n3.10 (2016-05-26)\n-----------------\n\nNew:\n\n- Updated components description to better comply with RFC 5545.\n  Refs #183.\n  [stlaz]\n\n- Added PERIOD value type to date types.\n  Also fixes incompatibilities described in #184.\n  Refs #189.\n  [stlaz]\n\nFixes:\n\n- Fix testsuite for use with ``dateutil>=2.5``.\n  Refs #195.\n  [untitaker]\n\n- Reintroduce cal.Component.is_broken that was removed with 3.9.2.\n  Refs #185.\n  [geier]\n\n\n3.9.2 (2016-02-05)\n------------------\n\nNew:\n\n- Defined ``test_suite`` in setup.py.\n  Now tests can be run via ``python setup.py test``.\n  [geier]\n\nFixes:\n\n- Fixed cal.Component.from_ical() representing an unknown component as one of the known.\n  [stlaz]\n\n- Fixed possible IndexError exception during parsing of an ical string.\n  [stlaz]\n\n- When doing a boolean test on ``icalendar.cal.Component``, always return ``True``.\n  Before it was returning ``False`` due to CaselessDict, if it didn't contain any items.\n  [stlaz]\n\n- Fixed date-time being recognized as date or time during parsing.\n  Added better error handling to parsing from ical strings.\n  [stlaz]\n\n- Added __version__ attribute to init.py.\n  [TomTry]\n\n- Documentation fixes.\n  [TomTry]\n\n- Pep 8, UTF 8 headers, dict/list calls to literals.\n  [thet]\n\n\n3.9.1 (2015-09-08)\n------------------\n\n- Fix ``vPeriod.__repr__``.\n  [spacekpe]\n\n- Improve foldline() performance. This improves the foldline performance,\n  especially for large strings like base64-encoded inline attachements. In some\n  cases (1MB string) from 7 Minutes to less than 20ms for ASCII data and 500ms\n  for non-ASCII data. Ref: #163.\n  [emfree]\n\n\n3.9.0 (2015-03-24)\n------------------\n\n- Creating timezone objects from VTIMEZONE components.\n  [geier]\n\n- Make ``python-dateutil`` a dependency.\n  [geier]\n\n- Made RRULE tolerant of trailing semicolons.\n  [sleeper]\n\n- Documentation fixes.\n  [t-8ch, thet]\n\n3.8.4 (2014-11-01)\n------------------\n\n- Add missing BYWEEKNO to recurrence rules.\n  [russkel]\n\n\n3.8.3 (2014-08-26)\n------------------\n\n- PERCENT property in VTODO renamed to PERCENT-COMPLETE, according to RFC5545.\n  [thomascube]\n\n\n3.8.2 (2014-07-22)\n------------------\n\n- Exclude editor backup files from egg distributions. Fixes #144.\n  [thet]\n\n\n3.8.1 (2014-07-17)\n------------------\n\n- The representation of CaselessDicts in 3.8 changed the name attribute of\n  Components and therefore broke the external API. This has been fixed.\n  [untitaker]\n\n\n3.8 (2014-07-17)\n----------------\n\n- Allow dots in property names (Needed for vCard compatibility). Refs #143.\n  [untitaker]\n\n- Change class representation for CaselessDict objects to always include the\n  class name or the class' name attribute, if available. Also show\n  subcomponents for Component objects.\n  [thet]\n\n- Don't use data_encode for CaselessDict class representation but use dict's\n  __repr__ method.\n  [t-8ch]\n\n- Handle parameters with multiple values, which is needed for vCard 3.0.\n  Refs #142.\n  [t-8ch]\n\n\n3.7 (2014-06-02)\n----------------\n\n- For components with ``ignore_exceptions`` set to ``True``, mark unparseable\n  lines as broken instead rising a ``ValueError``. ``VEVENT`` components have\n  ``ignore_exceptions`` set to ``True`` by default. Ref #131. Fixes #104.\n  [jkiang13]\n\n- Make ``python-dateutil`` a soft-dependency.\n  [boltnev]\n\n- Add optional ``sorted`` parameter to ``Component.to_ical``. Setting it to\n  false allows the user to preserve the original property and parameter order.\n  Ref #136. Fixes #133.\n  [untitaker]\n\n- Fix tests for latest ``pytz``. Don't set ``tzinfo`` directly on datetime\n  objects, but use pytz's ``localize`` function. Ref #138.\n  [untitaker, thet]\n\n- Remove incorrect use of __all__. We don't encourage using ``from package\n  import *`` imports. Fixes #129.\n  [eric-wieser]\n\n\n3.6.2 (2014-04-05)\n------------------\n\n- Pep8 and cleanup.\n  [lasudry]\n\n3.6.1 (2014-01-13)\n------------------\n\n- Open text files referenced by setup.py as utf-8, no matter what the locale\n  settings are set to. Fixes #122.\n  [sochotnicky]\n\n- Add tox.ini to source tarball, which simplifies testing for in distributions.\n  [sochotnicky]\n\n\n3.6 (2014-01-06)\n----------------\n\n- Python3 (3.3+) + Python 2 (2.6+) support [geier]\n\n- Made sure to_ical() always returns bytes [geier]\n\n- Support adding lists to a component property, which value already was a list\n  and remove the Component.set method, which was only used by the add method.\n  [thet]\n\n- Remove ability to add property parameters via a value's params attribute when\n  adding via cal.add (that was only possible for custom value objects and makes\n  up a strange API), but support a parameter attribute on cal.add's method\n  signature to pass a dictionary with property parameter key/value pairs.\n  Fixes #116.\n  [thet]\n\n- Backport some of Regebro's changes from his regebro-refactor branch.\n  [thet]\n\n- Raise explicit error on another malformed content line case.\n  [hajdbo]\n\n- Correctly parse datetime component property values with timezone information\n  when parsed from ical strings.\n  [untitaker]\n\n\n3.5 (2013-07-03)\n----------------\n\n- Let to_unicode be more graceful for non-unicode strings, as like CMFPlone's\n  safe_unicode does it.\n  [thet]\n\n\n3.4 (2013-04-24)\n----------------\n\n- Switch to unicode internally. This should fix all en/decoding errors.\n  [thet]\n\n- Support for non-ascii parameter values. Fixes #88.\n  [warvariuc]\n\n- Added functions to transform chars in string with '\\\\' + any of r'\\,;:' chars\n  into '%{:02X}' form to avoid splitting on chars escaped with '\\\\'.\n  [warvariuc]\n\n- Allow seconds in vUTCOffset properties. Fixes #55.\n  [thet]\n\n- Let ``Component.decode`` better handle vRecur and vDDDLists properties.\n  Fixes #70.\n  [thet]\n\n- Don't let ``Component.add`` re-encode already encoded values. This simplifies\n  the API, since there is no need explicitly pass ``encode=False``. Fixes #82.\n  [thet]\n\n- Rename tzinfo_from_dt to tzid_from_dt, which is what it does.\n  [thet]\n\n- More support for dateutil parsed tzinfo objects. Fixes #89.\n  [leo-naeka]\n\n- Remove python-dateutil version fix at all. Current python-dateutil has Py3\n  and Py2 compatibility.\n  [thet]\n\n- Declare the required python-dateutil dependency in setup.py. Fixes #90.\n  [kleink]\n\n- Raise test coverage.\n  [thet]\n\n- Remove interfaces module, as it is unused.\n  [thet]\n\n- Remove ``test_doctests.py``, test suite already created properly in\n  ``test_icalendar.py``.\n  [rnix]\n\n- Transformed doctests into unittests, Test fixes and cleanup.\n  [warvariuc]\n\n\n3.3 (2013-02-08)\n----------------\n\n- Drop support for Python < 2.6.\n  [thet]\n\n- Allow vGeo to be instantiated with list and not only tuples of geo\n  coordinates. Fixes #83.\n  [thet]\n\n- Don't force to pass a list to vDDDLists and allow setting individual RDATE\n  and EXDATE values without having to wrap them in a list.\n  [thet]\n\n- Fix encoding function to allow setting RDATE and EXDATE values and not to\n  have bypass encoding with an icalendar property.\n  [thet]\n\n- Allow setting of timezone for vDDDLists and support timezone properties for\n  RDATE and EXDATE component properties.\n  [thet]\n\n- Move setting of TZID properties to vDDDTypes, where it belongs to.\n  [thet]\n\n- Use @staticmethod decorator instead of wrapper function.\n  [warvariuc, thet]\n\n- Extend quoting of parameter values to all of those characters: \",;: \u00e2\u0080\u0099'\".\n  This fixes an outlook incompatibility with some characters. Fixes: #79,\n  Fixes: #81.\n  [warvariuc]\n\n- Define VTIMETZONE subcomponents STANDARD and DAYLIGHT for RFC5545 compliance.\n  [thet]\n\n\n3.2 (2012-11-27)\n----------------\n\n- Documentation file layout restructuring.\n  [thet]\n\n- Fix time support. vTime events can be instantiated with a datetime.time\n  object, and do not inherit from datetime.time itself.\n  [rdunklau]\n\n- Correctly handle tzinfo objects parsed with dateutil. Fixes #77.\n  [warvariuc, thet]\n\n- Text values are escaped correclty. Fixes #74.\n  [warvariuc]\n\n- Returned old folding algorithm, as the current implementation fails in some\n  cases. Fixes #72, Fixes #73.\n  [warvariuc]\n\n- Supports to_ical() on date/time properties for dates prior to 1900.\n  [cdevienne]\n\n\n3.1 (2012-09-05)\n----------------\n\n- Make sure parameters to certain properties propagate to the ical output.\n  [kanarip]\n\n- Re-include doctests.\n  [rnix]\n\n- Ensure correct datatype at instance creation time in ``prop.vCalAddress``\n  and ``prop.vText``.\n  [rnix]\n\n- Apply TZID parameter to datetimes parsed from RECURRENCE-ID\n  [dbstovall]\n\n- Localize datetimes for timezones to avoid DST transition errors.\n  [dbstovall]\n\n- Allow UTC-OFFSET property value data types in seconds, which follows RFC5545\n  specification.\n  [nikolaeff]\n\n- Remove utctz and normalized_timezone methods to simplify the codebase. The\n  methods were too tiny to be useful and just used at one place.\n  [thet]\n\n- When using Component.add() to add icalendar properties, force a value\n  conversion to UTC for CREATED, DTSTART and LAST-MODIFIED. The RFC expects UTC\n  for those properties.\n  [thet]\n\n- Removed last occurrences of old API (from_string).\n  [Rembane]\n\n- Add 'recursive' argument to property_items() to switch recursive listing.\n  For example when parsing a text/calendar text including multiple components\n  (e.g. a VCALENDAR with 5 VEVENTs), the previous situation required us to look\n  over all properties in VEVENTs even if we just want the properties under the\n  VCALENDAR component (VERSION, PRODID, CALSCALE, METHOD).\n  [dmikurube]\n\n- All unit tests fixed.\n  [mikaelfrykholm]\n\n\n3.0.1b2 (2012-03-01)\n--------------------\n\n- For all TZID parameters in DATE-TIME properties, use timezone identifiers\n  (e.g. Europe/Vienna) instead of timezone names (e.g. CET), as required by\n  RFC5545. Timezone names are used together with timezone identifiers in the\n  Timezone components.\n  [thet]\n\n- Timezone parsing, issues and test fixes.\n  [mikaelfrykholm, garbas, tgecho]\n\n- Since we use pytz for timezones, also use UTC tzinfo object from the pytz\n  library instead of own implementation.\n  [thet]\n\n\n3.0.1b1 (2012-02-24)\n--------------------\n\n- Update Release information.\n  [thet]\n\n\n3.0\n---\n\n- Add API for proper Timezone support. Allow creating ical DATE-TIME strings\n  with timezone information from Python datetimes with pytz based timezone\n  information and vice versa.\n  [thet]\n\n- Unify API to only use to_ical and from_ical and remove string casting as a\n  requirement for Python 3 compatibility:\n  New: to_ical.\n  Old: ical, string, as_string and string casting via __str__ and str.\n  New: from_ical.\n  Old: from_string.\n  [thet]\n\n\n2.2 (2011-08-24)\n----------------\n\n- migration to https://github.com/collective/icalendar using svn2git preserving\n  tags, branches and authors.\n  [garbas]\n\n- using tox for testing on python 2.4, 2.5, 2.6, 2.6.\n  [garbas]\n\n- fixed tests so they pass also under python 2.7.\n  [garbas]\n\n- running tests on https://jenkins.plone.org/job/icalendar (only 2.6 for now)\n  with some other metrics (pylint, clonedigger, coverage).\n  [garbas]\n\n- review and merge changes from https://github.com/cozi/icalendar fork.\n  [garbas]\n\n- created sphinx documentation and started documenting development and goals.\n  [garbas]\n\n- hook out github repository to https://readthedocs.org service so sphinx\n  documentation is generated on each commit (for master). Documentation can be\n  visible on: https://icalendar.readthedocs.io/en/latest/\n  [garbas]\n\n\n2.1 (2009-12-14)\n----------------\n\n- Fix deprecation warnings about ``object.__init__`` taking no parameters.\n\n- Set the VALUE parameter correctly for date values.\n\n- Long binary data would be base64 encoded with newlines, which made the\n  iCalendar files incorrect. (This still needs testing).\n\n- Correctly handle content lines which include newlines.\n\n\n2.0.1 (2008-07-11)\n------------------\n\n- Made the tests run under Python 2.5+\n\n- Renamed the UTC class to Utc, so it would not clash with the UTC object,\n  since that rendered the UTC object unpicklable.\n\n\n2.0 (2008-07-11)\n----------------\n\n- EXDATE and RDATE now returns a vDDDLists object, which contains a list\n  of vDDDTypes objects. This is do that EXDATE and RDATE can contain\n  lists of dates, as per RFC.\n\n  ***Note!***: This change is incompatible with earlier behavior, so if you\n  handle EXDATE and RDATE you will need to update your code.\n\n- When createing a vDuration of -5 hours (which in itself is nonsensical),\n  the ical output of that was -P1DT19H, which is correct, but ugly. Now\n  it's '-PT5H', which is prettier.\n\n\n1.2 (2006-11-25)\n----------------\n\n- Fixed a string index out of range error in the new folding code.\n\n\n1.1 (2006-11-23)\n----------------\n\n- Fixed a bug in caselessdicts popitem. (thanks to Michael Smith\n  <msmith@fluendo.com>)\n\n- The RFC 2445 was a bit unclear on how to handle line folding when it\n  happened to be in the middle of a UTF-8 character. This has been clarified\n  in the following discussion:\n  http://lists.osafoundation.org/pipermail/ietf-calsify/2006-August/001126.html\n  And this is now implemented in iCalendar. It will not fold in the middle of\n  a UTF-8 character, but may fold in the middle of a UTF-8 composing character\n  sequence.\n\n\n1.0 (2006-08-03)\n----------------\n\n- make get_inline and set_inline support non ascii codes.\n\n- Added support for creating a python egg distribution.\n\n\n0.11 (2005-11-08)\n-----------------\n\n- Changed component .from_string to use types_factory instead of hardcoding\n  entries to 'inline'\n\n- Changed UTC tzinfo to a singleton so the same one is used everywhere\n\n- Made the parser more strict by using regular expressions for key name,\n  param name and quoted/unquoted safe char as per the RFC\n\n- Added some tests from the schooltool icalendar parser for better coverage\n\n- Be more forgiving on the regex for folding lines\n\n- Allow for multiple top-level components on .from_string\n\n- Fix vWeekdays, wasn't accepting relative param (eg: -3SA vs -SA)\n\n- vDDDTypes didn't accept negative period (eg: -P30M)\n\n- 'N' is also acceptable as newline on content lines, per RFC\n\n\n0.10 (2005-04-28)\n-----------------\n\n- moved code to codespeak.net subversion.\n\n- reorganized package structure so that source code is under 'src' directory.\n  Non-package files remain in distribution root.\n\n- redid doc/.py files as doc/.txt, using more modern doctest. Before they\n  were .py files with big docstrings.\n\n- added test.py testrunner, and tests/test_icalendar.py that picks up all\n  doctests in source code and doc directory, and runs them, when typing::\n\n    python2.3 test.py\n\n- renamed iCalendar to lower case package name, lowercased, de-pluralized and\n  shorted module names, which are mostly implementation detail.\n\n- changed tests so they generate .ics files in a temp directory, not in the\n  structure itself.\n\nLicense\n=======\n\nCopyright (c) 2012-2013, Plone Foundation\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n - Redistributions of source code must retain the above copyright notice, this\n   list of conditions and the following disclaimer.\n\n - Redistributions in binary form must reproduce the above copyright notice,\n   this list of conditions and the following disclaimer in the documentation\n   and/or other materials provided with the distribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\nFOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\nDAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\nSERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\nOR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n\n\n",
    "bugtrack_url": null,
    "license": "BSD-2-Clause",
    "summary": "iCalendar parser/generator",
    "version": "5.0.12",
    "project_urls": {
        "Homepage": "https://github.com/collective/icalendar"
    },
    "split_keywords": [
        "calendar",
        "calendaring",
        "ical",
        "icalendar",
        "event",
        "todo",
        "journal",
        "recurring"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "fb89badc6427111cffabb6a462bf447cfff5e9e4c856527ddc030c11020b6cc5",
                "md5": "748d2bea093ad0c8711cba7fdba981a5",
                "sha256": "d873bb859df9c6d0e597b16d247436e0f83f7ac1b90a06429b8393fe8afeba40"
            },
            "downloads": -1,
            "filename": "icalendar-5.0.12-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "748d2bea093ad0c8711cba7fdba981a5",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.7",
            "size": 116298,
            "upload_time": "2024-03-19T22:10:42",
            "upload_time_iso_8601": "2024-03-19T22:10:42.890895Z",
            "url": "https://files.pythonhosted.org/packages/fb/89/badc6427111cffabb6a462bf447cfff5e9e4c856527ddc030c11020b6cc5/icalendar-5.0.12-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "40e701b5dd6623fda765e6edd605ef551a44071d3034eb4a252c7f61fb24323b",
                "md5": "778fec235b764a288ff5d755323a6169",
                "sha256": "73f9be68477722c98320621400943705dcfdbbc6c2b565253f72d3f87e514db8"
            },
            "downloads": -1,
            "filename": "icalendar-5.0.12.tar.gz",
            "has_sig": false,
            "md5_digest": "778fec235b764a288ff5d755323a6169",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.7",
            "size": 115981,
            "upload_time": "2024-03-19T22:10:44",
            "upload_time_iso_8601": "2024-03-19T22:10:44.817405Z",
            "url": "https://files.pythonhosted.org/packages/40/e7/01b5dd6623fda765e6edd605ef551a44071d3034eb4a252c7f61fb24323b/icalendar-5.0.12.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-03-19 22:10:44",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "collective",
    "github_project": "icalendar",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "tox": true,
    "lcname": "icalendar"
}
        
Elapsed time: 0.21389s