Skip to content

Commit

Permalink
Merge branch 'main' into is-broken
Browse files Browse the repository at this point in the history
  • Loading branch information
stevepiercy committed Jun 22, 2024
2 parents 82c669c + 3736f17 commit ecd500c
Show file tree
Hide file tree
Showing 11 changed files with 25 additions and 95 deletions.
22 changes: 7 additions & 15 deletions CHANGES.rst
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ Minor changes:
- Test that all code works with both ``pytz`` and ``zoneinfo``.

- Added missing public classes and functions to API documentation.
- Add version badge

Breaking changes:

Expand All @@ -35,17 +36,22 @@ Breaking changes:
- Replaced ``pkg_resources.get_distribution`` with ``importlib.metadata`` in
``docs/conf.py`` to allow building docs on Python 3.12.

- Remove ``is_broken`` property. Use ``errors`` instead to check if a
component had suppressed parsing errors.
See `Issue 424 <https://github.com/collective/icalendar/issues/424>`_.

- Remove untested and broken ``LocalTimezone`` and ``FixedOffset`` tzinfo
sub-classes, see `Issue 67 <https://github.com/collective/icalendar/issues/67>`_

New features:

- ...

Bug fixes:

- ...
- Rename RFC 2445 to RFC 5545, see `Issue 278
<https://github.com/collective/icalendar/issues/278>`_

5.0.13 (2024-06-20)
-------------------
Expand All @@ -60,10 +66,6 @@ Minor changes:
- Document how to serve the built documentation to view with the browser
- Improve test coverage

Breaking changes:

- ...

New features:

- Create GitHub releases for each tag.
Expand All @@ -90,18 +92,8 @@ Minor changes:
- 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
Expand Down
5 changes: 4 additions & 1 deletion README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ files.
: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`_

----
Expand All @@ -20,6 +19,10 @@ files.
:target: https://pypi.org/project/icalendar/
:alt: Python Package Version on PyPI

.. 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
Expand Down
5 changes: 2 additions & 3 deletions docs/about.rst
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,7 @@ iCalendar package for Python. The inspiration has come from the email package
in the standard lib, which he thinks is pretty simple, yet efficient and
powerful.

The icalendar package is an RFC 5545-compatible parser/generator for iCalendar files.
The ``icalendar`` package is an `RFC 5545 <https://tools.ietf.org/html/rfc5545>`
compatible parser/generator for iCalendar files.

.. _`Max M`: http://www.mxm.dk
.. _`RFC 2445`: https://tools.ietf.org/html/rfc2445
.. _`RFC 5545`: https://tools.ietf.org/html/rfc5545
4 changes: 2 additions & 2 deletions docs/usage.rst
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ iCalendar package
=================

This package is used for parsing and generating iCalendar files following the
standard in RFC 2445.
standard in RFC 5545.

It should be fully compliant, but it is possible to generate and parse invalid
files if you really want to.
Expand Down Expand Up @@ -129,7 +129,7 @@ added. Here is an example::
END:VCALENDAR

Note: this version doesn't check for compliance, so you should look in
the RFC 2445 spec for legal properties for each component, or look in
the RFC 5545 spec for legal properties for each component, or look in
the icalendar/calendar.py file, where it is at least defined for each
component.

Expand Down
5 changes: 0 additions & 5 deletions src/icalendar/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,11 +34,6 @@
vUTCOffset,
TypesFactory,
)
# useful tzinfo subclasses
from icalendar.prop import (
FixedOffset,
LocalTimezone,
)
# Parameters and helper methods for splitting and joining string with escaped
# chars.
from icalendar.parser import (
Expand Down
6 changes: 3 additions & 3 deletions src/icalendar/cal.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
"""Calendar is a dictionary like Python object that can render itself as VCAL
files according to rfc2445.
files according to RFC 5545.
These are the defined components.
"""
Expand Down Expand Up @@ -37,7 +37,7 @@ def get_example(component_directory: str, example_name: str) -> bytes:
# The component factory

class ComponentFactory(CaselessDict):
"""All components defined in rfc 2445 are registered in this factory class.
"""All components defined in RFC 5545 are registered in this factory class.
To get a component you can use it like this.
"""

Expand Down Expand Up @@ -69,7 +69,7 @@ def __init__(self, *args, **kwargs):

class Component(CaselessDict):
"""Component is the base object for calendar, Event and the other
components defined in RFC 2445. Normally you will not use this class
components defined in RFC 5545. Normally you will not use this class
directly, but rather one of the subclasses.
"""

Expand Down
4 changes: 2 additions & 2 deletions src/icalendar/parser.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
"""This module parses and generates contentlines as defined in RFC 2445
"""This module parses and generates contentlines as defined in RFC 5545
(iCalendar), but will probably work for other MIME types with similar syntax.
Eg. RFC 2426 (vCard)
Expand Down Expand Up @@ -174,7 +174,7 @@ class Parameters(CaselessDict):
"""

def params(self):
"""In rfc2445 keys are called parameters, so this is to be consitent
"""In RFC 5545 keys are called parameters, so this is to be consitent
with the naming conventions.
"""
return self.keys()
Expand Down
63 changes: 2 additions & 61 deletions src/icalendar/prop.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
iCalendar properties have values. The values are strongly typed. This module
defines these types, calling val.to_ical() on them will render them as defined
in rfc2445.
in rfc5545.
If you pass any of these classes a Python primitive, you will have an object
that can render itself as iCalendar formatted date.
Expand All @@ -40,12 +40,6 @@
from datetime import time
from datetime import timedelta
from datetime import tzinfo

try:
from dateutil.tz import tzutc
except ImportError:
tzutc = None

from icalendar.caselessdict import CaselessDict
from icalendar.parser import Parameters
from icalendar.parser import escape_char
Expand All @@ -70,19 +64,6 @@
WEEKDAY_RULE = re.compile(r'(?P<signal>[+-]?)(?P<relative>[\d]{0,2})'
r'(?P<weekday>[\w]{2})$')

####################################################
# handy tzinfo classes you can use.
#

ZERO = timedelta(0)
HOUR = timedelta(hours=1)
STDOFFSET = timedelta(seconds=-_time.timezone)
if _time.daylight:
DSTOFFSET = timedelta(seconds=-_time.altzone)
else:
DSTOFFSET = STDOFFSET
DSTDIFF = DSTOFFSET - STDOFFSET


def tzid_from_dt(dt: datetime) -> Optional[str]:
"""Retrieve the timezone id from the datetime object."""
Expand All @@ -98,46 +79,6 @@ def tzid_from_dt(dt: datetime) -> Optional[str]:
return tzid


class FixedOffset(tzinfo):
"""Fixed offset in minutes east from UTC.
"""

def __init__(self, offset, name):
self.__offset = timedelta(minutes=offset)
self.__name = name

def utcoffset(self, dt):
return self.__offset

def tzname(self, dt):
return self.__name

def dst(self, dt):
return ZERO


class LocalTimezone(tzinfo):
"""Timezone of the machine where the code is running.
"""

def utcoffset(self, dt):
return DSTOFFSET if self._isdst(dt) else STDOFFSET

def dst(self, dt):
return DSTDIFF if self._isdst(dt) else ZERO

def tzname(self, dt):
return _time.tzname[self._isdst(dt)]

def _isdst(self, dt):
tt = (dt.year, dt.month, dt.day,
dt.hour, dt.minute, dt.second,
dt.weekday(), 0, -1)
stamp = _time.mktime(tt)
tt = _time.localtime(stamp)
return tt.tm_isdst > 0


class vBinary:
"""Binary property values are base 64 encoded.
"""
Expand Down Expand Up @@ -928,7 +869,7 @@ def from_ical(cls, ical):


class TypesFactory(CaselessDict):
"""All Value types defined in rfc 2445 are registered in this factory
"""All Value types defined in RFC 5545 are registered in this factory
class.
The value and parameter names don't overlap. So one factory is enough for
Expand Down
2 changes: 1 addition & 1 deletion src/icalendar/tests/prop/test_unit.py
Original file line number Diff line number Diff line change
Expand Up @@ -223,7 +223,7 @@ def test_prop_vText(self):
b'Text with escaped\\n chars')

# If you pass a unicode object, it will be utf-8 encoded. As this is
# the (only) standard that RFC 2445 support.
# the (only) standard that RFC 5545 support.
t = vText('international chars \xe4\xf6\xfc')
self.assertEqual(t.to_ical(),
b'international chars \xc3\xa4\xc3\xb6\xc3\xbc')
Expand Down
2 changes: 1 addition & 1 deletion src/icalendar/tests/test_parsing.py
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,7 @@ def test_no_tzid_when_utc(utc, date, expected_output):
https://github.com/collective/icalendar/issues/58
https://github.com/collective/icalendar/issues/335
'''
# According to RFC 2445: "The TZID property parameter MUST NOT be
# According to RFC 5545: "The TZID property parameter MUST NOT be
# applied to DATE-TIME or TIME properties whose time values are
# specified in UTC.
date = date.replace(tzinfo=utc)
Expand Down
2 changes: 1 addition & 1 deletion src/icalendar/tests/test_unit_cal.py
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ def test_default_list_example(c):


def test_render_component(calendar_component):
"""The component can render itself in the RFC 2445 format."""
"""The component can render itself in the RFC 5545 format."""
calendar_component.add('attendee', 'Max M')
assert calendar_component.to_ical() == b'BEGIN:VCALENDAR\r\nATTENDEE:Max M\r\nEND:VCALENDAR\r\n'

Expand Down

0 comments on commit ecd500c

Please sign in to comment.