pkgsrc-Changes archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
CVS commit: pkgsrc/time/py-icalendar
Module Name: pkgsrc
Committed By: wiz
Date: Sun Jun 28 14:14:29 UTC 2026
Modified Files:
pkgsrc/time/py-icalendar: Makefile PLIST distinfo
Log Message:
py-icalendar: update to 7.2.0.
7.2.0 (2026-06-23)
Removals and deprecations
Deprecated icalendar.parser.string.foldline() as a private
function for icalendar version 8. @IoannaGiag (Issue #1011)
Deprecated icalendar.parser.string.escape_char(),
icalendar.parser.string.unescape_char(),
icalendar.parser.string.escape_string(), and
icalendar.parser.string.unescape_string() using the standard
deprecate_for_version_8 wrapper as per issue #1405. (Issue
#1405)
New features
Created an ical_value property for the vFrequency component,
mirroring the existing pattern on vWeekday. @mvanhorn (Issue
#876)
Created an ical_value property for the vGeo component. @IoannaGiag
(Issue #876)
Added type hints to component methods. @Priyanshu-pulak (Issue
#938)
Added test coverage for
icalendar.compatibility.deprecate_for_version_8(). AI disclosure:
I used GPT-5 Codex to help draft and refine the test and pull
request text. I reviewed the output and validated the change
locally. @iccccccccccccc (Issue #1407)
The Alarm.uid accessor now falls back to vendor-specific UID
properties (the existing X-ALARMUID and the newly added
X-EVOLUTION-ALARM-UID) when no canonical UID is present, so
alarms exported by Evolution/GNOME Calendar expose a usable
identifier. single_string_property now accepts an ordered list
of fallback keys so further vendor aliases can be added later.
AI disclosure: I used GPT-5 Codex (via the Codex CLI) to draft
and refine this change and its tests; I reviewed and validated
the output locally. @mvanhorn (Issue #1421)
The rdates and exdates properties are now writable: assigning
a list replaces the RDATE/EXDATE values, del (or assigning an
empty list or None) clears them, and assigning the value the
getter returns round-trips. Prepared with the assistance of an
AI coding agent (Anthropic's Claude). @gaoflow (Issue #1442)
Bug fixes
Strictly validate vDatetime values in from_ical() and reject
malformed input. This also improves handling of values with a
TZID prefix, per RFC 5545 Section 3.3.5, Form #3. @uwezkhan
(Issue #1361)
Preserve an explicit VALUE parameter (for example RDATE;VALUE=PERIOD
or TRIGGER;VALUE=DATE-TIME) when converting from jCal. Previously
Component.from_jcal dropped the value type, which is encoded
in the jCal type field rather than as a parameter. Prepared
with the assistance of an AI coding agent (Anthropic's Claude
Opus 4). @gaoflow @lcampanella98 (Issue #1426)
For a newline-free string that the operating system can't use
as a file path—for example, one containing an embedded null
byte or one that is too long—treat it as calendar data, instead
of propagating an OSError from Component.from_ical. Such input
now raises a consistent ValueError across platforms. The
string-versus-path boundary is now covered by tests. @uwezkhan
(Issue #1436)
Accept the (dt, None) form that rdates/exdates return for a
single date when adding RDATE or EXDATE, so event.add("RDATE",
(dt, None)) no longer raises TypeError and the value round-trips.
Prepared with the assistance of an AI coding agent (Anthropic's
Claude Opus 4). @gaoflow @texttheater (Issue #1439)
Anchored the value validation regular expressions with \Z
instead of $ in vWeekday, vDuration.from_ical, vTime and
vUTCOffset. $ matches just before a final \n, so a value with
a trailing line break was accepted; for vWeekday the newline
survived in the str value and was re-emitted into RECUR output.
@alhudz
For iCalendar files that have thousands of bare line breaks,
reduce the content line parse time by a quadratic order of
magnitude when reading a component with Component.from_ical.
@alhudz
Parse a CATEGORIES value that contains an unescaped colon
correctly. TEXT values do not escape :, so a category such as
CATEGORIES:CONFIDENTIAL,http://example.com/tag was truncated
to a single //example.com/tag because the value boundary was
found with the last colon on the line instead of the first one
outside the parameters. @alhudz
Parse and serialize jCal iteratively so that deeply nested
components no longer raise an uncaught RecursionError.
Component.from_jcal and Component.to_jcal now handle arbitrary
nesting depth, matching the iterative iCal parser and serializer.
@arshsmith
Preserve literal percent escapes in parameter values. The
parameter parser used %2C/%3A/%3B/%5C as internal markers for
backslash-escaped delimiters, so a value that already contained
those sequences (e.g. ALTREP="http://x/a%2Cb") was silently
decoded to http://x/a,b. The internal transport encoding now
escapes % itself, leaving real percent-encoded values untouched.
@alhudz
Raise InvalidCalendar instead of leaking OverflowError when a
DURATION value is too large for datetime.timedelta, for example,
P999999999999999999W. Parsing a whole calendar now records such
a value as an error, like any other invalid property, rather
than aborting the parse. @arshsmith
Reject non-ASCII digits in vMonth (BYMONTH). str.isdigit is
True for digits like the Arabic-Indic ١٢, which was silently
accepted and normalized to month 12, while characters such as
² cleared the same guard and then leaked a raw int() error.
vMonth.from_ical now rejects both. @alhudz
Reject non-finite FLOAT values in vFloat.from_ical() and
vGeo.from_ical(). Inputs such as nan, inf or an overflowing
magnitude like 1e999 were silently accepted, producing NaN/Infinity
tokens in Component.to_json output that are not valid JSON.
@alhudz
Strictly validate vDate and vTime values in their from_ical
methods and reject malformed input, matching the strictness
added to vDatetime. Trailing data and int() quirks (underscores,
whitespace, signs) are no longer silently accepted, per RFC
5545 Section 3.3.4 and RFC 5545 Section 3.3.12. This change
was prepared with AI assistance (Anthropic Claude, Opus model,
via Claude Code) used to research the relevant RFC grammar and
draft the validation and tests, all reviewed and verified
locally. @alhudz
Documentation
Switch docs/how-to/usage.rst from the deprecated .. code::
pycon directive to .. code-block:: pycon for consistency with
the rest of the documentation. @mvanhorn (Issue #626)
Added type hint for encoding parameter in data_encode().
@cybs-joe (Issue #938)
Converted docstring of add() to Google style. @mvanhorn (Issue
#1072)
Fixed broken links and removed :py prefix in
icalendar.cal.calendar.Calendar documentation. @lcampanella98
(Issue #1158)
Fixed broken link and removed :py prefix in the unescape_backslash()
docstring. @vincere-mori (Issue #1158)
Fixed broken documentation links in icalendar.alarms and
icalendar.cal.alarm. @lcampanella98 (Issue #1158)
Fix unqualified cross-references in Event.start and Event.start
docstrings. @Esneider1107 (Issue #1158)
Fixed broken links in icalendar.cal.free_busy documentation by
using fully qualified icalendar.cal.component.Component attribute
targets. @tsai135 (Issue #1158)
Qualify ambiguous cross-references and remove remaining :py
prefixed roles. @wahajahmed010 (Issue #1158)
Fixed broken documentation links in icalendar.cal.availability.
@lcampanella98 (Issue #1158)
Replaced the RFC quotation in the docstring for vBoolean with
a Pythonic description, including parsing behavior, a conformance
reference, and a working example. @tsai135 (Issue #1244)
Improved the documentation for attr.url_property by converting
raw RFC text into a comprehensive Python docstring with usage
examples and explicit RFC cross-references. Assisting tool:
Gemini 1.5. @samrodri911 (Issue #1244)
Improved the LAST_MODIFIED docstring to a clearer Pythonic
docstring. Assisting tool: Claude Haiku 4.5 @valemm13 (Issue
#1244)
Tidied the auto-generated property docstrings by removing the
redundant accepted values sentence and formatting return and
error details as Sphinx sections. @mvanhorn (Issue #1259)
Fix Read the Docs administrative instructions in maintenance
documentation by removing the obsolete step to check the default
branch and adding a step to manually trigger the "latest"
version. @stevepiercy (Issue #1397)
Clarified that Calendar.new automatically sets not only required,
but recommended properties too. @scop (Issue #1459)
Add how to report security issues. @stevepiercy (Issue #1463)
Added NixOS installation instructions to the documentation.
@MichaelFehdrau0205
Added instructions to Change log entry format in Contribute
documentation for how to avoid a filename conflict when adding
a change log entry. @stevepiercy
Collect only documentation files for doctest. @stevepiercy
Documented Calendar.from_ical as a direct Calendar API member
so Sphinx can link to it from the custom components guide.
Prepared with AI assistance. @xjn2005
Internal changes
Added tests for FreeBusy.duration coverage. @kyriakikrimitza
(Issue #698)
Refactored test_error_tolerant_parsing.py to use .ics fixture
files. @lcampanella98 (Issue #1081)
Added .pre-commit-config.yaml configuration and documentation
to automatically record AI prompts in commit messages with
ai-prompt-auto-commit. @AniruthKarthik (Issue #1320)
Support keeping a linked issue open in the pull request template
when the pull request fixes only a part of the original issue.
@stevepiercy (Issue #1394)
Trigger the creation of a comment with links to Read the Docs
of the changed files to review in a pull request preview build.
@stevepiercy (Issue #1396)
Add gh-profiler workflow to help triage AI-generated contributions.
@SashankBhamidi (Issue #1484)
Added validation test for FreeBusy.duration. @kyriakikrimitza
Remove redundant and deprecated pull request preview feature
on Read the Docs. We now use the RTD GitHub app, making this
file redundant to pull request preview builds. Additionally
the call to the old GitHub Action was deprecated on 2025-07-01,
per its README.md. @stevepiercy
Other tasks
Added type hints to all methods in the module error. @Priyanshu-pulak
(Issue #938)
To generate a diff of this commit:
cvs rdiff -u -r1.62 -r1.63 pkgsrc/time/py-icalendar/Makefile
cvs rdiff -u -r1.34 -r1.35 pkgsrc/time/py-icalendar/PLIST
cvs rdiff -u -r1.53 -r1.54 pkgsrc/time/py-icalendar/distinfo
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: pkgsrc/time/py-icalendar/Makefile
diff -u pkgsrc/time/py-icalendar/Makefile:1.62 pkgsrc/time/py-icalendar/Makefile:1.63
--- pkgsrc/time/py-icalendar/Makefile:1.62 Mon Jun 22 15:07:10 2026
+++ pkgsrc/time/py-icalendar/Makefile Sun Jun 28 14:14:29 2026
@@ -1,6 +1,6 @@
-# $NetBSD: Makefile,v 1.62 2026/06/22 15:07:10 wiz Exp $
+# $NetBSD: Makefile,v 1.63 2026/06/28 14:14:29 wiz Exp $
-DISTNAME= icalendar-7.1.3
+DISTNAME= icalendar-7.2.0
PKGNAME= ${PYPKGPREFIX}-${DISTNAME}
CATEGORIES= time python
MASTER_SITES= ${MASTER_SITE_PYPI:=i/icalendar/}
@@ -24,8 +24,8 @@ REPLACE_SH+= src/icalendar/tests/fuzzed
REPLACE_PYTHON+= src/icalendar/cli.py
PY_RENAME_BINARIES= icalendar
-# as of 7.1.3
-# 22 failed, 14705 passed, 28 skipped, 6 errors
+# as of 7.2.0
+# 22 failed, 15542 passed, 28 skipped, 6 errors
# https://github.com/collective/icalendar/issues/731
# https://github.com/collective/icalendar/issues/1493
Index: pkgsrc/time/py-icalendar/PLIST
diff -u pkgsrc/time/py-icalendar/PLIST:1.34 pkgsrc/time/py-icalendar/PLIST:1.35
--- pkgsrc/time/py-icalendar/PLIST:1.34 Sun May 24 18:38:05 2026
+++ pkgsrc/time/py-icalendar/PLIST Sun Jun 28 14:14:29 2026
@@ -1,4 +1,4 @@
-@comment $NetBSD: PLIST,v 1.34 2026/05/24 18:38:05 wiz Exp $
+@comment $NetBSD: PLIST,v 1.35 2026/06/28 14:14:29 wiz Exp $
bin/icalendar-${PYVERSSUFFIX}
${PYSITELIB}/${WHEEL_INFODIR}/METADATA
${PYSITELIB}/${WHEEL_INFODIR}/RECORD
@@ -272,6 +272,7 @@ ${PYSITELIB}/icalendar/tests/calendars/e
${PYSITELIB}/icalendar/tests/calendars/example.ics
${PYSITELIB}/icalendar/tests/calendars/fuzz_testcase_0_char_in_component_name.ics
${PYSITELIB}/icalendar/tests/calendars/fuzz_testcase_invalid_month.ics
+${PYSITELIB}/icalendar/tests/calendars/invalid_duration.ics
${PYSITELIB}/icalendar/tests/calendars/issue_104_broken_calendar.ics
${PYSITELIB}/icalendar/tests/calendars/issue_1050_all_components.ics
${PYSITELIB}/icalendar/tests/calendars/issue_1050_calendar_with_events_and_todos.ics
@@ -281,10 +282,21 @@ ${PYSITELIB}/icalendar/tests/calendars/i
${PYSITELIB}/icalendar/tests/calendars/issue_1050_simple_calendar.ics
${PYSITELIB}/icalendar/tests/calendars/issue_1050_timezone_only_calendar.ics
${PYSITELIB}/icalendar/tests/calendars/issue_1050_uid_in_description.ics
+${PYSITELIB}/icalendar/tests/calendars/issue_1081_empty_rdate.ics
+${PYSITELIB}/icalendar/tests/calendars/issue_1081_event_with_rrule.ics
+${PYSITELIB}/icalendar/tests/calendars/issue_1081_freebusy_comma_separated.ics
+${PYSITELIB}/icalendar/tests/calendars/issue_1081_invalid_rrule_freq.ics
+${PYSITELIB}/icalendar/tests/calendars/issue_1081_invalid_start_and_end.ics
+${PYSITELIB}/icalendar/tests/calendars/issue_1081_invalid_start_valid_end.ics
+${PYSITELIB}/icalendar/tests/calendars/issue_1081_list_of_properties.ics
+${PYSITELIB}/icalendar/tests/calendars/issue_1081_tzid_param.ics
+${PYSITELIB}/icalendar/tests/calendars/issue_1081_with_summary.ics
${PYSITELIB}/icalendar/tests/calendars/issue_1231_recurrence.ics
${PYSITELIB}/icalendar/tests/calendars/issue_1237_x_property.jcal
${PYSITELIB}/icalendar/tests/calendars/issue_1238.ics
${PYSITELIB}/icalendar/tests/calendars/issue_127_categories_with_commas.ics
+${PYSITELIB}/icalendar/tests/calendars/issue_1426.ics
+${PYSITELIB}/icalendar/tests/calendars/issue_1426_value_parameters.ics
${PYSITELIB}/icalendar/tests/calendars/issue_156_RDATE_with_PERIOD_TZID_khal.ics
${PYSITELIB}/icalendar/tests/calendars/issue_156_RDATE_with_PERIOD_TZID_khal_2.ics
${PYSITELIB}/icalendar/tests/calendars/issue_165_missing_event.ics
@@ -413,12 +425,18 @@ ${PYSITELIB}/icalendar/tests/prop/test_c
${PYSITELIB}/icalendar/tests/prop/test_date_and_time.py
${PYSITELIB}/icalendar/tests/prop/test_date_and_time.pyc
${PYSITELIB}/icalendar/tests/prop/test_date_and_time.pyo
+${PYSITELIB}/icalendar/tests/prop/test_duration_overflow.py
+${PYSITELIB}/icalendar/tests/prop/test_duration_overflow.pyc
+${PYSITELIB}/icalendar/tests/prop/test_duration_overflow.pyo
${PYSITELIB}/icalendar/tests/prop/test_identity_and_equality.py
${PYSITELIB}/icalendar/tests/prop/test_identity_and_equality.pyc
${PYSITELIB}/icalendar/tests/prop/test_identity_and_equality.pyo
${PYSITELIB}/icalendar/tests/prop/test_property_values.py
${PYSITELIB}/icalendar/tests/prop/test_property_values.pyc
${PYSITELIB}/icalendar/tests/prop/test_property_values.pyo
+${PYSITELIB}/icalendar/tests/prop/test_trailing_newline.py
+${PYSITELIB}/icalendar/tests/prop/test_trailing_newline.pyc
+${PYSITELIB}/icalendar/tests/prop/test_trailing_newline.pyo
${PYSITELIB}/icalendar/tests/prop/test_unit.py
${PYSITELIB}/icalendar/tests/prop/test_unit.pyc
${PYSITELIB}/icalendar/tests/prop/test_unit.pyo
@@ -440,6 +458,9 @@ ${PYSITELIB}/icalendar/tests/prop/test_v
${PYSITELIB}/icalendar/tests/prop/test_vFloat.py
${PYSITELIB}/icalendar/tests/prop/test_vFloat.pyc
${PYSITELIB}/icalendar/tests/prop/test_vFloat.pyo
+${PYSITELIB}/icalendar/tests/prop/test_vFrequency.py
+${PYSITELIB}/icalendar/tests/prop/test_vFrequency.pyc
+${PYSITELIB}/icalendar/tests/prop/test_vFrequency.pyo
${PYSITELIB}/icalendar/tests/prop/test_vInt.py
${PYSITELIB}/icalendar/tests/prop/test_vInt.pyc
${PYSITELIB}/icalendar/tests/prop/test_vInt.pyo
@@ -527,9 +548,15 @@ ${PYSITELIB}/icalendar/tests/rfc_9253_ic
${PYSITELIB}/icalendar/tests/test_bom_calendar.py
${PYSITELIB}/icalendar/tests/test_bom_calendar.pyc
${PYSITELIB}/icalendar/tests/test_bom_calendar.pyo
+${PYSITELIB}/icalendar/tests/test_categories_value_with_colon.py
+${PYSITELIB}/icalendar/tests/test_categories_value_with_colon.pyc
+${PYSITELIB}/icalendar/tests/test_categories_value_with_colon.pyo
${PYSITELIB}/icalendar/tests/test_cli_tool.py
${PYSITELIB}/icalendar/tests/test_cli_tool.pyc
${PYSITELIB}/icalendar/tests/test_cli_tool.pyo
+${PYSITELIB}/icalendar/tests/test_compatibility.py
+${PYSITELIB}/icalendar/tests/test_compatibility.pyc
+${PYSITELIB}/icalendar/tests/test_compatibility.pyo
${PYSITELIB}/icalendar/tests/test_component_register.py
${PYSITELIB}/icalendar/tests/test_component_register.pyc
${PYSITELIB}/icalendar/tests/test_component_register.pyo
@@ -558,6 +585,9 @@ ${PYSITELIB}/icalendar/tests/test_error_
${PYSITELIB}/icalendar/tests/test_examples.py
${PYSITELIB}/icalendar/tests/test_examples.pyc
${PYSITELIB}/icalendar/tests/test_examples.pyo
+${PYSITELIB}/icalendar/tests/test_free_busy_duration.py
+${PYSITELIB}/icalendar/tests/test_free_busy_duration.pyc
+${PYSITELIB}/icalendar/tests/test_free_busy_duration.pyo
${PYSITELIB}/icalendar/tests/test_funding_json.py
${PYSITELIB}/icalendar/tests/test_funding_json.pyc
${PYSITELIB}/icalendar/tests/test_funding_json.pyo
@@ -606,6 +636,12 @@ ${PYSITELIB}/icalendar/tests/test_issue_
${PYSITELIB}/icalendar/tests/test_issue_127_categories_comma_escaping.py
${PYSITELIB}/icalendar/tests/test_issue_127_categories_comma_escaping.pyc
${PYSITELIB}/icalendar/tests/test_issue_127_categories_comma_escaping.pyo
+${PYSITELIB}/icalendar/tests/test_issue_1426.py
+${PYSITELIB}/icalendar/tests/test_issue_1426.pyc
+${PYSITELIB}/icalendar/tests/test_issue_1426.pyo
+${PYSITELIB}/icalendar/tests/test_issue_1436_implicit_file_read.py
+${PYSITELIB}/icalendar/tests/test_issue_1436_implicit_file_read.pyc
+${PYSITELIB}/icalendar/tests/test_issue_1436_implicit_file_read.pyo
${PYSITELIB}/icalendar/tests/test_issue_165_missing_event.py
${PYSITELIB}/icalendar/tests/test_issue_165_missing_event.pyc
${PYSITELIB}/icalendar/tests/test_issue_165_missing_event.pyo
@@ -735,6 +771,9 @@ ${PYSITELIB}/icalendar/tests/test_issue_
${PYSITELIB}/icalendar/tests/test_issue_999_negative_event_duration.py
${PYSITELIB}/icalendar/tests/test_issue_999_negative_event_duration.pyc
${PYSITELIB}/icalendar/tests/test_issue_999_negative_event_duration.pyo
+${PYSITELIB}/icalendar/tests/test_jcal_recursion.py
+${PYSITELIB}/icalendar/tests/test_jcal_recursion.pyc
+${PYSITELIB}/icalendar/tests/test_jcal_recursion.pyo
${PYSITELIB}/icalendar/tests/test_multiple.py
${PYSITELIB}/icalendar/tests/test_multiple.pyc
${PYSITELIB}/icalendar/tests/test_multiple.pyo
@@ -744,6 +783,9 @@ ${PYSITELIB}/icalendar/tests/test_oss_fu
${PYSITELIB}/icalendar/tests/test_parameter_access.py
${PYSITELIB}/icalendar/tests/test_parameter_access.pyc
${PYSITELIB}/icalendar/tests/test_parameter_access.pyo
+${PYSITELIB}/icalendar/tests/test_parser_quadratic_unfolding.py
+${PYSITELIB}/icalendar/tests/test_parser_quadratic_unfolding.pyc
+${PYSITELIB}/icalendar/tests/test_parser_quadratic_unfolding.pyo
${PYSITELIB}/icalendar/tests/test_parsing.py
${PYSITELIB}/icalendar/tests/test_parsing.pyc
${PYSITELIB}/icalendar/tests/test_parsing.pyo
Index: pkgsrc/time/py-icalendar/distinfo
diff -u pkgsrc/time/py-icalendar/distinfo:1.53 pkgsrc/time/py-icalendar/distinfo:1.54
--- pkgsrc/time/py-icalendar/distinfo:1.53 Mon Jun 22 15:07:10 2026
+++ pkgsrc/time/py-icalendar/distinfo Sun Jun 28 14:14:29 2026
@@ -1,5 +1,5 @@
-$NetBSD: distinfo,v 1.53 2026/06/22 15:07:10 wiz Exp $
+$NetBSD: distinfo,v 1.54 2026/06/28 14:14:29 wiz Exp $
-BLAKE2s (icalendar-7.1.3.tar.gz) = 35c1f6c6ad7dc6983263d4b2c426369d94ce015c8be06d3409229ba510017249
-SHA512 (icalendar-7.1.3.tar.gz) = 0c98ca1353e77488ca8d6a2d6c10bdb0518b4c0ae77047f7004b8b5f650cb80f619a17936e67e053d152812ed5e36b1585bc1d0667961b79941c8ede7441add1
-Size (icalendar-7.1.3.tar.gz) = 472734 bytes
+BLAKE2s (icalendar-7.2.0.tar.gz) = 689964ac5eb8ce527c225a882bfcbcbc0d8e06e2452ce054b8076f231bcccc83
+SHA512 (icalendar-7.2.0.tar.gz) = e8c53c2c3b062db57997955706d22e4b17b352df27abe698924467d6ad613847c02a5a66f3d44cdc8b2513de901b762521e907956e429d1c7df9e6d23f5c6967
+Size (icalendar-7.2.0.tar.gz) = 489932 bytes
Home |
Main Index |
Thread Index |
Old Index