From 7208869b3a527bb3ffa0a35e388cab23f4403226 Mon Sep 17 00:00:00 2001 From: Sashank Bhamidi Date: Tue, 10 Nov 2026 21:58:00 +0530 Subject: [PATCH 1/2] Pack up, we're moving to PyCalendar --- .github/ISSUE_TEMPLATE/bug_report.md | 2 +- .github/ISSUE_TEMPLATE/config.yml | 2 +- .github/workflows/documentation.yml | 2 +- .github/workflows/generate_matrix.py | 2 +- .github/workflows/tests.yml | 4 +- .gitignore | 1 + .pre-commit-config.yaml | 2 +- .well-known/funding-manifest-urls | 2 +- CHANGES.rst | 226 +++++++++--------- README.rst | 18 +- SECURITY.md | 12 +- docs/_include/configure-git-steps.inc | 2 +- docs/_include/configure-git.inc | 2 +- docs/_templates/404.html | 2 +- docs/conf.py | 22 +- docs/contribute/credits.rst | 4 +- docs/contribute/development.rst | 2 +- docs/contribute/documentation/build-check.rst | 4 +- docs/contribute/documentation/index.rst | 4 +- docs/contribute/documentation/small-edits.rst | 4 +- docs/contribute/documentation/style-guide.rst | 4 +- docs/contribute/index.rst | 20 +- docs/contribute/join-the-icalendar-team.rst | 2 +- docs/contribute/maintenance.rst | 46 ++-- docs/explanation/safe-xml-parsing.rst | 2 +- docs/how-to/fuzz-testing-log.txt | 8 +- docs/how-to/fuzz-testing.rst | 2 +- docs/how-to/usage.rst | 6 +- docs/index.rst | 2 +- docs/reference/versions-branches.rst | 12 +- .../tutorials/create-event-with-attendees.rst | 2 +- funding.json | 12 +- news/+default-prodid.breaking | 1 + news/+move-to-pycalendar.internal | 1 + pyproject.toml | 18 +- src/icalendar/attr/__init__.py | 6 +- src/icalendar/cal/calendar.py | 4 +- src/icalendar/cal/component.py | 2 +- src/icalendar/cal/lazy.py | 2 +- src/icalendar/param.py | 2 +- src/icalendar/parser/xcal/string.py | 2 +- src/icalendar/prop/text.py | 4 +- src/icalendar/tests/attr/test_issue_1594.py | 2 +- src/icalendar/tests/attr/test_resources.py | 2 +- src/icalendar/tests/calendars/example.ics | 2 +- src/icalendar/tests/calendars/issue_1426.ics | 2 +- .../calendars/issue_1426_value_parameters.ics | 2 +- .../issue_313_globally_unique_tzid.ics | 2 +- src/icalendar/tests/calendars/minimal.ics | 2 +- .../tests/calendars/rfc_7986_properties.ics | 2 +- .../tests/calendars/rfc_9253_examples.ics | 2 +- .../tests/calendars/rfc_9253_gap.ics | 2 +- .../tests/calendars/rfc_9253_related_to.ics | 2 +- src/icalendar/tests/conftest.py | 2 +- src/icalendar/tests/fuzzed/__init__.py | 2 +- src/icalendar/tests/fuzzed/test_predicate.py | 2 +- .../tests/prop/test_request_status.py | 2 +- .../rfc_6321_xcal/cal/test_xml_conversion.py | 4 +- .../tests/rfc_6321_xcal/prop/test_recur.py | 2 +- .../tests/rfc_6321_xcal/test_xml_property.py | 6 +- .../test_additional_considerations.py | 2 +- .../tests/rfc_7265_jcal/test_invalid_jcal.py | 2 +- .../tests/rfc_7265_jcal/test_json.py | 2 +- .../test_concept.py | 4 +- .../tests/test_components_break_on_bad_ics.py | 4 +- src/icalendar/tests/test_create_release.sh | 10 +- src/icalendar/tests/test_docstrings.py | 2 +- src/icalendar/tests/test_encoding.py | 10 +- src/icalendar/tests/test_examples.py | 2 +- .../test_ghsa_qjcq_q7h7_r74v_repeat_dos.py | 2 +- .../tests/test_issue_1050_lazy_parsing.py | 4 +- .../tests/test_issue_1066_calendar_uid.py | 2 +- .../tests/test_issue_1124_no_utc_vtimezone.py | 2 +- src/icalendar/tests/test_issue_116.py | 4 +- ...t_issue_1237_jcal_paring_of_known_types.py | 2 +- src/icalendar/tests/test_issue_1238.py | 2 +- ...est_issue_127_categories_comma_escaping.py | 2 +- .../test_issue_1436_implicit_file_read.py | 4 +- ...ue_1569_singletons_multiple_consistency.py | 2 +- src/icalendar/tests/test_issue_1593.py | 2 +- src/icalendar/tests/test_issue_1633.py | 2 +- .../tests/test_issue_165_missing_event.py | 2 +- ...68_parsing_invalid_calendars_no_warning.py | 2 +- ..._issue_1795_duplicate_single_properties.py | 2 +- .../tests/test_issue_1802_tzp_localize.py | 2 +- ...est_issue_1870_escaped_quote_parameters.py | 2 +- .../tests/test_issue_218_parse_calendar.py | 2 +- .../test_issue_279_decoding_categories.py | 2 +- src/icalendar/tests/test_issue_27_period.py | 2 +- .../test_issue_301_add_rrule_as_string.py | 2 +- .../test_issue_313_globally_unique_tzid.py | 4 +- .../tests/test_issue_315_uid_required.py | 2 +- .../test_issue_318_skip_default_parameters.py | 2 +- .../tests/test_issue_321_dst_offset.py | 4 +- ...aracters_split_into_multiple_categories.py | 2 +- .../tests/test_issue_336_dateutil_timezone.py | 2 +- .../test_issue_348_exception_parsing_value.py | 6 +- src/icalendar/tests/test_issue_350.py | 2 +- .../tests/test_issue_355_url_escaping.py | 6 +- .../test_issue_500_vboolean_for_parameter.py | 2 +- ...test_issue_557_encode_native_parameters.py | 2 +- ...test_issue_596_calendar_with_attributes.py | 6 +- .../test_issue_662_component_properties.py | 8 +- .../test_issue_716_alarm_time_computation.py | 8 +- .../tests/test_issue_720_uid_property.py | 2 +- .../test_issue_722_generate_vtimezone.py | 2 +- .../test_issue_756_read_calendar_from_file.py | 2 +- .../test_issue_798_property_parameters.py | 2 +- src/icalendar/tests/test_issue_802.py | 2 +- src/icalendar/tests/test_issue_828.py | 2 +- .../tests/test_issue_836_do_not_quote_tzid.py | 2 +- ...est_issue_843_new_method_for_components.py | 6 +- .../tests/test_issue_857_enhanced_api.py | 2 +- .../tests/test_issue_860_improved_setters.py | 2 +- .../tests/test_issue_867_todo_duration_fix.py | 2 +- .../tests/test_issue_884_get_duration.py | 2 +- .../tests/test_issue_898_todo_end.py | 2 +- .../tests/test_issue_899_copy_component.py | 2 +- src/icalendar/tests/test_jcal_recursion.py | 2 +- src/icalendar/tests/test_parsing.py | 32 +-- src/icalendar/tests/test_period.py | 2 +- .../tests/test_property_docstrings.py | 2 +- src/icalendar/tests/test_recurrence.py | 2 +- src/icalendar/tests/test_repr_recursion.py | 2 +- src/icalendar/tests/test_request_status.py | 2 +- src/icalendar/tests/test_rfc_7529.py | 2 +- src/icalendar/tests/test_rfc_7986.py | 2 +- .../tests/test_rfc_7986_categories.py | 2 +- src/icalendar/tests/test_rfc_9074.py | 2 +- .../timezone/equivalent_timezone_ids.py | 2 +- src/icalendar/timezone/zoneinfo.py | 2 +- tox.ini | 2 +- 132 files changed, 378 insertions(+), 375 deletions(-) create mode 100644 news/+default-prodid.breaking create mode 100644 news/+move-to-pycalendar.internal diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index e03406b86..a56ef0f09 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -46,6 +46,6 @@ Output: -- [ ] I tested it with the latest version. For example, I used the command `pip3 install --upgrade https://github.com/collective/icalendar.git`. +- [ ] I tested it with the latest version. For example, I used the command `pip3 install --upgrade https://github.com/PyCalendar/icalendar.git`. - [ ] I attached the `.ics` sample file, or there is no `.ics` sample file. To remove private information, use icalendar-anonymizer either through its [website](https://icalendar-anonymizer.com/) or [install it locally](https://docs.icalendar-anonymizer.com/latest/installation.html). \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index 05ead7ba9..62ac08ec7 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -1,5 +1,5 @@ blank_issues_enabled: false contact_links: - name: Discussions - url: https://github.com/collective/icalendar/discussions + url: https://github.com/PyCalendar/icalendar/discussions about: For questions, ideas, and community discussions diff --git a/.github/workflows/documentation.yml b/.github/workflows/documentation.yml index b94c1f456..9c99f668e 100644 --- a/.github/workflows/documentation.yml +++ b/.github/workflows/documentation.yml @@ -38,7 +38,7 @@ jobs: with: # UV_VERSION can be set in the repository settings: # Settings -> Secrets and variables -> Actions or click here: - # https://github.com/collective/icalendar/settings/variables/actions + # https://github.com/PyCalendar/icalendar/settings/variables/actions # -> Variables -> UV_VERSION version: "${{ vars.UV_VERSION }}" diff --git a/.github/workflows/generate_matrix.py b/.github/workflows/generate_matrix.py index 0b6f37464..47e0685f0 100755 --- a/.github/workflows/generate_matrix.py +++ b/.github/workflows/generate_matrix.py @@ -144,7 +144,7 @@ def generate_matrix(git_ref, review, event_name=""): # # Note: If you change test names, also make sure that the # branch protection rules are adjusted to the new names. - # https://github.com/collective/icalendar/settings/branches + # https://github.com/PyCalendar/icalendar/settings/branches # for run in matrix: diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 0e0b8d921..90bb9d2ff 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -54,7 +54,7 @@ jobs: enable-cache: true # UV_VERSION can be set in the repository settings: # Settings -> Secrets and variables -> Actions or click here: - # https://github.com/collective/icalendar/settings/variables/actions + # https://github.com/PyCalendar/icalendar/settings/variables/actions # -> Variables -> UV_VERSION version: "${{ vars.UV_VERSION }}" python-version: ${{ matrix.python_version }} @@ -132,7 +132,7 @@ jobs: enable-cache: false # UV_VERSION can be set in the repository settings: # Settings -> Secrets and variables -> Actions or click here: - # https://github.com/collective/icalendar/settings/variables/actions + # https://github.com/PyCalendar/icalendar/settings/variables/actions # -> Variables -> UV_VERSION version: "${{ vars.UV_VERSION }}" python-version: "3.14" diff --git a/.gitignore b/.gitignore index 5df5a8c8a..f933d1d44 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ __pycache__ /_build/ +/docs/_build/ /.coverage /.hypothesis/ /.prompts/ diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 5f02ca1a4..aaaa6d46e 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,7 +1,7 @@ default_install_hook_types: [pre-commit, prepare-commit-msg, post-commit] repos: - - repo: https://github.com/pycalendar/ai-prompt-auto-commit + - repo: https://github.com/PyCalendar/ai-prompt-auto-commit rev: v0.0.10 hooks: - id: prepare-ai-repository diff --git a/.well-known/funding-manifest-urls b/.well-known/funding-manifest-urls index 587058321..abaedda2a 100644 --- a/.well-known/funding-manifest-urls +++ b/.well-known/funding-manifest-urls @@ -1 +1 @@ -https://github.com/collective/icalendar/raw/main/funding.json \ No newline at end of file +https://github.com/PyCalendar/icalendar/raw/main/funding.json \ No newline at end of file diff --git a/CHANGES.rst b/CHANGES.rst index fb8369702..836577da3 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -17,23 +17,23 @@ Change log Removals and deprecations ~~~~~~~~~~~~~~~~~~~~~~~~~ -- :attr:`vBinary.obj ` is deprecated in favor of :attr:`vBinary.bytes `. It is retained as a lossy string view of the value for backward compatibility, and will be removed in icalendar 8. The ``test_ical_value_rejects_non_base64_characters`` test was removed because :attr:`vBinary.ical_value ` no longer validates or decodes Base64. @uwezkhan (`Issue #1356 `_) +- :attr:`vBinary.obj ` is deprecated in favor of :attr:`vBinary.bytes `. It is retained as a lossy string view of the value for backward compatibility, and will be removed in icalendar 8. The ``test_ical_value_rejects_non_base64_characters`` test was removed because :attr:`vBinary.ical_value ` no longer validates or decodes Base64. @uwezkhan (`Issue #1356 `_) New features ~~~~~~~~~~~~ -- Created an :meth:`~cal.journal.Journal.example` method for the :class:`~cal.journal.Journal` component and an :meth:`~cal.free_busy.FreeBusy.example` method for the :class:`~cal.free_busy.FreeBusy` component, added the :rfc:`5545` examples that they load, and documented their usage in both class docstrings. AI assistance: Kiro CLI with the claude-opus-5 model was used to draft this change. @Souptik96 (`Issue #743 `_) -- Add :meth:`Alarm.new_display() `, :meth:`Alarm.new_audio() `, and :meth:`Alarm.new_email() ` factory methods for creating :rfc:`5545#section-3.6.6` VALARM components. @klouds27 (`Issue #865 `_) -- :class:`~icalendar.prop.binary.vBinary` now stores the raw ``bytes`` of the value internally, so non-UTF-8 binary data round-trips losslessly. With the release of icalendar 7.1.0, and previous to this bug fix, :attr:`vBinary.ical_value ` Base64-decoded the raw stored bytes and raised :class:`ValueError` for non-Base64 input. :attr:`vBinary.ical_value ` now returns the raw stored bytes instead of Base64-decoding them, and no longer raises :class:`ValueError` for non-Base64 input. @uwezkhan (`Issue #1356 `_) -- Added :attr:`vBinary.bytes `, exposing the raw binary value of a BINARY property. @uwezkhan (`Issue #1356 `_) -- Added the :exc:`~icalendar.error.ICalParsingError` exception as a public API for programmatic handling of iCalendar parsing failures. AI assistance: ChatGPT was used to help debug terminal errors encountered during development. @GAUTAMSANSWAL (`Issue #1536 `_) -- Created a script to automatically generate the :mod:`~icalendar.timezone.windows_to_olson` module from the Unicode Consortium's CLDR GitHub repository. Added lxml as a new development dependency. Added the target ``wo`` to the ``Makefile`` to generate the file from the root of the repository with ``make wo``. @stevepiercy (`Issue #1548 `_) -- Added :attr:`vBinary.base64data `, a getter/setter for the Base64 string view of a BINARY property's value, so callers no longer need to call :func:`base64.b64encode` or :func:`base64.b64decode` manually. @gagana2023 (`Issue #1550 `_) -- Added :attr:`Alarm.ACTION ` and :attr:`AlarmTime.action ` access to the :rfc:`5545#section-3.8.6.1` ``ACTION`` property. I used OpenAI Codex with GPT-5 to assist with this change, then reviewed and tested the result. @bm1016bm-svg (`Issue #1569 `_) -- Record the exact CLDR commit used to generate the Windows-to-Olson timezone mapping and fetch the mapping from that pinned revision. I used AI to assist me with this change. @patrickswedish (`Issue #1575 `_) -- Used :meth:`vBinary.from_ical() ` in :attr:`Image.data ` for consistent Base64 validation, removing the manual :func:`base64.b64decode` call. @klouds27 (`Issue #1638 `_) -- Added ``REQUEST_STATUS`` property to :class:`~icalendar.cal.event.Event`, :class:`~icalendar.cal.todo.Todo`, :class:`~icalendar.cal.journal.Journal`, and :class:`~icalendar.cal.free_busy.FreeBusy` with ``request_status`` parameter in ``new()`` constructors per :rfc:`5545#section-3.8.8.3`. I used AI to assist with this change. @SemTiOne (`Issue #1666 `_) +- Created an :meth:`~cal.journal.Journal.example` method for the :class:`~cal.journal.Journal` component and an :meth:`~cal.free_busy.FreeBusy.example` method for the :class:`~cal.free_busy.FreeBusy` component, added the :rfc:`5545` examples that they load, and documented their usage in both class docstrings. AI assistance: Kiro CLI with the claude-opus-5 model was used to draft this change. @Souptik96 (`Issue #743 `_) +- Add :meth:`Alarm.new_display() `, :meth:`Alarm.new_audio() `, and :meth:`Alarm.new_email() ` factory methods for creating :rfc:`5545#section-3.6.6` VALARM components. @klouds27 (`Issue #865 `_) +- :class:`~icalendar.prop.binary.vBinary` now stores the raw ``bytes`` of the value internally, so non-UTF-8 binary data round-trips losslessly. With the release of icalendar 7.1.0, and previous to this bug fix, :attr:`vBinary.ical_value ` Base64-decoded the raw stored bytes and raised :class:`ValueError` for non-Base64 input. :attr:`vBinary.ical_value ` now returns the raw stored bytes instead of Base64-decoding them, and no longer raises :class:`ValueError` for non-Base64 input. @uwezkhan (`Issue #1356 `_) +- Added :attr:`vBinary.bytes `, exposing the raw binary value of a BINARY property. @uwezkhan (`Issue #1356 `_) +- Added the :exc:`~icalendar.error.ICalParsingError` exception as a public API for programmatic handling of iCalendar parsing failures. AI assistance: ChatGPT was used to help debug terminal errors encountered during development. @GAUTAMSANSWAL (`Issue #1536 `_) +- Created a script to automatically generate the :mod:`~icalendar.timezone.windows_to_olson` module from the Unicode Consortium's CLDR GitHub repository. Added lxml as a new development dependency. Added the target ``wo`` to the ``Makefile`` to generate the file from the root of the repository with ``make wo``. @stevepiercy (`Issue #1548 `_) +- Added :attr:`vBinary.base64data `, a getter/setter for the Base64 string view of a BINARY property's value, so callers no longer need to call :func:`base64.b64encode` or :func:`base64.b64decode` manually. @gagana2023 (`Issue #1550 `_) +- Added :attr:`Alarm.ACTION ` and :attr:`AlarmTime.action ` access to the :rfc:`5545#section-3.8.6.1` ``ACTION`` property. I used OpenAI Codex with GPT-5 to assist with this change, then reviewed and tested the result. @bm1016bm-svg (`Issue #1569 `_) +- Record the exact CLDR commit used to generate the Windows-to-Olson timezone mapping and fetch the mapping from that pinned revision. I used AI to assist me with this change. @patrickswedish (`Issue #1575 `_) +- Used :meth:`vBinary.from_ical() ` in :attr:`Image.data ` for consistent Base64 validation, removing the manual :func:`base64.b64decode` call. @klouds27 (`Issue #1638 `_) +- Added ``REQUEST_STATUS`` property to :class:`~icalendar.cal.event.Event`, :class:`~icalendar.cal.todo.Todo`, :class:`~icalendar.cal.journal.Journal`, and :class:`~icalendar.cal.free_busy.FreeBusy` with ``request_status`` parameter in ``new()`` constructors per :rfc:`5545#section-3.8.8.3`. I used AI to assist with this change. @SemTiOne (`Issue #1666 `_) - Improved :exc:`~icalendar.error.ICalParsingError` by including optional value, line, and line number information in exception messages for more consistent iCalendar parsing error reporting. AI assistance: ChatGPT was used to help debug terminal errors encountered during development. @GAUTAMSANSWAL - Made :exc:`~icalendar.error.JCalParsingError` inherit from :exc:`~icalendar.error.InvalidCalendar` for consistency with :exc:`~icalendar.error.ICalParsingError`. AI assistance: ChatGPT was used to help debug terminal errors encountered during development. @GAUTAMSANSWAL @@ -41,20 +41,20 @@ New features Bug fixes ~~~~~~~~~ -- Resolve the timezone of a "globally unique" :rfc:`5545#section-3.2.19` ``TZID`` such as ``/freeassociation.sourceforge.net/Europe/Berlin``, which is emitted by some clients, including libical and Evolution. :meth:`TZP.timezone ` now strips the leading vendor prefix and resolves the trailing Olson identifier, so the value is parsed as timezone-aware instead of being silently treated as naive. Prepared with AI assistance. @vjsai (`Issue #313 `_) -- Fixed the :file:`equivalent_timezone_ids.py` script after the call to generate the timezone Python code was removed. @gjabell (`Issue #1392 `_) -- Values of unrecognized properties and ``X-`` properties without a ``VALUE`` parameter were altered by escaping when parsed, serialized, or converted to and from jCal, so they did not round-trip unchanged as :rfc:`7265` specifies. These values are now preserved verbatim. Additionally, the ``PROXIMITY`` property (:rfc:`9074`) was treated as an unknown value type instead of ``TEXT`` and is now recognized correctly. AI disclosure: I used Claude Code (Anthropic's Claude Opus) to draft and refine this change and its tests; I reviewed the output and validated the change locally. @lcampanella98 (`Issue #1445 `_) -- Ship :file:`funding.json` in PyPI source distributions so packaging and test runs from the sdist no longer fail with :class:`FileNotFoundError`. @Hishamkhashman1 (`Issue #1493 `_) -- Avoid folding content lines between escape prefixes and their escaped characters. AI disclosure: I used GPT-5 Codex to help draft and refine this change and its tests; I reviewed and validated the output locally. @kingrubic (`Issue #1501 `_) -- Preserve ``URI`` value parameters on a jCal round-trip. :meth:`vUri.from_jcal ` previously passed the parameters positionally, but ``vUri.__new__`` takes ``encoding`` as its second positional parameter. As a result, the ``URI`` value parameters were consumed as ``encoding`` and dropped. For example, ``ATTACH;FMTTYPE=...`` or ``CONFERENCE;FEATURE=...`` lost their parameters. They are now passed as the ``params`` keyword. Prepared with the assistance of an AI coding agent (Anthropic's Claude Opus 4.8). @gaoflow (`Issue #1526 `_) -- Updated the Windows timezone mapping for ``Mountain Standard Time (Mexico)`` to ``America/Mazatlan``, so dates after Mexico's 2022 timezone changes use the correct UTC-7 offset instead of UTC-6. Prepared with AI assistance. @RobHannay (`Issue #1546 `_) -- ``IMAGE`` properties now use their explicitly declared ``VALUE`` type instead of always being parsed as unknown, while ``IMAGE`` without a ``VALUE`` parameter remains unknown. I used OpenAI Codex with GPT-5 to assist with this change. @floze-the-genius (`Issue #1561 `_) -- Removed ``ATTACH`` from :attr:`Alarm.singletons `. An "email" ``VALARM`` may carry more than one ``ATTACH`` per :rfc:`5545#section-3.6.6`, so ``ATTACH`` belongs in ``multiple`` only; it was previously listed in both ``singletons`` and ``multiple``. Added a regression test that ``singletons`` and ``multiple`` are disjoint for every registered component. Prepared with the assistance of an AI coding agent (Anthropic's Claude Opus 4.8). @vtino17 (`Issue #1569 `_) -- :attr:`Alarm.REPEAT `, :attr:`Alarm.repeat `, :attr:`Event.sequence `, and :attr:`Event.priority ` now reject non-integers (including booleans) with :exc:`TypeError` and negative values with :exc:`~icalendar.error.InvalidCalendar`. @heyncth (`Issue #1594 `_) -- Added the missing ``BINARY`` member to :class:`icalendar.enums.VALUE`, per :rfc:`5545#section-3.2.20`. ``VALUE.BINARY`` previously raised :exc:`AttributeError`. Prepared with the assistance of an AI coding agent (Anthropic's Claude Opus 4.8). @vtino17 (`Issue #1607 `_) -- A ``PERIOD`` value written with dates instead of datetimes, such as ``RDATE;VALUE=PERIOD:19970101/19970102``, was accepted when a calendar was parsed and then raised an :exc:`AttributeError` when it was written out again, or a :exc:`TypeError` where only one half was a date. Such a value is now read as midnight, in the timezone of the other half where it has one. I used AI to assist me with this change. @lcampanella98 (`Issue #1633 `_) -- When :func:`timezone.use_pytz ` was in effect, a date parsed with a ``TZID``, such as ``RDATE;TZID=America/New_York;VALUE=DATE:19970101``, was given the timezone's oldest known offset, its local mean time, so the value was minutes off. It is now read with the offset that applied on that date. Calendars read with zoneinfo, the default, were not affected. I used AI to assist me with this change. @lcampanella98 (`Issue #1633 `_) -- Escape a lone ``\r`` as ``\n`` in ``icalendar.parser.string._escape_char``, used by :meth:`vText.to_ical `. A carriage return not followed by a line feed was previously left raw in the serialized content line, so a ``SUMMARY`` or ``DESCRIPTION`` built from untrusted text could carry a control character into the iCalendar stream and split the line for lenient consumers. ``\r\n`` and ``\n`` were already escaped, and the parameter escaper already mapped ``\r`` to ``^n``. @alhudz (`Pull Request #1462 `_) +- Resolve the timezone of a "globally unique" :rfc:`5545#section-3.2.19` ``TZID`` such as ``/freeassociation.sourceforge.net/Europe/Berlin``, which is emitted by some clients, including libical and Evolution. :meth:`TZP.timezone ` now strips the leading vendor prefix and resolves the trailing Olson identifier, so the value is parsed as timezone-aware instead of being silently treated as naive. Prepared with AI assistance. @vjsai (`Issue #313 `_) +- Fixed the :file:`equivalent_timezone_ids.py` script after the call to generate the timezone Python code was removed. @gjabell (`Issue #1392 `_) +- Values of unrecognized properties and ``X-`` properties without a ``VALUE`` parameter were altered by escaping when parsed, serialized, or converted to and from jCal, so they did not round-trip unchanged as :rfc:`7265` specifies. These values are now preserved verbatim. Additionally, the ``PROXIMITY`` property (:rfc:`9074`) was treated as an unknown value type instead of ``TEXT`` and is now recognized correctly. AI disclosure: I used Claude Code (Anthropic's Claude Opus) to draft and refine this change and its tests; I reviewed the output and validated the change locally. @lcampanella98 (`Issue #1445 `_) +- Ship :file:`funding.json` in PyPI source distributions so packaging and test runs from the sdist no longer fail with :class:`FileNotFoundError`. @Hishamkhashman1 (`Issue #1493 `_) +- Avoid folding content lines between escape prefixes and their escaped characters. AI disclosure: I used GPT-5 Codex to help draft and refine this change and its tests; I reviewed and validated the output locally. @kingrubic (`Issue #1501 `_) +- Preserve ``URI`` value parameters on a jCal round-trip. :meth:`vUri.from_jcal ` previously passed the parameters positionally, but ``vUri.__new__`` takes ``encoding`` as its second positional parameter. As a result, the ``URI`` value parameters were consumed as ``encoding`` and dropped. For example, ``ATTACH;FMTTYPE=...`` or ``CONFERENCE;FEATURE=...`` lost their parameters. They are now passed as the ``params`` keyword. Prepared with the assistance of an AI coding agent (Anthropic's Claude Opus 4.8). @gaoflow (`Issue #1526 `_) +- Updated the Windows timezone mapping for ``Mountain Standard Time (Mexico)`` to ``America/Mazatlan``, so dates after Mexico's 2022 timezone changes use the correct UTC-7 offset instead of UTC-6. Prepared with AI assistance. @RobHannay (`Issue #1546 `_) +- ``IMAGE`` properties now use their explicitly declared ``VALUE`` type instead of always being parsed as unknown, while ``IMAGE`` without a ``VALUE`` parameter remains unknown. I used OpenAI Codex with GPT-5 to assist with this change. @floze-the-genius (`Issue #1561 `_) +- Removed ``ATTACH`` from :attr:`Alarm.singletons `. An "email" ``VALARM`` may carry more than one ``ATTACH`` per :rfc:`5545#section-3.6.6`, so ``ATTACH`` belongs in ``multiple`` only; it was previously listed in both ``singletons`` and ``multiple``. Added a regression test that ``singletons`` and ``multiple`` are disjoint for every registered component. Prepared with the assistance of an AI coding agent (Anthropic's Claude Opus 4.8). @vtino17 (`Issue #1569 `_) +- :attr:`Alarm.REPEAT `, :attr:`Alarm.repeat `, :attr:`Event.sequence `, and :attr:`Event.priority ` now reject non-integers (including booleans) with :exc:`TypeError` and negative values with :exc:`~icalendar.error.InvalidCalendar`. @heyncth (`Issue #1594 `_) +- Added the missing ``BINARY`` member to :class:`icalendar.enums.VALUE`, per :rfc:`5545#section-3.2.20`. ``VALUE.BINARY`` previously raised :exc:`AttributeError`. Prepared with the assistance of an AI coding agent (Anthropic's Claude Opus 4.8). @vtino17 (`Issue #1607 `_) +- A ``PERIOD`` value written with dates instead of datetimes, such as ``RDATE;VALUE=PERIOD:19970101/19970102``, was accepted when a calendar was parsed and then raised an :exc:`AttributeError` when it was written out again, or a :exc:`TypeError` where only one half was a date. Such a value is now read as midnight, in the timezone of the other half where it has one. I used AI to assist me with this change. @lcampanella98 (`Issue #1633 `_) +- When :func:`timezone.use_pytz ` was in effect, a date parsed with a ``TZID``, such as ``RDATE;TZID=America/New_York;VALUE=DATE:19970101``, was given the timezone's oldest known offset, its local mean time, so the value was minutes off. It is now read with the offset that applied on that date. Calendars read with zoneinfo, the default, were not affected. I used AI to assist me with this change. @lcampanella98 (`Issue #1633 `_) +- Escape a lone ``\r`` as ``\n`` in ``icalendar.parser.string._escape_char``, used by :meth:`vText.to_ical `. A carriage return not followed by a line feed was previously left raw in the serialized content line, so a ``SUMMARY`` or ``DESCRIPTION`` built from untrusted text could carry a control character into the iCalendar stream and split the line for lenient consumers. ``\r\n`` and ``\n`` were already escaped, and the parameter escaper already mapped ``\r`` to ``^n``. @alhudz (`Pull Request #1462 `_) - Reject non-ASCII digits in the ``ordwk`` part of :class:`~icalendar.prop.recur.weekday.vWeekday` (``BYDAY``, ``BYWEEKDAY``, and ``WKST``). The value validation regular expression ``\d`` matches non-ASCII digits, such as the Arabic-Indic ``١٢``. A value such as ``١٢MO`` was silently accepted as ``relative == 12``, instead of being rejected, as required by :rfc:`5545#section-3.3.10` (``ordwk = 1*2DIGIT``). This mirrors the earlier :class:`~icalendar.prop.recur.month.vMonth` fix. Drafted with AI assistance (Claude Opus 4.8); reviewed, tested, and verified by the author. @Labib-Bin-Salam - Reject raw CR and LF in :class:`~icalendar.prop.uri.vUri`, :class:`~icalendar.prop.cal_address.vCalAddress`, :class:`~icalendar.prop.inline.vInline`, and :class:`~icalendar.prop.xml_reference.vXmlReference`. These value types are not escaped on serialization, so a lone ``\r`` in the value was written straight into the content line, slipping past the newline-only assertion in ``Contentline`` and reparsing as a separate property. This was reachable from untrusted jCal via ``URL``, ``ATTENDEE``, and ``ORGANIZER``. @alhudz - jCal property names, parameter names, and ``RRULE`` part names are now validated as lowercase iCalendar tokens when parsing jCal (RFC 7265 sections :rfc:`7265#section-3.4`, :rfc:`7265#section-3.5`, and :rfc:`7265#section-3.6.10`). They were kept verbatim and re-emitted into the content line on serialization, so a name containing ``:``, ``;``, or a lone carriage return could inject parameters or a new content line for consumers that treat a bare ``\r`` as a break. @alhudz @@ -63,28 +63,28 @@ Bug fixes Documentation ~~~~~~~~~~~~~ -- Added return type annotations to the ``new()`` factory methods of the :mod:`icalendar.cal` components, such as :meth:`Event.new `. @ShirayukiRin (`Issue #938 `_) -- Added a return type hint to the :meth:`TZP.use_default ` method. @Vishwa0223 (`Issue #938 `_) -- Added type annotations to ``__init__`` methods across the package. @ShirayukiRin (`Issue #938 `_) -- Added a return type annotation to :meth:`~icalendar.alarms.Alarms.add_component`. I used OpenAI GPT-5 Codex to identify the scoped method, draft the annotation and test, and review the validation results. @kudala-bharani (`Issue #938 `_) -- Added a ``bool`` return type annotation to :meth:`~icalendar.parser.parameter.Parameters.is_utc`. I used OpenAI Codex (GPT-5) to identify the method. @Ace-0 (`Issue #938 `_) -- Improved docstrings in :mod:`icalendar.error` to follow the project's Google-style docstring format, adding ``Parameters`` and ``Returns`` sections where appropriate. I used AI to assist me with this change. @Vrinda0211 (`Issue #1072 `_) -- Added a docstring to the :func:`~icalendar.cli.main` function to follow the project's Google Style guide. @Areej-cs (`Issue #1072 `_) -- Documented the construction and truth-value usage of :class:`~icalendar.prop.boolean.vBoolean`. I used OpenAI Codex with GPT-5 to assist with drafting and validation. @sahilmathur254 (`Issue #1118 `_) -- Fixed unqualified :exc:`~icalendar.error.InvalidCalendar` and :exc:`~icalendar.error.IncompleteComponent` references in :class:`~icalendar.cal.todo.Todo` docstrings so they link in the API docs. I used AI to assist me with this change. @mitre88 (`Issue #1158 `_) -- Fixed the broken link to :meth:`Component.to_ical ` in the documentation of how to handle parsing errors. AI disclosure: used Claude Sonnet 5 with the prompt "Fix broken links to Python objects in parse-errors.rst" to assist with this change. @SemTiOne (`Issue #1158 `_) -- Replaced RFC copy-paste text in docstrings with Pythonic docstrings for calendar components. @ykd007 (`Issue #1244 `_) -- Corrected the :meth:`Journal.new ` documentation so its parameter list matches the public method signature. I used AI to assist with this change. @w3lld1 (`Issue #1473 `_) -- Corrected the :meth:`FreeBusy.new ` docstring, which described the method as creating an alarm instead of a FreeBusy component. Written with assistance from Claude Opus 4.5 (Anthropic). @andycheng2018 (`Issue #1473 `_) -- Correct public docstrings whose prose looked like unsupported section headings. This contribution was drafted with AI assistance and reviewed by @kingrubic. (`Issue #1481 `_) -- Clarified optional parameters and auto-generated ``UID`` and ``DTSTAMP`` values in the :meth:`~icalendar.cal.event.Event.new` docstring. AI disclosure: Grok assisted with reviewing RFC terminology and drafting the docstring update. @checkzhao8888 (`Issue #1504 `_) -- Mention `icalendar-anonymizer `_ to remove private information from iCalendar files for bug reports and `Python Calendaring Ecosystem `_ as a resource. @stevepiercy (`Issue #1511 `_) -- Consolidate and alphabetize the docstring parameters of the :class:`~icalendar.cal.alarm.Alarm` factory methods :meth:`~icalendar.cal.alarm.Alarm.new_display`, :meth:`~icalendar.cal.alarm.Alarm.new_audio`, and :meth:`~icalendar.cal.alarm.Alarm.new_email`. Prefixed required parameters with ``Required.`` @Solaris-star (`Issue #1591 `_) -- Revised the security policy to use GitHub Security Advisory procedure instead of emailing the Plone security team, and clarified language. @stevepiercy (`Issue #1612 `_) -- Revised how to document parameters in docstrings, specifically their order of appearance and usage of type hints. Revised guidance to write docstrings only for a class, and not their ``__init__`` or ``__new__`` methods. @stevepiercy (`Issue #1618 `_) +- Added return type annotations to the ``new()`` factory methods of the :mod:`icalendar.cal` components, such as :meth:`Event.new `. @ShirayukiRin (`Issue #938 `_) +- Added a return type hint to the :meth:`TZP.use_default ` method. @Vishwa0223 (`Issue #938 `_) +- Added type annotations to ``__init__`` methods across the package. @ShirayukiRin (`Issue #938 `_) +- Added a return type annotation to :meth:`~icalendar.alarms.Alarms.add_component`. I used OpenAI GPT-5 Codex to identify the scoped method, draft the annotation and test, and review the validation results. @kudala-bharani (`Issue #938 `_) +- Added a ``bool`` return type annotation to :meth:`~icalendar.parser.parameter.Parameters.is_utc`. I used OpenAI Codex (GPT-5) to identify the method. @Ace-0 (`Issue #938 `_) +- Improved docstrings in :mod:`icalendar.error` to follow the project's Google-style docstring format, adding ``Parameters`` and ``Returns`` sections where appropriate. I used AI to assist me with this change. @Vrinda0211 (`Issue #1072 `_) +- Added a docstring to the :func:`~icalendar.cli.main` function to follow the project's Google Style guide. @Areej-cs (`Issue #1072 `_) +- Documented the construction and truth-value usage of :class:`~icalendar.prop.boolean.vBoolean`. I used OpenAI Codex with GPT-5 to assist with drafting and validation. @sahilmathur254 (`Issue #1118 `_) +- Fixed unqualified :exc:`~icalendar.error.InvalidCalendar` and :exc:`~icalendar.error.IncompleteComponent` references in :class:`~icalendar.cal.todo.Todo` docstrings so they link in the API docs. I used AI to assist me with this change. @mitre88 (`Issue #1158 `_) +- Fixed the broken link to :meth:`Component.to_ical ` in the documentation of how to handle parsing errors. AI disclosure: used Claude Sonnet 5 with the prompt "Fix broken links to Python objects in parse-errors.rst" to assist with this change. @SemTiOne (`Issue #1158 `_) +- Replaced RFC copy-paste text in docstrings with Pythonic docstrings for calendar components. @ykd007 (`Issue #1244 `_) +- Corrected the :meth:`Journal.new ` documentation so its parameter list matches the public method signature. I used AI to assist with this change. @w3lld1 (`Issue #1473 `_) +- Corrected the :meth:`FreeBusy.new ` docstring, which described the method as creating an alarm instead of a FreeBusy component. Written with assistance from Claude Opus 4.5 (Anthropic). @andycheng2018 (`Issue #1473 `_) +- Correct public docstrings whose prose looked like unsupported section headings. This contribution was drafted with AI assistance and reviewed by @kingrubic. (`Issue #1481 `_) +- Clarified optional parameters and auto-generated ``UID`` and ``DTSTAMP`` values in the :meth:`~icalendar.cal.event.Event.new` docstring. AI disclosure: Grok assisted with reviewing RFC terminology and drafting the docstring update. @checkzhao8888 (`Issue #1504 `_) +- Mention `icalendar-anonymizer `_ to remove private information from iCalendar files for bug reports and `Python Calendaring Ecosystem `_ as a resource. @stevepiercy (`Issue #1511 `_) +- Consolidate and alphabetize the docstring parameters of the :class:`~icalendar.cal.alarm.Alarm` factory methods :meth:`~icalendar.cal.alarm.Alarm.new_display`, :meth:`~icalendar.cal.alarm.Alarm.new_audio`, and :meth:`~icalendar.cal.alarm.Alarm.new_email`. Prefixed required parameters with ``Required.`` @Solaris-star (`Issue #1591 `_) +- Revised the security policy to use GitHub Security Advisory procedure instead of emailing the Plone security team, and clarified language. @stevepiercy (`Issue #1612 `_) +- Revised how to document parameters in docstrings, specifically their order of appearance and usage of type hints. Revised guidance to write docstrings only for a class, and not their ``__init__`` or ``__new__`` methods. @stevepiercy (`Issue #1618 `_) - Updated the ``categories`` property documentation to include the ``Available`` - and ``Availability`` components and its RFC 7953 conformance reference. (`Issue #1624 `_) -- Changed ``date-time`` to ``datetime`` in the narrative parts of the ``RECURRENCE-ID`` and ``ACKNOWLEDGED`` documentation. AI-assisted. @atirna (`Issue #1655 `_) + and ``Availability`` components and its RFC 7953 conformance reference. (`Issue #1624 `_) +- Changed ``date-time`` to ``datetime`` in the narrative parts of the ``RECURRENCE-ID`` and ``ACKNOWLEDGED`` documentation. AI-assisted. @atirna (`Issue #1655 `_) - Adapt pull request requirements to better handle AI slop. @stevepiercy - Add an RFC cross-reference and a ``Returns`` section to the :meth:`Contentline.value_separator_index ` docstring. @alhudz - Added a bullet point for reviewing pull requests to "Examples of how to contribute." @stevepiercy @@ -96,17 +96,17 @@ Documentation Internal changes ~~~~~~~~~~~~~~~~ -- Renamed the internal ``timezone_datetime_property`` helper in ``icalendar.attr`` to ``_timezone_datetime_property``. It was never part of the public API (not listed in ``__all__``) and is only used at import time to build ``rfc_7953_dtstart_property`` and ``rfc_7953_dtend_property``, so no deprecation warning was added. I used AI to assist me with this change. @AhmedYoussef98 (`Issue #1011 `_) -- Added automated tests for docstring structure and quality. @KartavyaDikshit (`Issue #1481 `_) -- Added zizmor static analysis workflow for GitHub Actions security auditing. @srurora (`Issue #1487 `_) -- Ensure that news fragment filenames are valid in CI. @stevepiercy (`Issue #1499 `_) -- Add Commit-Check GitHub Action to detect commits by automated AI agents and bots. @stevepiercy (`Issue #1514 `_) -- The Windows-to-Olson mapping test now verifies each mapped timezone resolves to the expected identifier. I used OpenAI Codex with GPT-5 to assist with this change. @floze-the-genius (`Issue #1562 `_) -- Bumped maximum pull request description character count to 1500. Added instructions as comments in the pull request template. @stevepiercy (`Issue #1602 `_) -- Added a ``make zizmor`` target that runs zizmor static analysis on the GitHub Actions workflows in the repository, matching the version and command used in the continuous integration workflow. Added zizmor usage documentation. AI disclosure: used Claude Sonnet 5 with the prompt "Create a make zizmor target for local static analysis of GitHub Actions workflows" to assist with this change. @SemTiOne (`Issue #1639 `_) -- Removed two unreachable code branches from :meth:`vOrg.from_ical ` and :meth:`vOrg.from_jcal `. I used Claude Code (Anthropic's Claude Sonnet 5) to identify and remove the dead branches and to update the accompanying coverage tests; I reviewed the diff and ran the test suite locally. @vjymisal0 (`Issue #1641 `_) +- Renamed the internal ``timezone_datetime_property`` helper in ``icalendar.attr`` to ``_timezone_datetime_property``. It was never part of the public API (not listed in ``__all__``) and is only used at import time to build ``rfc_7953_dtstart_property`` and ``rfc_7953_dtend_property``, so no deprecation warning was added. I used AI to assist me with this change. @AhmedYoussef98 (`Issue #1011 `_) +- Added automated tests for docstring structure and quality. @KartavyaDikshit (`Issue #1481 `_) +- Added zizmor static analysis workflow for GitHub Actions security auditing. @srurora (`Issue #1487 `_) +- Ensure that news fragment filenames are valid in CI. @stevepiercy (`Issue #1499 `_) +- Add Commit-Check GitHub Action to detect commits by automated AI agents and bots. @stevepiercy (`Issue #1514 `_) +- The Windows-to-Olson mapping test now verifies each mapped timezone resolves to the expected identifier. I used OpenAI Codex with GPT-5 to assist with this change. @floze-the-genius (`Issue #1562 `_) +- Bumped maximum pull request description character count to 1500. Added instructions as comments in the pull request template. @stevepiercy (`Issue #1602 `_) +- Added a ``make zizmor`` target that runs zizmor static analysis on the GitHub Actions workflows in the repository, matching the version and command used in the continuous integration workflow. Added zizmor usage documentation. AI disclosure: used Claude Sonnet 5 with the prompt "Create a make zizmor target for local static analysis of GitHub Actions workflows" to assist with this change. @SemTiOne (`Issue #1639 `_) +- Removed two unreachable code branches from :meth:`vOrg.from_ical ` and :meth:`vOrg.from_jcal `. I used Claude Code (Anthropic's Claude Sonnet 5) to identify and remove the dead branches and to update the accompanying coverage tests; I reviewed the diff and ran the test suite locally. @vjymisal0 (`Issue #1641 `_) - Added ``security`` as a valid news fragment. @stevepiercy -- Added anti-slop GitHub Action to detect commits by automated AI agents and bots. Removed useless Commit-Check GitHub Action. See related `discussion `_. @stevepiercy +- Added anti-slop GitHub Action to detect commits by automated AI agents and bots. Removed useless Commit-Check GitHub Action. See related `discussion `_. @stevepiercy - Adjusted the anti-slop GitHub Action settings of ``max-failures`` to ``1`` to surface any number of failures, and the ``min-profile-completeness`` setting from its default of ``4`` to ``1`` to require at least one human-added profile attribute. @stevepiercy - Don't close pull requests automatically when the anti-slop GitHub Action fails. @stevepiercy - Made "Instructions" not a section heading in the pull request template. "Instructions" was interpreted as a section heading, even though it is in a comment. @stevepiercy @@ -116,7 +116,7 @@ Internal changes Other tasks ~~~~~~~~~~~ -- `Issue #698 `_, `Issue #698 `_, `Issue #698 `_, `Issue #743 `_, `Issue #1541 `_, `Issue #1549 `_, `Issue #1573 `_, `Issue #1592 `_ +- `Issue #698 `_, `Issue #698 `_, `Issue #698 `_, `Issue #743 `_, `Issue #1541 `_, `Issue #1549 `_, `Issue #1573 `_, `Issue #1592 `_ 7.2.2 (2026-07-20) @@ -134,7 +134,7 @@ Documentation Security fixes ~~~~~~~~~~~~~~ -- Fixed `GHSA-qjcq-q7h7-r74v, `_ and published as `CVE ID: CVE-2026-77399 `_: a crafted ``REPEAT`` on a ``VALARM`` could exhaust memory or CPU via :attr:`Alarm.triggers ` and :class:`~icalendar.alarms.Alarms`. Expansion is now capped at ``icalendar.config.MAX_ALARM_REPEAT``. Its default is ``10000``. Set to ``-1`` to disable the cap. :class:`~icalendar.prop.integer.vInt` now also enforces the :rfc:`5545` signed 32-bit integer range on parse. @SashankBhamidi +- Fixed `GHSA-qjcq-q7h7-r74v, `_ and published as `CVE ID: CVE-2026-77399 `_: a crafted ``REPEAT`` on a ``VALARM`` could exhaust memory or CPU via :attr:`Alarm.triggers ` and :class:`~icalendar.alarms.Alarms`. Expansion is now capped at ``icalendar.config.MAX_ALARM_REPEAT``. Its default is ``10000``. Set to ``-1`` to disable the cap. :class:`~icalendar.prop.integer.vInt` now also enforces the :rfc:`5545` signed 32-bit integer range on parse. @SashankBhamidi 7.2.0 (2026-06-23) @@ -143,28 +143,28 @@ Security fixes Removals and deprecations ~~~~~~~~~~~~~~~~~~~~~~~~~ -- Deprecated :func:`icalendar.parser.string.foldline` as a private function for icalendar version 8. @IoannaGiag (`Issue #1011 `_) -- Deprecated :func:`icalendar.parser.string.escape_char`, :func:`icalendar.parser.string.unescape_char`, :func:`icalendar.parser.string.escape_string`, and :func:`icalendar.parser.string.unescape_string` using the standard ``deprecate_for_version_8`` wrapper as per issue #1405. (`Issue #1405 `_) +- Deprecated :func:`icalendar.parser.string.foldline` as a private function for icalendar version 8. @IoannaGiag (`Issue #1011 `_) +- Deprecated :func:`icalendar.parser.string.escape_char`, :func:`icalendar.parser.string.unescape_char`, :func:`icalendar.parser.string.escape_string`, and :func:`icalendar.parser.string.unescape_string` using the standard ``deprecate_for_version_8`` wrapper as per issue #1405. (`Issue #1405 `_) New features ~~~~~~~~~~~~ -- Created an :attr:`~icalendar.prop.recur.frequency.vFrequency.ical_value` property for the :class:`~icalendar.prop.recur.frequency.vFrequency` component, mirroring the existing pattern on :class:`~icalendar.prop.recur.weekday.vWeekday`. @mvanhorn (`Issue #876 `_) -- Created an :attr:`~icalendar.prop.geo.vGeo.ical_value` property for the :class:`~icalendar.prop.geo.vGeo` component. @IoannaGiag (`Issue #876 `_) -- Added type hints to component methods. @Priyanshu-pulak (`Issue #938 `_) -- Added test coverage for :func:`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 :attr:`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 `_) +- Created an :attr:`~icalendar.prop.recur.frequency.vFrequency.ical_value` property for the :class:`~icalendar.prop.recur.frequency.vFrequency` component, mirroring the existing pattern on :class:`~icalendar.prop.recur.weekday.vWeekday`. @mvanhorn (`Issue #876 `_) +- Created an :attr:`~icalendar.prop.geo.vGeo.ical_value` property for the :class:`~icalendar.prop.geo.vGeo` component. @IoannaGiag (`Issue #876 `_) +- Added type hints to component methods. @Priyanshu-pulak (`Issue #938 `_) +- Added test coverage for :func:`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 :attr:`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 :class:`~icalendar.prop.dt.datetime.vDatetime` values in :meth:`~icalendar.prop.dt.datetime.vDatetime.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 :meth:`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 :exc:`OSError` from :meth:`Component.from_ical `. Such input now raises a consistent :exc:`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 :exc:`TypeError` and the value round-trips. Prepared with the assistance of an AI coding agent (Anthropic's Claude Opus 4). @gaoflow @texttheater (`Issue #1439 `_) +- Strictly validate :class:`~icalendar.prop.dt.datetime.vDatetime` values in :meth:`~icalendar.prop.dt.datetime.vDatetime.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 :meth:`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 :exc:`OSError` from :meth:`Component.from_ical `. Such input now raises a consistent :exc:`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 :exc:`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 :class:`~icalendar.prop.recur.weekday.vWeekday`, :meth:`vDuration.from_ical `, :class:`~icalendar.prop.dt.time.vTime` and :class:`~icalendar.prop.dt.utc_offset.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 :meth:`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 @@ -179,23 +179,23 @@ Bug fixes Documentation ~~~~~~~~~~~~~ -- Switch :file:`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 :func:`~icalendar.parser_tools.data_encode`. @cybs-joe (`Issue #938 `_) -- Converted docstring of :meth:`~icalendar.cal.component.Component.add` to Google style. @mvanhorn (`Issue #1072 `_) -- Fixed broken links and removed `:py` prefix in :class:`icalendar.cal.calendar.Calendar` documentation. @lcampanella98 (`Issue #1158 `_) -- Fixed broken link and removed `:py` prefix in the :func:`~icalendar.parser.property.unescape_backslash` docstring. @vincere-mori (`Issue #1158 `_) -- Fixed broken documentation links in :mod:`icalendar.alarms` and :mod:`icalendar.cal.alarm`. @lcampanella98 (`Issue #1158 `_) -- Fix unqualified cross-references in :attr:`Event.start ` and :attr:`Event.start ` docstrings. @Esneider1107 (`Issue #1158 `_) -- Fixed broken links in :mod:`icalendar.cal.free_busy` documentation by using fully qualified :class:`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 :mod:`icalendar.cal.availability`. @lcampanella98 (`Issue #1158 `_) -- Replaced the RFC quotation in the docstring for :class:`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 :attr:`~icalendar.cal.component.Component.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 :meth:`Calendar.new ` automatically sets not only required, but recommended properties too. @scop (`Issue #1459 `_) -- Add how to report security issues. @stevepiercy (`Issue #1463 `_) +- Switch :file:`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 :func:`~icalendar.parser_tools.data_encode`. @cybs-joe (`Issue #938 `_) +- Converted docstring of :meth:`~icalendar.cal.component.Component.add` to Google style. @mvanhorn (`Issue #1072 `_) +- Fixed broken links and removed `:py` prefix in :class:`icalendar.cal.calendar.Calendar` documentation. @lcampanella98 (`Issue #1158 `_) +- Fixed broken link and removed `:py` prefix in the :func:`~icalendar.parser.property.unescape_backslash` docstring. @vincere-mori (`Issue #1158 `_) +- Fixed broken documentation links in :mod:`icalendar.alarms` and :mod:`icalendar.cal.alarm`. @lcampanella98 (`Issue #1158 `_) +- Fix unqualified cross-references in :attr:`Event.start ` and :attr:`Event.start ` docstrings. @Esneider1107 (`Issue #1158 `_) +- Fixed broken links in :mod:`icalendar.cal.free_busy` documentation by using fully qualified :class:`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 :mod:`icalendar.cal.availability`. @lcampanella98 (`Issue #1158 `_) +- Replaced the RFC quotation in the docstring for :class:`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 :attr:`~icalendar.cal.component.Component.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 :meth:`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 :ref:`change-log` in Contribute documentation for how to avoid a filename conflict when adding a change log entry. @stevepiercy - Collect only documentation files for doctest. @stevepiercy @@ -205,12 +205,12 @@ Documentation Internal changes ~~~~~~~~~~~~~~~~ -- Added tests for :attr:`FreeBusy.duration ` coverage. @kyriakikrimitza (`Issue #698 `_) -- Refactored :file:`test_error_tolerant_parsing.py` to use ``.ics`` fixture files. @lcampanella98 (`Issue #1081 `_) -- Added :file:`.pre-commit-config.yaml` configuration and documentation to automatically record AI prompts in commit messages with :program:`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 tests for :attr:`FreeBusy.duration ` coverage. @kyriakikrimitza (`Issue #698 `_) +- Refactored :file:`test_error_tolerant_parsing.py` to use ``.ics`` fixture files. @lcampanella98 (`Issue #1081 `_) +- Added :file:`.pre-commit-config.yaml` configuration and documentation to automatically record AI prompts in commit messages with :program:`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 :attr:`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 @@ -218,7 +218,7 @@ Internal changes Other tasks ~~~~~~~~~~~ -- Added type hints to all methods in the module :mod:`~icalendar.error`. @Priyanshu-pulak (`Issue #938 `_) +- Added type hints to all methods in the module :mod:`~icalendar.error`. @Priyanshu-pulak (`Issue #938 `_) 7.1.3 (2026-06-15) @@ -227,7 +227,7 @@ Other tasks Bug fixes ~~~~~~~~~ -- Comparing components with ``Component.__eq__`` is no longer exponential in the subcomponent nesting depth, removing a denial-of-service vector where a deeply nested component could take minutes to compare. See `GHSA-cv84-9p8j-fj68 `_. @tidusec +- Comparing components with ``Component.__eq__`` is no longer exponential in the subcomponent nesting depth, removing a denial-of-service vector where a deeply nested component could take minutes to compare. See `GHSA-cv84-9p8j-fj68 `_. @tidusec 7.1.2 (2026-05-22) @@ -236,13 +236,13 @@ Bug fixes Bug fixes ~~~~~~~~~ -- Replaced the recursive ``Component.__repr__`` implementation with an iterative stack-based walk so that deeply nested calendars no longer raise :exc:`RecursionError` when formatted via ``repr()``, ``str()``, or f-strings. The output format is unchanged for normally-shaped calendars. @gistrec (`Issue #1370 `_) +- Replaced the recursive ``Component.__repr__`` implementation with an iterative stack-based walk so that deeply nested calendars no longer raise :exc:`RecursionError` when formatted via ``repr()``, ``str()``, or f-strings. The output format is unchanged for normally-shaped calendars. @gistrec (`Issue #1370 `_) Documentation ~~~~~~~~~~~~~ -- Update maintenance documentation. Fix the version switcher on "stable" on Read the Docs. @stevepiercy (`Issue #1352 `_) +- Update maintenance documentation. Fix the version switcher on "stable" on Read the Docs. @stevepiercy (`Issue #1352 `_) 7.1.1 (2026-05-18) @@ -251,35 +251,35 @@ Documentation New features ~~~~~~~~~~~~ -- Created an :attr:`~icalendar.prop.dt.period.vPeriod.ical_value` property for the :class:`~icalendar.prop.dt.period.vPeriod` component. @ZairKSM (`Issue #876 `_) -- Created a :meth:`~icalendar.prop.recur.weekday.vWeekday.ical_value` property for the :class:`~icalendar.prop.recur.weekday.vWeekday` component, mirroring the existing pattern on :class:`~icalendar.prop.boolean.vBoolean`. @mvanhorn (`Issue #1360 `_) +- Created an :attr:`~icalendar.prop.dt.period.vPeriod.ical_value` property for the :class:`~icalendar.prop.dt.period.vPeriod` component. @ZairKSM (`Issue #876 `_) +- Created a :meth:`~icalendar.prop.recur.weekday.vWeekday.ical_value` property for the :class:`~icalendar.prop.recur.weekday.vWeekday` component, mirroring the existing pattern on :class:`~icalendar.prop.boolean.vBoolean`. @mvanhorn (`Issue #1360 `_) Bug fixes ~~~~~~~~~ -- Strictly validate BINARY property values in :attr:`vBinary.from_ical() ` and reject malformed Base64 input instead of silently accepting invalid characters. @uwezkhan (`Issue #1349 `_) +- Strictly validate BINARY property values in :attr:`vBinary.from_ical() ` and reject malformed Base64 input instead of silently accepting invalid characters. @uwezkhan (`Issue #1349 `_) Documentation ~~~~~~~~~~~~~ -- Replace the RFC quotations in the docstrings for :attr:`Alarm.REPEAT ` and :attr:`Alarm.DURATION ` with Pythonic descriptions, including parameter notes, conformance references, and worked examples. @tmchow (`Issue #1244 `_) -- Edited contributor documentation for how to add a change log entry, and maintenance documentation for how to process news fragments. @stevepiercy (`Issue #1256 `_) -- Updated release process documentation. @niccokunzmann @stevepiercy @SashankBhamidi (`Issue #1293 `_) +- Replace the RFC quotations in the docstrings for :attr:`Alarm.REPEAT ` and :attr:`Alarm.DURATION ` with Pythonic descriptions, including parameter notes, conformance references, and worked examples. @tmchow (`Issue #1244 `_) +- Edited contributor documentation for how to add a change log entry, and maintenance documentation for how to process news fragments. @stevepiercy (`Issue #1256 `_) +- Updated release process documentation. @niccokunzmann @stevepiercy @SashankBhamidi (`Issue #1293 `_) Dependency changes ~~~~~~~~~~~~~~~~~~ -- Added `towncrier `_ to development dependencies. @stevepiercy (`Issue #1256 `_) +- Added `towncrier `_ to development dependencies. @stevepiercy (`Issue #1256 `_) Internal changes ~~~~~~~~~~~~~~~~ -- Switched from manual change log management to `towncrier `_ to automate the process. @stevepiercy (`Issue #1256 `_) -- Bump PyPy from 3.10 to 3.11 for testing. @stevepiercy (`Issue #1383 `_) +- Switched from manual change log management to `towncrier `_ to automate the process. @stevepiercy (`Issue #1256 `_) +- Bump PyPy from 3.10 to 3.11 for testing. @stevepiercy (`Issue #1383 `_) 7.1.0 (2026-04-30) @@ -343,7 +343,7 @@ Documentation - Documented ``vText`` properties according to :rfc:`5545#section-3.3.11`. :issue:`742` - Convert docstrings in :mod:`icalendar.caselessdict` to Google Style format with ``Parameters``, ``Returns``, ``Raises``, and ``Example`` sections as appropriate. :issue:`1072` - Fix broken docstring for :meth:`~icalendar.cal.component.Component.add_component` link in :attr:`~icalendar.cal.availability.Availability.available`. :issue:`1158` -- Revise AI policy, per NLnet advice. See discussion under `pycal.org issue #24 `_. +- Revise AI policy, per NLnet advice. See discussion under `pycal.org issue #24 `_. - Add documentation for how to use uv for development. :issue:`1102` - Reorganize Design documentation. :issue:`1292` - Improve docstring for ``categories_property``, which renders to HTML in :attr:`Calendar.categories `, :attr:`Event.categories `, :attr:`Journal.categories `, and :attr:`Todo.categories `. :issue:`1244` @@ -878,7 +878,7 @@ Breaking changes New features ~~~~~~~~~~~~ -- Add `Security Policy `_ +- Add `Security Policy `_ - Python types in documentation now link to their documentation pages using ``intersphinx``. 6.1.0 (2024-11-22) @@ -944,7 +944,7 @@ Bug fixes - Fix a few ``__all__`` variables. - Added missing ``docs`` folder to distribution packages. See :issue:`712`. -.. _`Discussion 662`: https://github.com/collective/icalendar/discussions/662 +.. _`Discussion 662`: https://github.com/PyCalendar/icalendar/discussions/662 6.0.0 (2024-09-28) ------------------ @@ -982,7 +982,7 @@ Minor changes - Make coverage report submission optional for pull requests - Parallelize coverage - Rename ``master`` branch to ``main``, see `Issue - `_ + `_ - Update ``docs/usage.rst`` to use zoneinfo instead of pytz. - Added missing public classes and functions to API documentation. - Improved namespace management in the ``icalendar`` directory. @@ -1054,7 +1054,7 @@ Bug fixes - Change documentation to represent compatibility with Python 3.8 - 3.12, and PyPy3. - Rename RFC 2445 to RFC 5545, see `Issue 278 - `_ + `_ 5.0.13 (2024-06-20) ------------------- @@ -1996,7 +1996,7 @@ Fixes: 2.2 (2011-08-24) ---------------- -- migration to https://github.com/collective/icalendar using svn2git preserving +- migration to https://github.com/PyCalendar/icalendar using svn2git preserving tags, branches and authors. [garbas] diff --git a/README.rst b/README.rst index 79f0395fc..cf33c4e10 100644 --- a/README.rst +++ b/README.rst @@ -12,11 +12,11 @@ icalendar supports multiple timezone implementations, including `zoneinfo `_ and `tzdata `_. -:License: `2-Clause BSD License `_ +:License: `2-Clause BSD License `_ :Contribute: `Contribute to icalendar `_ :Funding: `Open Collective `_ :icalendar chat: https://matrix.to/#/%23icalendar:chat.pycal.org @@ -29,7 +29,7 @@ icalendar supports multiple timezone implementations, including `zoneinfo `_ to your account through the GitHub interface. +#. Start by `forking icalendar's repository `_ to your account through the GitHub interface. .. seealso:: diff --git a/docs/_include/configure-git.inc b/docs/_include/configure-git.inc index a211b44bb..07d89b533 100644 --- a/docs/_include/configure-git.inc +++ b/docs/_include/configure-git.inc @@ -1,7 +1,7 @@ Configure Git ------------- -Unless you're a maintainer or administrator, you don't have write access to push commits to GitHub repositories under the Collective organization or the icalendar repository. +Unless you're a maintainer or administrator, you don't have write access to push commits to GitHub repositories under the PyCalendar organization or the icalendar repository. You can, however, push commits to your fork. Thus, a typical workflow will be circular in nature. You'll pull code from the upstream icalendar repository, push your work from your local clone to your remote fork, then make a pull request from your fork to the upstream icalendar repository. diff --git a/docs/_templates/404.html b/docs/_templates/404.html index 930ad992a..5e112c6f9 100644 --- a/docs/_templates/404.html +++ b/docs/_templates/404.html @@ -13,7 +13,7 @@

Page not found

Why is this happening?

The icalendar documentation team has restructured documentation to redirect visitors to the most current and accurate information, archive previous versions, and identify outdated pages. - If you would like to report an issue or request a redirect be set up, you can create a new issue in the GitHub issue tracker. + If you would like to report an issue or request a redirect be set up, you can create a new issue in the GitHub issue tracker.

diff --git a/docs/conf.py b/docs/conf.py index 77d9b90b2..4efd0dc8a 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -69,7 +69,7 @@ "icon_links": [ { "name": "GitHub", - "url": "https://github.com/collective/icalendar", + "url": "https://github.com/PyCalendar/icalendar", "icon": "fa-brands fa-square-github", "type": "fontawesome", "attributes": { @@ -109,7 +109,7 @@ } html_context = { # "github_url": "https://github.com", # or your GitHub Enterprise site - "github_user": "collective", + "github_user": "PyCalendar", "github_repo": "icalendar", "github_version": "main", "doc_path": "docs", @@ -129,16 +129,16 @@ # Ignore pages that require authentication r"https://app.readthedocs.org/dashboard/icalendar/users/create/", r"https://docutils.sourceforge.io/rst.html", - r"https://github.com/collective/icalendar/fork", - r"https://github.com/collective/icalendar/issues/new", - r"https://github.com/collective/icalendar/settings/", + r"https://github.com/PyCalendar/icalendar/fork", + r"https://github.com/PyCalendar/icalendar/issues/new", + r"https://github.com/PyCalendar/icalendar/settings/", r"https://groups.google.com/g/icalendar-coc/", r"https://pypi.org/manage/project/icalendar/collaboration/", # Ignore specific anchors r"https://github.com/actions/python-versions#support-policy", - r"https://github.com/collective/icalendar/blob/7ca9db18c0847d1530520e01baf75f8ab8f4fa06/pyproject.toml#L32", - r"https://github.com/collective/icalendar/blob/main/CODE_OF_CONDUCT.md#enforcement", - r"https://github.com/collective/icalendar/blob/main/README.rst#related-projects", + r"https://github.com/PyCalendar/icalendar/blob/7ca9db18c0847d1530520e01baf75f8ab8f4fa06/pyproject.toml#L32", + r"https://github.com/PyCalendar/icalendar/blob/main/CODE_OF_CONDUCT.md#enforcement", + r"https://github.com/PyCalendar/icalendar/blob/main/README.rst#related-projects", r"https://up-for-grabs.net/#/filters", # Ignore links that are unstable r"https://www.unicode.org/cldr/cldr-aux/charts/29/supplemental/zone_tzid.html", @@ -227,7 +227,7 @@ # -- sphinx_issues configuration ---------------------------------- -issues_github_path = "collective/icalendar" +issues_github_path = "PyCalendar/icalendar" # -- sphinx_reredirects configuration ---------------------------------- @@ -240,9 +240,9 @@ "credits": "contribute/credits.html", "contributing": "contribute/index.html", "install": "how-to/install.html", - "license": "https://github.com/collective/icalendar/blob/main/LICENSE.rst", + "license": "https://github.com/PyCalendar/icalendar/blob/main/LICENSE.rst", "maintenance": "contribute/maintenance.html", - "security": "https://github.com/collective/icalendar/blob/main/SECURITY.md", + "security": "https://github.com/PyCalendar/icalendar/blob/main/SECURITY.md", "usage": "how-to/usage.html", } diff --git a/docs/contribute/credits.rst b/docs/contribute/credits.rst index 8dc384f8a..0688bfc5d 100644 --- a/docs/contribute/credits.rst +++ b/docs/contribute/credits.rst @@ -28,9 +28,9 @@ Contributors Become part of the list of :doc:`contributors `. -.. image:: https://contrib.rocks/image?repo=collective/icalendar&max=120&columns=10 +.. image:: https://contrib.rocks/image?repo=PyCalendar/icalendar&max=120&columns=10 :alt: icalendar contributors - :target: https://github.com/collective/icalendar/graphs/contributors + :target: https://github.com/PyCalendar/icalendar/graphs/contributors :loading: lazy diff --git a/docs/contribute/development.rst b/docs/contribute/development.rst index 60c136bf2..7264ceb8e 100644 --- a/docs/contribute/development.rst +++ b/docs/contribute/development.rst @@ -76,7 +76,7 @@ You can automate this by using the :program:`ai-prompt-auto-commit` hooks. If you use :program:`Claude Code`, recording is automatic, once the repository is prepared. For other AI tools, you may need to manually record prompts or instruct the AI to do so. -Consider adding support for your AI tool in the `project repository `_. +Consider adding support for your AI tool in the `project repository `_. Contributors to icalendar are encouraged to use prek. Any issues that would be caught by prek shall be caught by GitHub workflows when you push commits to a pull request for icalendar. diff --git a/docs/contribute/documentation/build-check.rst b/docs/contribute/documentation/build-check.rst index 473c2fb97..f96f84f8b 100644 --- a/docs/contribute/documentation/build-check.rst +++ b/docs/contribute/documentation/build-check.rst @@ -24,9 +24,9 @@ This chapter describes how to build and check the quality of documentation. File locations -------------- -Narrative documentation files are located in the `docs `_ directory. +Narrative documentation files are located in the `docs `_ directory. -:doc:`API reference documentation files ` are located in the `src `_ directory. +:doc:`API reference documentation files ` are located in the `src `_ directory. .. _documentation-make-commands: diff --git a/docs/contribute/documentation/index.rst b/docs/contribute/documentation/index.rst index 8d9745b19..158d0619c 100644 --- a/docs/contribute/documentation/index.rst +++ b/docs/contribute/documentation/index.rst @@ -25,7 +25,7 @@ Find open issues to work on by clicking either button below. .. grid-item:: - .. button-link:: https://github.com/collective/icalendar/issues?q=is%3Aissue%20state%3Aopen%20label%3A%22doc%22 + .. button-link:: https://github.com/PyCalendar/icalendar/issues?q=is%3Aissue%20state%3Aopen%20label%3A%22doc%22 :color: success :shadow: @@ -33,7 +33,7 @@ Find open issues to work on by clicking either button below. .. grid-item:: - .. button-link:: https://github.com/collective/icalendar/issues?q=is%3Aissue%20state%3Aopen%20label%3A%22good%20first%20issue%22 + .. button-link:: https://github.com/PyCalendar/icalendar/issues?q=is%3Aissue%20state%3Aopen%20label%3A%22good%20first%20issue%22 :color: primary :shadow: diff --git a/docs/contribute/documentation/small-edits.rst b/docs/contribute/documentation/small-edits.rst index a843d1d71..66a074a42 100644 --- a/docs/contribute/documentation/small-edits.rst +++ b/docs/contribute/documentation/small-edits.rst @@ -9,8 +9,8 @@ For small edits to the documentation, use the GitHub web interface. #. On every page in documentation, on the right-hand side, there is a link :guilabel:`Edit on GitHub`. When you click that link, you'll be taken to GitHub's web interface where you can edit files. - Alternatively, for narrative documentation files, you can navigate into the `docs `_ directory to find the source file to edit. - For :doc:`API reference documentation files `, you can instead navigate into the `src `_ directory. + Alternatively, for narrative documentation files, you can navigate into the `docs `_ directory to find the source file to edit. + For :doc:`API reference documentation files `, you can instead navigate into the `src `_ directory. For either file type, you can then click the :guilabel:`pencil icon` to edit the file in the browser. .. image:: /_static/edit-pencil-icon.png diff --git a/docs/contribute/documentation/style-guide.rst b/docs/contribute/documentation/style-guide.rst index 7ba68fc5e..2e5098c84 100644 --- a/docs/contribute/documentation/style-guide.rst +++ b/docs/contribute/documentation/style-guide.rst @@ -294,8 +294,8 @@ The following docstrings items are the most frequently used in icalendar, althou .. seealso:: - - `Document __new__ methods `_ - - `Merge __init__ or __new__ docstrings into their class's docstring `_ + - `Document __new__ methods `_ + - `Merge __init__ or __new__ docstrings into their class's docstring `_ Summary Docstrings must begin with a one-line summary of the Python object, terminated by a period. diff --git a/docs/contribute/index.rst b/docs/contribute/index.rst index 04d2e931e..030ee9700 100644 --- a/docs/contribute/index.rst +++ b/docs/contribute/index.rst @@ -20,8 +20,8 @@ If you have questions or want to get in touch before you begin, see the :ref:`Co Code contributions `````````````````` -- Report security issues per the `Security Policy `_. -- Report all other issues in the `issue tracker `_. +- Report security issues per the `Security Policy `_. +- Report all other issues in the `issue tracker `_. - Submit pull requests from your fork of the icalendar repository. @@ -29,7 +29,7 @@ Triage and review ````````````````` - Comment on and resolve issues. -- Triage open issues and `pull requests `_. +- Triage open issues and `pull requests `_. - Review, comment on, and make suggestions to change a pull request. See the GitHub documentation `Reviewing proposed changes in a pull request `_. - Reproduce an issue and add a comment with your findings. @@ -46,9 +46,9 @@ Community ````````` - Join the `Python Calendaring Ecosystem (PyCal) space `_ via `Matrix `_ to access all community channels. -- Create or comment on a topic in `Discussions `_. +- Create or comment on a topic in `Discussions `_. - Write a blog post about icalendar. -- Star or watch us on `GitHub `_. +- Star or watch us on `GitHub `_. - Follow us on `Mastodon `_. - Follow us on `LinkedIn `_. - Share announcements on social media from :doc:`core contributors ` to icalendar. @@ -85,7 +85,7 @@ Accordingly, you may request of the maintainers in your pull request that you wo .. grid-item:: - .. button-link:: https://github.com/collective/icalendar/issues?q=is%3Aissue%20state%3Aopen%20label%3A%22good%20first%20issue%22 + .. button-link:: https://github.com/PyCalendar/icalendar/issues?q=is%3Aissue%20state%3Aopen%20label%3A%22good%20first%20issue%22 :color: primary :shadow: @@ -93,7 +93,7 @@ Accordingly, you may request of the maintainers in your pull request that you wo .. grid-item:: - .. button-link:: https://github.com/collective/icalendar/issues?q=is%3Aissue%20state%3Aopen%20label%3A%22doc%22 + .. button-link:: https://github.com/PyCalendar/icalendar/issues?q=is%3Aissue%20state%3Aopen%20label%3A%22doc%22 :color: success :shadow: @@ -101,7 +101,7 @@ Accordingly, you may request of the maintainers in your pull request that you wo .. grid-item:: - .. button-link:: https://github.com/collective/icalendar/issues?q=is%3Aissue%20state%3Aopen%20label%3Ahacktoberfest + .. button-link:: https://github.com/PyCalendar/icalendar/issues?q=is%3Aissue%20state%3Aopen%20label%3Ahacktoberfest :color: warning :shadow: @@ -185,7 +185,7 @@ Issue requirements An issue should precede a pull request. -When `creating a new issue `_, you'll be presented with an issue selector. +When `creating a new issue `_, you'll be presented with an issue selector. Follow the templates guidance as much as practical. It might be helpful to include an iCalendar file to help reproduce your issue and to use in a test to ensure a bug fix actually resolves your issue. @@ -279,7 +279,7 @@ Change log types ``security`` For security fixes. - These must go through the `security report protocol `_. + These must go through the `security report protocol `_. ``documentation`` For changes to the documentation, docstrings, spelling dictionary, or any other documentation matter. diff --git a/docs/contribute/join-the-icalendar-team.rst b/docs/contribute/join-the-icalendar-team.rst index a93df7572..e06cd60d2 100644 --- a/docs/contribute/join-the-icalendar-team.rst +++ b/docs/contribute/join-the-icalendar-team.rst @@ -49,7 +49,7 @@ Apply If you're interested in applying to join the team, you may: -- Create a new `Discussion topic `_ under the Collaborator nominations category. +- Create a new `Discussion topic `_ under the Collaborator nominations category. - Post a message to the `Matrix icalendar chat `_. Additionally, the icalendar team may contact you to encourage you to apply. diff --git a/docs/contribute/maintenance.rst b/docs/contribute/maintenance.rst index 5a09e1244..617df9824 100644 --- a/docs/contribute/maintenance.rst +++ b/docs/contribute/maintenance.rst @@ -13,8 +13,8 @@ Currently the maintainers are the following people. Maintainers need the following permissions. -``Admin`` access to the `repository `_. - These can be enabled by a current maintainer or a GitHub organization administrator in the `settings `_. +``Admin`` access to the `repository `_. + These can be enabled by a current maintainer or a GitHub organization administrator in the `settings `_. ``Maintainer`` or ``Owner`` access to the `PyPI project `_. Each owner and maintainer needs a PyPI account. All PyPI accounts require two-factor authentication (2FA) enabled. @@ -22,7 +22,7 @@ Maintainers need the following permissions. ``Maintainer`` access to the `Read the Docs project `_. Existing maintainers can invite another maintainer through the `Maintainers `_ page. ``Environments/Configure PyPI`` access for GitHub Workflows to grant new releases from tags. - Organization owners and repository administrators can grant this access in :menuselection:`Settings --> Environments --> PyPI`, or at https://github.com/collective/icalendar/settings/environments/674266024/edit, by adding their GitHub username to the list of :guilabel:`Required Reviewers`. + Organization owners and repository administrators can grant this access in :menuselection:`Settings --> Environments --> PyPI`, or at https://github.com/PyCalendar/icalendar/settings/environments/674266024/edit, by adding their GitHub username to the list of :guilabel:`Required Reviewers`. ``Owner`` or ``Manager`` access to ``icalendar-coc@googlegroups.com`` This Google Group is used for managing `Code of Conduct `_ infringement reports. ``Manager``\ s may manage and moderate messages, whereas ``Owner``\ s may also manage members. @@ -39,21 +39,21 @@ Maintainers need the following permissions. .. seealso:: - - `Discussion about how to be added to OSS Fuzz `_ + - `Discussion about how to be added to OSS Fuzz `_ - :issue:`562` Maintainer in :file:`pyproject.toml` - Maintainers should be mentioned with or without email address in the :file:`pyproject.toml` file's `maintainers' section `_. + Maintainers should be mentioned with or without email address in the :file:`pyproject.toml` file's `maintainers' section `_. Coveralls - Create an account on `Coveralls `_. + Create an account on `Coveralls `_. This will allow you to see the results of Coveralls runs over time. It doesn't grant you permission to configure the Coveralls GitHub app. - That requires Owner permission in the GitHub organization Collective. - To configure the Coveralls app for icalendar, either contact @stevepiercy or `create an issue `_ in ``collective/Collective``. + That requires Owner permission in the GitHub organization PyCalendar. + To configure the Coveralls app for icalendar, contact an owner of the PyCalendar organization, such as @stevepiercy. .. seealso:: - `Generate test coverage report before approval of pull request `_ + `Generate test coverage report before approval of pull request `_ Collaborators @@ -176,9 +176,9 @@ However, only people with ``Environments/Configure PyPI`` access can approve an git add CHANGES.rst news/ docs/conf.py git add .github/workflows/tests.yml # Only for a new major release git commit -m"version $VERSION" - git push # to collective/icalendar + git push # to PyCalendar/icalendar -#. See if the `CI tests `_ are running on the commit. +#. See if the `CI tests `_ are running on the commit. If they are not running, no new release can be issued. If the CI passes, go ahead. @@ -218,20 +218,20 @@ However, only people with ``Environments/Configure PyPI`` access can approve an .. code-block:: shell - git push -u upstream 7.x # to collective/icalendar + git push -u upstream 7.x # to PyCalendar/icalendar - For a minor or patch release, just push. .. code-block:: shell - git push # to collective/icalendar + git push # to PyCalendar/icalendar #. Next create a tag, and push the tag. .. code-block:: shell git tag "v$VERSION" - git push upstream "v$VERSION" # to collective/icalendar + git push upstream "v$VERSION" # to PyCalendar/icalendar .. warning:: @@ -239,11 +239,11 @@ However, only people with ``Environments/Configure PyPI`` access can approve an This creates issues for downstream repositories. See :issue:`1033`. -#. Once the tag is pushed and its `CI tests`_ pass, check the `GitHub Actions `_, and wait for maintainers to get an email: +#. Once the tag is pushed and its `CI tests`_ pass, check the `GitHub Actions `_, and wait for maintainers to get an email: .. code-block:: text - Subject: Deployment review in collective/icalendar + Subject: Deployment review in PyCalendar/icalendar tests: PyPI is waiting for your review @@ -319,7 +319,7 @@ However, only people with ``Environments/Configure PyPI`` access can approve an git add docs/_static/version-switcher.json git commit -m "Update version switcher for $VERSION" - git push # to collective/icalendar + git push # to PyCalendar/icalendar #. Revert the change in the :ref:`earlier step ` by updating the Sphinx configuration file :file:`docs/conf.py` to show the version warning banner on the ``main`` branch, which is "latest" on Read the Docs. @@ -338,7 +338,7 @@ However, only people with ``Environments/Configure PyPI`` access can approve an git add docs/conf.py git commit -m "Restore version warning banner for 'latest' on Read the Docs" - git push # to collective/icalendar + git push # to PyCalendar/icalendar #. If you cut a new *major* release version, update the Sphinx configuration file :file:`docs/conf.py` on the *previous* numbered major release branch to show the version warning banner. For example, when releasing 7.0.0, checkout ``6.x``, and update it as shown. @@ -358,7 +358,7 @@ However, only people with ``Environments/Configure PyPI`` access can approve an git add docs/conf.py git commit -m "Show version warning banner for previous major version 6.x on Read the Docs" - git push # to collective/icalendar + git push # to PyCalendar/icalendar #. Manually trigger the "latest" version on `Read the Docs `_. To the right in the row for "latest," click the ellipsis :guilabel:`…`, and from the pop-up menu select :guilabel:`Rebuild version`. @@ -376,10 +376,10 @@ Links This section contains useful links for maintainers and collaborators. -- To remove private information from an iCalendar file for bug reports, use `icalendar-anonymizer `_ either through its `website `_ or `install it locally `_. +- To remove private information from an iCalendar file for bug reports, use `icalendar-anonymizer `_ either through its `website `_ or `install it locally `_. - `Python Calendaring Ecosystem `_ -- `Future of icalendar, looking for maintainer #360 `_ -- `Comment on the Plone tests running with icalendar `_ +- `Future of icalendar, looking for maintainer #360 `_ +- `Comment on the Plone tests running with icalendar `_ Updating Python versions @@ -399,7 +399,7 @@ When adding support for a new Python version, or removing support for an old one Update the compatibility information. :file:`docs/maintenance.rst` Update this list if any new files need to be modified. -`Branch Protection Rules `_ +`Branch Protection Rules `_ Update the branch protection rules so that they match the required test names. Remember to write tests that completely cover the changes, and update any documentation that mentions supported Python versions. diff --git a/docs/explanation/safe-xml-parsing.rst b/docs/explanation/safe-xml-parsing.rst index 452b4f782..592862cc6 100644 --- a/docs/explanation/safe-xml-parsing.rst +++ b/docs/explanation/safe-xml-parsing.rst @@ -43,7 +43,7 @@ According to `Amended documentation recommendation`_, in these Python versions, icalendar's :file:`pyproject.toml` file requires a Python version that is safe for XML parsing. Therefore, icalendar is safe to use its configured built-in XML parsing. -Developers can `open an issue `_ to use a different XML parser. +Developers can `open an issue `_ to use a different XML parser. The parser is configurable through the setting :func:`icalendar.config.parse_xml`. .. seealso:: diff --git a/docs/how-to/fuzz-testing-log.txt b/docs/how-to/fuzz-testing-log.txt index 620f346f1..b8cb453d2 100644 --- a/docs/how-to/fuzz-testing-log.txt +++ b/docs/how-to/fuzz-testing-log.txt @@ -726,7 +726,7 @@ 2025-11-22T11:53:16.6792365Z #7 0.483 WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager, possibly rendering your system unusable. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv. Use the --root-user-action option if you know what you are doing and want to suppress this warning. 2025-11-22T11:53:16.8295291Z #7 DONE 0.6s 2025-11-22T11:53:16.8295592Z -2025-11-22T11:53:16.8296610Z #6 [3/5] RUN git clone --depth 1 https://github.com/collective/icalendar.git icalendar && cp icalendar/src/icalendar/fuzzing/build.sh /src/ +2025-11-22T11:53:16.8296610Z #6 [3/5] RUN git clone --depth 1 https://github.com/PyCalendar/icalendar.git icalendar && cp icalendar/src/icalendar/fuzzing/build.sh /src/ 2025-11-22T11:53:16.8298488Z #6 sha256:1ce645bade339311a700240bf8dceae9d2f49a643956634f6414e199f4d024a8 2025-11-22T11:53:16.9801175Z #6 0.120 Cloning into 'icalendar'... 2025-11-22T11:53:17.1037107Z #6 DONE 0.4s @@ -748,7 +748,7 @@ 2025-11-22T11:53:19.5653387Z #9 DONE 2.3s 2025-11-22T11:53:19.8012211Z 2025-11-22 11:53:19,800 - root - INFO - Docker container: 58b4c2d3cbfb. 2025-11-22T11:53:19.8014747Z 2025-11-22 11:53:19,800 - helper - INFO - Running: docker run --privileged --shm-size=2g --platform linux/amd64 --rm -e FUZZING_ENGINE=libfuzzer -e CIFUZZ=True -e SANITIZER=address -e ARCHITECTURE=x86_64 -e FUZZING_LANGUAGE=python -e OUT=/github/workspace/build-out --volumes-from 58b4c2d3cbfb gcr.io/oss-fuzz/icalendar /bin/bash -c 'cp -r /src/icalendar /github/workspace/storage/icalendar'. -2025-11-22T11:53:20.7534525Z 2025-11-22 11:53:20,752 - root - DEBUG - Stderr of command "git fetch origin refs/pull/979/merge" is: From https://github.com/collective/icalendar +2025-11-22T11:53:20.7534525Z 2025-11-22 11:53:20,752 - root - DEBUG - Stderr of command "git fetch origin refs/pull/979/merge" is: From https://github.com/PyCalendar/icalendar 2025-11-22T11:53:20.7535823Z * branch refs/pull/979/merge -> FETCH_HEAD 2025-11-22T11:53:20.7536407Z . 2025-11-22T11:53:20.7881380Z 2025-11-22 11:53:20,787 - root - DEBUG - Stderr of command "git checkout -f FETCH_HEAD" is: Note: switching to 'FETCH_HEAD'. @@ -901,7 +901,7 @@ 2025-11-22T11:53:45.0077202Z + chmod +x /github/workspace/build-out/ical_fuzzer 2025-11-22T11:53:45.0091364Z + zip -q /github/workspace/build-out/ical_fuzzer_seed_corpus.zip /src/corpus/Index_Error.ics /src/corpus/Type_Error.ics /src/corpus/america_new_york.ics /src/corpus/calendar_with_unicode.ics /src/corpus/event_with_escaped_character1.ics /src/corpus/event_with_escaped_character2.ics /src/corpus/event_with_escaped_character3.ics /src/corpus/event_with_escaped_character4.ics /src/corpus/event_with_escaped_characters.ics /src/corpus/event_with_recurrence.ics /src/corpus/event_with_recurrence_exdates_on_different_lines.ics /src/corpus/event_with_rsvp.ics /src/corpus/event_with_unicode_fields.ics /src/corpus/event_with_unicode_organizer.ics /src/corpus/issue_100_transformed_doctests_into_unittests.ics /src/corpus/issue_101_icalendar_chokes_on_umlauts_in_organizer.ics /src/corpus/issue_104_mark_events_broken.ics /src/corpus/issue_112_missing_tzinfo_on_exdate.ics /src/corpus/issue_156_RDATE_with_PERIOD.ics /src/corpus/issue_156_RDATE_with_PERIOD_list.ics /src/corpus/issue_157_removes_trailing_semicolon.ics /src/corpus/issue_184_broken_representation_of_period.ics /src/corpus/issue_464_invalid_rdate.ics /src/corpus/issue_53_description_parsed_properly.ics /src/corpus/issue_64_event_with_ascii_summary.ics /src/corpus/issue_64_event_with_non_ascii_summary.ics /src/corpus/issue_70_rrule_causes_attribute_error.ics /src/corpus/issue_82_expected_output.ics /src/corpus/pacific_fiji.ics /src/corpus/time.ics /src/corpus/timezone_rdate.ics /src/corpus/timezone_same_start.ics /src/corpus/timezone_same_start_and_offset.ics /src/corpus/timezoned.ics 2025-11-22T11:53:45.1604227Z 2025-11-22 11:53:45,160 - root - INFO - Removing unaffected fuzz targets. -2025-11-22T11:53:45.2952968Z 2025-11-22 11:53:45,294 - root - DEBUG - Stderr of command "git fetch origin main:main" is: From https://github.com/collective/icalendar +2025-11-22T11:53:45.2952968Z 2025-11-22 11:53:45,294 - root - DEBUG - Stderr of command "git fetch origin main:main" is: From https://github.com/PyCalendar/icalendar 2025-11-22T11:53:45.2954841Z * [new tag] 2.2 -> 2.2 2025-11-22T11:53:45.2955718Z * [new tag] 3.0.1b1 -> 3.0.1b1 2025-11-22T11:53:45.2956609Z * [new tag] 3.0.1b2 -> 3.0.1b2 @@ -2908,7 +2908,7 @@ 2025-11-22T11:57:25.4258223Z Finalizing artifact upload 2025-11-22T11:57:25.5231286Z Artifact artifacts.zip successfully finalized. Artifact ID 4648702157 2025-11-22T11:57:25.5232676Z Artifact artifacts has been successfully uploaded! Final size is 6621 bytes. Artifact ID is 4648702157 -2025-11-22T11:57:25.5239481Z Artifact download URL: https://github.com/collective/icalendar/actions/runs/19595066705/artifacts/4648702157 +2025-11-22T11:57:25.5239481Z Artifact download URL: https://github.com/PyCalendar/icalendar/actions/runs/19595066705/artifacts/4648702157 2025-11-22T11:57:25.5406029Z ##[group]Run github/codeql-action/upload-sarif@v4 2025-11-22T11:57:25.5406318Z with: 2025-11-22T11:57:25.5406510Z sarif_file: cifuzz-sarif/results.sarif diff --git a/docs/how-to/fuzz-testing.rst b/docs/how-to/fuzz-testing.rst index 3c2b37223..68a304a48 100644 --- a/docs/how-to/fuzz-testing.rst +++ b/docs/how-to/fuzz-testing.rst @@ -7,7 +7,7 @@ This chapter describes how to perform automated fuzz testing. `Fuzz testing or fuzzing `_ is an automated software testing technique that involves providing invalid, unexpected, or random data as inputs to a computer program. The program is then monitored for exceptions such as crashes, failing built-in code assertions, or potential memory leaks. -icalendar uses `OSS-Fuzz`_ and `GitHub Actions `_ for fuzz testing. +icalendar uses `OSS-Fuzz`_ and `GitHub Actions `_ for fuzz testing. Identify uncaught fuzzing errors diff --git a/docs/how-to/usage.rst b/docs/how-to/usage.rst index d0c91d8e6..83da065e7 100644 --- a/docs/how-to/usage.rst +++ b/docs/how-to/usage.rst @@ -275,7 +275,7 @@ After loading the example file, edit and save it. >>> print(calendar.to_ical()[:121]) # save modification BEGIN:VCALENDAR VERSION:2.0 - PRODID:collective/icalendar + PRODID:PyCalendar/icalendar CALSCALE:GREGORIAN METHOD:PUBLISH NAME:My Modified Calendar @@ -545,13 +545,13 @@ Examples in source code The docstrings in the :mod:`icalendar` package API documentation provide other usage examples. -The `tests `_ of icalendar also have more examples. +The `tests `_ of icalendar also have more examples. Miscellaneous examples ---------------------- This section describes how to solve specific usage issues with icalendar. -Post your usage question to the `icalendar discussion Q&A category `_. +Post your usage question to the `icalendar discussion Q&A category `_. You may :doc:`contribute answered questions to this section of the documentation <../contribute/documentation/index>` through a pull request, too. Convert iCalendar to JSON diff --git a/docs/index.rst b/docs/index.rst index ad0ea8c9e..336fa2d1c 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -114,4 +114,4 @@ icalendar lets you create, inspect, and modify calendaring information with Pyth License ------- -See `LICENSE.rst `_. +See `LICENSE.rst `_. diff --git a/docs/reference/versions-branches.rst b/docs/reference/versions-branches.rst index 535cef5ea..1a81de5c0 100644 --- a/docs/reference/versions-branches.rst +++ b/docs/reference/versions-branches.rst @@ -23,30 +23,30 @@ Branches This section describes the branches used in icalendar development. ``main`` - The `main `_ branch receives the latest updates and features. + The `main `_ branch receives the latest updates and features. Active development takes place on this branch. It's compatible with Python versions 3.10 - 3.14, and PyPy3.10, subject to change because it's an active development branch. ``7.x`` - icalendar version 7 is on the branch `7.x `_. + icalendar version 7 is on the branch `7.x `_. It's compatible with Python versions 3.10 - 3.14, and PyPy3.10. Security updates, bug fixes, and new features that are not breaking changes are continuously backported from `main` and released on this branch. ``6.x`` - icalendar version 6 is on the branch `6.x `_. + icalendar version 6 is on the branch `6.x `_. It is compatible with Python versions 3.8 - 3.13, and PyPy3.9. Security updates and bug fixes can be backported and added to ``6.x`` on request. ``5.x`` - icalendar version 5 is on the branch `5.x `_. + icalendar version 5 is on the branch `5.x `_. It is compatible with Python versions 3.7 - 3.11, and PyPy3.9. Security updates and bug fixes can be backported and added to ``5.x`` on request. ``4.x`` - icalendar version 4 is on the branch `4.x `_. + icalendar version 4 is on the branch `4.x `_. It is compatible with Python versions 2.7, 3.4 - 3.10, and PyPy2.7 and PyPy3.9. Security updates and bug fixes can be backported and added to ``4.x`` on request. .. seealso:: - `icalendar security policy `_. + `icalendar security policy `_. diff --git a/docs/tutorials/create-event-with-attendees.rst b/docs/tutorials/create-event-with-attendees.rst index 33bb35bd0..206f48c02 100644 --- a/docs/tutorials/create-event-with-attendees.rst +++ b/docs/tutorials/create-event-with-attendees.rst @@ -23,7 +23,7 @@ After creating a new calendar, you can view its properties by using :meth:`~ical >>> print(calendar.to_ical().decode()) BEGIN:VCALENDAR VERSION:2.0 - PRODID:-//collective//icalendar//7.0.0//EN + PRODID:-//PyCalendar//icalendar//7.0.0//EN UID:d755cef5-2311-46ed-a0e1-6733c9e15c63 END:VCALENDAR diff --git a/funding.json b/funding.json index e6bb9912d..ac806bd8f 100644 --- a/funding.json +++ b/funding.json @@ -8,8 +8,8 @@ "email": "icalendar-coc@googlegroups.com", "description": "We support the development of the icalendar library for Python, an RFC 5545 compatible parser and generator of iCalendar files.", "webpageUrl": { - "url": "https://github.com/collective/icalendar/", - "wellKnown": "https://github.com/collective/icalendar/raw/main/.well-known/funding-manifest-urls" + "url": "https://github.com/PyCalendar/icalendar/", + "wellKnown": "https://github.com/PyCalendar/icalendar/raw/main/.well-known/funding-manifest-urls" } }, "projects": [ @@ -18,12 +18,12 @@ "name": "icalendar", "description": "The icalendar package is an RFC 5545 compatible parser and generator of iCalendar files.", "webpageUrl": { - "url": "https://github.com/collective/icalendar/", - "wellKnown": "https://github.com/collective/icalendar/raw/main/.well-known/funding-manifest-urls" + "url": "https://github.com/PyCalendar/icalendar/", + "wellKnown": "https://github.com/PyCalendar/icalendar/raw/main/.well-known/funding-manifest-urls" }, "repositoryUrl": { - "url": "https://github.com/collective/icalendar/", - "wellKnown": "https://github.com/collective/icalendar/raw/main/.well-known/funding-manifest-urls" + "url": "https://github.com/PyCalendar/icalendar/", + "wellKnown": "https://github.com/PyCalendar/icalendar/raw/main/.well-known/funding-manifest-urls" }, "licenses": [ "spdx:BSD-2-Clause" diff --git a/news/+default-prodid.breaking b/news/+default-prodid.breaking new file mode 100644 index 000000000..e2c7d462f --- /dev/null +++ b/news/+default-prodid.breaking @@ -0,0 +1 @@ +Changed the default ``PRODID`` from ``-//collective//icalendar////EN`` to ``-//PyCalendar//icalendar////EN`` to match the repository's new home. @SashankBhamidi diff --git a/news/+move-to-pycalendar.internal b/news/+move-to-pycalendar.internal new file mode 100644 index 000000000..09a837b9a --- /dev/null +++ b/news/+move-to-pycalendar.internal @@ -0,0 +1 @@ +Moved the repository from the Collective to the PyCalendar organization on GitHub, and updated links, badges and the documentation to point to https://github.com/PyCalendar/icalendar. See `collective/Collective#1978 `_. @SashankBhamidi diff --git a/pyproject.toml b/pyproject.toml index 96e997d97..246a208bd 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,7 +1,7 @@ # # We use the pyproject.toml package specification. # See https://packaging.python.org/en/latest/guides/section-build-and-publish/ -# See https://github.com/collective/icalendar/issues/686 +# See https://github.com/PyCalendar/icalendar/issues/686 # See https://packaging.python.org/en/latest/specifications/pyproject-toml/ # @@ -25,7 +25,7 @@ keywords = [ "rfc5545", ] # If an email address for the authors ever arises, then add it here. -# See https://github.com/collective/icalendar/pull/707#discussion_r1775275335 +# See https://github.com/PyCalendar/icalendar/pull/707#discussion_r1775275335 authors = [ { name="Plone Foundation" }, ] @@ -85,11 +85,11 @@ dependencies = [ ] # Static URLs for GitHub dependency graph compatibility -# See https://github.com/collective/icalendar/issues/1035 +# See https://github.com/PyCalendar/icalendar/issues/1035 [project.urls] Homepage = "https://icalendar.readthedocs.io/en/stable/" -Repository = "https://github.com/collective/icalendar" -Issues = "https://github.com/collective/icalendar/issues" +Repository = "https://github.com/PyCalendar/icalendar" +Issues = "https://github.com/PyCalendar/icalendar/issues" Documentation = "https://icalendar.readthedocs.io/en/stable/" Changelog = "https://icalendar.readthedocs.io/en/stable/changelog.html" Funding = "https://opencollective.com/python-icalendar" @@ -163,9 +163,9 @@ packages = ["src/icalendar"] [tool.hatch.metadata.hooks.vcs.urls] # Dynamic URLs for built packages (hatch-vcs replaces static [project.urls]) Homepage = "https://icalendar.readthedocs.io/en/stable/" -Repository = "https://github.com/collective/icalendar" -source_archive = "https://github.com/collective/icalendar/archive/{commit_hash}.zip" -Issues = "https://github.com/collective/icalendar/issues" +Repository = "https://github.com/PyCalendar/icalendar" +source_archive = "https://github.com/PyCalendar/icalendar/archive/{commit_hash}.zip" +Issues = "https://github.com/PyCalendar/icalendar/issues" Documentation = "https://icalendar.readthedocs.io/en/stable/" Changelog = "https://icalendar.readthedocs.io/en/stable/changelog.html" Funding = "https://opencollective.com/python-icalendar" @@ -326,7 +326,7 @@ filterwarnings = [ [tool.towncrier] directory = "news/" filename = "CHANGES.rst" -issue_format = "`Issue #{issue} `_" +issue_format = "`Issue #{issue} `_" start_string = ".. towncrier release notes start\n" title_format = "{version} ({project_date})" # First underline is used for version/date header. diff --git a/src/icalendar/attr/__init__.py b/src/icalendar/attr/__init__.py index dff7b0c98..e072174db 100644 --- a/src/icalendar/attr/__init__.py +++ b/src/icalendar/attr/__init__.py @@ -113,7 +113,7 @@ def _get_rdates( ``rdates`` for the relevant component or use :meth:`Component.add ` instead. If you want to compute recurrences, have a look at - `Related Projects `_. + `Related Projects `_. """ result = [] @@ -220,7 +220,7 @@ def _get_exdates(self: Component) -> list[date | datetime]: ``exdates`` for the relevant component or use :meth:`Component.add ` instead. If you want to compute recurrences, have a look at - `Related Projects `_. + `Related Projects `_. """ result = [] @@ -355,7 +355,7 @@ def _get_rrules(self: Component) -> list[vRecur]: Use :meth:`Component.add ` to add values. If you want to compute recurrences, have a look at - `Related Projects `_. + `Related Projects `_. """ # noqa: E501 rrules = self.get("RRULE", []) diff --git a/src/icalendar/cal/calendar.py b/src/icalendar/cal/calendar.py index 7fff6b561..cbff14632 100644 --- a/src/icalendar/cal/calendar.py +++ b/src/icalendar/cal/calendar.py @@ -41,7 +41,7 @@ from icalendar.parser.ical.component import ComponentIcalParser -DEFAULT_PRODID = f"-//collective//icalendar//{__version__}//EN" +DEFAULT_PRODID = f"-//PyCalendar//icalendar//{__version__}//EN" """The value for :attr:`~icalendar.cal.calendar.Calendar.prodid` when it's not provided.""" @@ -114,7 +114,7 @@ def example(cls, name: str = "example") -> Calendar: >>> print(Calendar.example().to_ical().decode()) BEGIN:VCALENDAR VERSION:2.0 - PRODID:collective/icalendar + PRODID:PyCalendar/icalendar CALSCALE:GREGORIAN METHOD:PUBLISH X-WR-CALNAME:Holidays diff --git a/src/icalendar/cal/component.py b/src/icalendar/cal/component.py index 038158ab2..953160cc6 100644 --- a/src/icalendar/cal/component.py +++ b/src/icalendar/cal/component.py @@ -1241,7 +1241,7 @@ def to_xcal( 2.0 - -//collective//icalendar//7.0.0//EN + -//PyCalendar//icalendar//7.0.0//EN d755cef5-2311-46ed-a0e1-6733c9e15c63 diff --git a/src/icalendar/cal/lazy.py b/src/icalendar/cal/lazy.py index 9b022032a..d244b3571 100644 --- a/src/icalendar/cal/lazy.py +++ b/src/icalendar/cal/lazy.py @@ -347,7 +347,7 @@ def is_lazy(self) -> bool: .. note:: If you believe the calendar parses more subcomponents than it should, please `open an issue - `_. + `_. Returns: ``True`` if subcomponent parsing is deferred. diff --git a/src/icalendar/param.py b/src/icalendar/param.py index d41c5565f..bca86330f 100644 --- a/src/icalendar/param.py +++ b/src/icalendar/param.py @@ -5,7 +5,7 @@ - :rfc:`5545`, Section 3.2. Property Parameters - :rfc:`7986`, Section 6. Property Parameters - :rfc:`9253` -- https://github.com/collective/icalendar/issues/798 +- https://github.com/PyCalendar/icalendar/issues/798 """ from __future__ import annotations diff --git a/src/icalendar/parser/xcal/string.py b/src/icalendar/parser/xcal/string.py index 8fe571b49..dfe0f9b15 100644 --- a/src/icalendar/parser/xcal/string.py +++ b/src/icalendar/parser/xcal/string.py @@ -47,7 +47,7 @@ def _to_valid_xml_string(string: str) -> str: `XML Character Range `_, `~icalendar.prop.text._strip_unsafe_text_chars`, - `Issue 1888 `_, + `Issue 1888 `_, """ return _VALID_XML_CHARACTERS.sub("", string) diff --git a/src/icalendar/prop/text.py b/src/icalendar/prop/text.py index 92b329928..3c4e7f5c1 100644 --- a/src/icalendar/prop/text.py +++ b/src/icalendar/prop/text.py @@ -46,8 +46,8 @@ def _strip_unsafe_text_chars(value: object) -> str: .. seealso:: :func:`~icalendar.parser.xcal.string._to_valid_xml_string` - `Issue 1712 `_, - `Issue 1888 `_, + `Issue 1712 `_, + `Issue 1888 `_, """ if not isinstance(value, str): value = str(value) diff --git a/src/icalendar/tests/attr/test_issue_1594.py b/src/icalendar/tests/attr/test_issue_1594.py index aa25cb3da..73911fe16 100644 --- a/src/icalendar/tests/attr/test_issue_1594.py +++ b/src/icalendar/tests/attr/test_issue_1594.py @@ -1,6 +1,6 @@ """Tests for validating integer properties with a minimum value. -See https://github.com/collective/icalendar/issues/1594 +See https://github.com/PyCalendar/icalendar/issues/1594 """ from datetime import timedelta diff --git a/src/icalendar/tests/attr/test_resources.py b/src/icalendar/tests/attr/test_resources.py index e202dea72..bfb9a2f38 100644 --- a/src/icalendar/tests/attr/test_resources.py +++ b/src/icalendar/tests/attr/test_resources.py @@ -1,7 +1,7 @@ """This tests the RESOURCES property. See -- https://github.com/collective/icalendar/issues/1667 +- https://github.com/PyCalendar/icalendar/issues/1667 - https://www.rfc-editor.org/rfc/rfc5545#section-3.8.1.10 """ diff --git a/src/icalendar/tests/calendars/example.ics b/src/icalendar/tests/calendars/example.ics index a01c8f42f..1485a0ba2 100644 --- a/src/icalendar/tests/calendars/example.ics +++ b/src/icalendar/tests/calendars/example.ics @@ -1,6 +1,6 @@ BEGIN:VCALENDAR VERSION:2.0 -PRODID:collective/icalendar +PRODID:PyCalendar/icalendar CALSCALE:GREGORIAN METHOD:PUBLISH X-WR-CALNAME:Holidays diff --git a/src/icalendar/tests/calendars/issue_1426.ics b/src/icalendar/tests/calendars/issue_1426.ics index 66cdf453f..f68550ea4 100644 --- a/src/icalendar/tests/calendars/issue_1426.ics +++ b/src/icalendar/tests/calendars/issue_1426.ics @@ -1,6 +1,6 @@ BEGIN:VCALENDAR VERSION:2.0 -PRODID:-//collective//icalendar//EN +PRODID:-//PyCalendar//icalendar//EN BEGIN:VEVENT UID:77D80D14-906B-4257-963F-85B1E734DBB6 DTSTART:19961230T020000Z diff --git a/src/icalendar/tests/calendars/issue_1426_value_parameters.ics b/src/icalendar/tests/calendars/issue_1426_value_parameters.ics index a646d0803..39776dc31 100644 --- a/src/icalendar/tests/calendars/issue_1426_value_parameters.ics +++ b/src/icalendar/tests/calendars/issue_1426_value_parameters.ics @@ -1,6 +1,6 @@ BEGIN:VCALENDAR VERSION:2.0 -PRODID:-//collective//icalendar//EN +PRODID:-//PyCalendar//icalendar//EN BEGIN:VEVENT UID:issue-1426 DTSTART;VALUE=DATE:19970101 diff --git a/src/icalendar/tests/calendars/issue_313_globally_unique_tzid.ics b/src/icalendar/tests/calendars/issue_313_globally_unique_tzid.ics index 8a3bdbbd2..20d7556ef 100644 --- a/src/icalendar/tests/calendars/issue_313_globally_unique_tzid.ics +++ b/src/icalendar/tests/calendars/issue_313_globally_unique_tzid.ics @@ -1,6 +1,6 @@ BEGIN:VCALENDAR VERSION:2.0 -PRODID:-//collective//icalendar//issue 313//EN +PRODID:-//PyCalendar//icalendar//issue 313//EN BEGIN:VEVENT UID:libical-evolution@issue-313 SUMMARY:libical / Evolution globally unique TZID diff --git a/src/icalendar/tests/calendars/minimal.ics b/src/icalendar/tests/calendars/minimal.ics index b23a93538..554c579b3 100644 --- a/src/icalendar/tests/calendars/minimal.ics +++ b/src/icalendar/tests/calendars/minimal.ics @@ -1,5 +1,5 @@ BEGIN:VCALENDAR VERSION:2.0 -PRODID:-//collective//icalendar//7.3.1.dev270//EN +PRODID:-//PyCalendar//icalendar//7.3.1.dev270//EN UID:664546b1-5828-49a9-adc5-80d108fb4f13 END:VCALENDAR diff --git a/src/icalendar/tests/calendars/rfc_7986_properties.ics b/src/icalendar/tests/calendars/rfc_7986_properties.ics index 1e7b10621..3b06294d6 100644 --- a/src/icalendar/tests/calendars/rfc_7986_properties.ics +++ b/src/icalendar/tests/calendars/rfc_7986_properties.ics @@ -5,5 +5,5 @@ NAME:RFC 7986 calendar DESCRIPTION:We want a lot of RFC 7986 parameters in here! COLOR:black UID:5FC53010-1267-4F8E-BC28-1D7AE55A7C99 -SOURCE:https://github.com/collective/icalendar/tree/main/src/icalendar/tests/calendars/rfc_7986_properties.ics +SOURCE:https://github.com/PyCalendar/icalendar/tree/main/src/icalendar/tests/calendars/rfc_7986_properties.ics END:VCALENDAR \ No newline at end of file diff --git a/src/icalendar/tests/calendars/rfc_9253_examples.ics b/src/icalendar/tests/calendars/rfc_9253_examples.ics index 8db6e37f5..47391cfe5 100644 --- a/src/icalendar/tests/calendars/rfc_9253_examples.ics +++ b/src/icalendar/tests/calendars/rfc_9253_examples.ics @@ -1,6 +1,6 @@ BEGIN:VCALENDAR VERSION:2.0 -PRODID:-//collective//icalendar//6.3.2.dev310//EN +PRODID:-//PyCalendar//icalendar//6.3.2.dev310//EN BEGIN:VEVENT DTSTAMP:20251028T092239Z DTSTART:20251028T092239Z diff --git a/src/icalendar/tests/calendars/rfc_9253_gap.ics b/src/icalendar/tests/calendars/rfc_9253_gap.ics index 5919e1503..34756dfcd 100644 --- a/src/icalendar/tests/calendars/rfc_9253_gap.ics +++ b/src/icalendar/tests/calendars/rfc_9253_gap.ics @@ -1,6 +1,6 @@ BEGIN:VCALENDAR VERSION:2.0 -PRODID:-//collective//icalendar//6.3.2.dev310//EN +PRODID:-//PyCalendar//icalendar//6.3.2.dev310//EN BEGIN:VEVENT UID:1 DTSTAMP:19960817T083000Z diff --git a/src/icalendar/tests/calendars/rfc_9253_related_to.ics b/src/icalendar/tests/calendars/rfc_9253_related_to.ics index 5284ad62c..88cf24292 100644 --- a/src/icalendar/tests/calendars/rfc_9253_related_to.ics +++ b/src/icalendar/tests/calendars/rfc_9253_related_to.ics @@ -1,6 +1,6 @@ BEGIN:VCALENDAR VERSION:2.0 -PRODID:-//collective//icalendar//6.3.2.dev310//EN +PRODID:-//PyCalendar//icalendar//6.3.2.dev310//EN BEGIN:VEVENT UID:19960401-080045-4000F192713.ics DTSTAMP:19960817T083000Z diff --git a/src/icalendar/tests/conftest.py b/src/icalendar/tests/conftest.py index 98cf1875a..56f344e2d 100644 --- a/src/icalendar/tests/conftest.py +++ b/src/icalendar/tests/conftest.py @@ -520,7 +520,7 @@ def doctest_import(name, *args, **kw): NOW = datetime(2025, 5, 17, 8, 6, 12) NOW_UTC = NOW.replace(tzinfo=timezone.utc) UID_DEFAULT = "d755cef5-2311-46ed-a0e1-6733c9e15c63" -DEFAULT_PRODID = "-//collective//icalendar//7.0.0//EN" +DEFAULT_PRODID = "-//PyCalendar//icalendar//7.0.0//EN" @pytest.fixture diff --git a/src/icalendar/tests/fuzzed/__init__.py b/src/icalendar/tests/fuzzed/__init__.py index 6fba04c30..aeac0a34e 100644 --- a/src/icalendar/tests/fuzzed/__init__.py +++ b/src/icalendar/tests/fuzzed/__init__.py @@ -75,7 +75,7 @@ def __invert__(self) -> Self: ] # The current check: a ValueError or TypeError with one of the substrings above. -# See https://github.com/collective/icalendar/issues/1759 +# See https://github.com/PyCalendar/icalendar/issues/1759 _value_error_message = Predicate( lambda e: ( isinstance(e, (ValueError, TypeError)) diff --git a/src/icalendar/tests/fuzzed/test_predicate.py b/src/icalendar/tests/fuzzed/test_predicate.py index 8b6085881..86bb71762 100644 --- a/src/icalendar/tests/fuzzed/test_predicate.py +++ b/src/icalendar/tests/fuzzed/test_predicate.py @@ -1,6 +1,6 @@ """Test the predicates that decide which exceptions the fuzzer ignores. -See https://github.com/collective/icalendar/issues/1759 +See https://github.com/PyCalendar/icalendar/issues/1759 """ import pytest diff --git a/src/icalendar/tests/prop/test_request_status.py b/src/icalendar/tests/prop/test_request_status.py index 60595a057..737778396 100644 --- a/src/icalendar/tests/prop/test_request_status.py +++ b/src/icalendar/tests/prop/test_request_status.py @@ -173,7 +173,7 @@ def test_invalid_request_status_does_not_error_with_code(): def test_jcal_invaild_request_status(): """The request status can have an unexpected length. - See https://github.com/collective/icalendar/pull/1792#discussion_r4040271630 + See https://github.com/PyCalendar/icalendar/pull/1792#discussion_r4040271630 """ r = vRequestStatus.from_jcal( ["request-status", {}, "text", ["2.0", "Success", "data1", "data2"]] diff --git a/src/icalendar/tests/rfc_6321_xcal/cal/test_xml_conversion.py b/src/icalendar/tests/rfc_6321_xcal/cal/test_xml_conversion.py index a25ccc005..d9f9763db 100644 --- a/src/icalendar/tests/rfc_6321_xcal/cal/test_xml_conversion.py +++ b/src/icalendar/tests/rfc_6321_xcal/cal/test_xml_conversion.py @@ -10,7 +10,7 @@ # BEGIN:VCALENDAR # VERSION:2.0 -# PRODID:-//collective//icalendar//7.3.1.dev270//EN +# PRODID:-//PyCalendar//icalendar//7.3.1.dev270//EN # UID:664546b1-5828-49a9-adc5-80d108fb4f13 # END:VCALENDAR MINIMAL_CALENDAR_XCAL_PRETTY = b""" @@ -21,7 +21,7 @@ 2.0 - -//collective//icalendar//7.3.1.dev270//EN + -//PyCalendar//icalendar//7.3.1.dev270//EN 664546b1-5828-49a9-adc5-80d108fb4f13 diff --git a/src/icalendar/tests/rfc_6321_xcal/prop/test_recur.py b/src/icalendar/tests/rfc_6321_xcal/prop/test_recur.py index c57287b69..94bc52198 100644 --- a/src/icalendar/tests/rfc_6321_xcal/prop/test_recur.py +++ b/src/icalendar/tests/rfc_6321_xcal/prop/test_recur.py @@ -126,7 +126,7 @@ def test_from_xcal_freq(freq): ("byday", "FR", "FR"), ("byday", "-1SU", "-1SU"), # BYWEEKDAY does not exist - # see https://github.com/collective/icalendar/issues/1854 + # see https://github.com/PyCalendar/icalendar/issues/1854 ] mark_single_value = pytest.mark.parametrize( diff --git a/src/icalendar/tests/rfc_6321_xcal/test_xml_property.py b/src/icalendar/tests/rfc_6321_xcal/test_xml_property.py index ff0a7125a..bf0cf3efb 100644 --- a/src/icalendar/tests/rfc_6321_xcal/test_xml_property.py +++ b/src/icalendar/tests/rfc_6321_xcal/test_xml_property.py @@ -1,7 +1,7 @@ """The XML property. The tests follow the plan in -https://github.com/collective/icalendar/pull/1958#discussion_r4324499271 +https://github.com/PyCalendar/icalendar/pull/1958#discussion_r4324499271 > The value of this property is a single XML 1.0 > [W3C.REC-xml-20081126] element. @@ -212,7 +212,7 @@ def test_xml_property_to_xcal_keeps_the_whitespace(indent): def test_xml_property_to_xcal_example_file(calendars, indent): """The XML parts of the example file are in the same place after a round trip. - See https://github.com/collective/icalendar/pull/1958#discussion_r4324585541 + See https://github.com/PyCalendar/icalendar/pull/1958#discussion_r4324585541 """ calendar = calendars.rfc_6321_xml_property_xcal expected = xml_parts(calendar.raw_xcal) @@ -432,7 +432,7 @@ def set_xml(event: Event, setter: str, xml) -> None: params=[ *(("add", value) for value in XML_VALUES), *(("XML", value) for value in XML_VALUES), - # For other values, see https://github.com/collective/icalendar/issues/1983 + # For other values, see https://github.com/PyCalendar/icalendar/issues/1983 ("[]", "vXml"), ], ids="-".join, diff --git a/src/icalendar/tests/rfc_7265_jcal/test_additional_considerations.py b/src/icalendar/tests/rfc_7265_jcal/test_additional_considerations.py index 40fb7ab7d..870d78a4b 100644 --- a/src/icalendar/tests/rfc_7265_jcal/test_additional_considerations.py +++ b/src/icalendar/tests/rfc_7265_jcal/test_additional_considerations.py @@ -40,7 +40,7 @@ def test_get_new_component_class(): def test_text_from_jcal_does_not_add_backslashes(): """It is possible that backslashes are added. - see https://github.com/collective/icalendar/pull/979#issuecomment-3568261726 + see https://github.com/PyCalendar/icalendar/pull/979#issuecomment-3568261726 """ v_text = vText.from_jcal(["name", {}, "unknown", "8 backslash \\\\\\\\"]) assert v_text.ical_value == "8 backslash \\\\\\\\" diff --git a/src/icalendar/tests/rfc_7265_jcal/test_invalid_jcal.py b/src/icalendar/tests/rfc_7265_jcal/test_invalid_jcal.py index fdff993b5..78031ab0c 100644 --- a/src/icalendar/tests/rfc_7265_jcal/test_invalid_jcal.py +++ b/src/icalendar/tests/rfc_7265_jcal/test_invalid_jcal.py @@ -78,7 +78,7 @@ def parameter_value_expected(request): def test_component_is_too_short_or_too_long(length): """Test that a component has not enough values. - See https://github.com/collective/icalendar/pull/979/#discussion_r2529703982 + See https://github.com/PyCalendar/icalendar/pull/979/#discussion_r2529703982 """ with pytest.raises( diff --git a/src/icalendar/tests/rfc_7265_jcal/test_json.py b/src/icalendar/tests/rfc_7265_jcal/test_json.py index 2485cc6e3..88a3bfdbb 100644 --- a/src/icalendar/tests/rfc_7265_jcal/test_json.py +++ b/src/icalendar/tests/rfc_7265_jcal/test_json.py @@ -29,7 +29,7 @@ def test_apply_json_serialization(): "prodid", {}, "text", - "-//collective//icalendar//7.3.1.dev270//EN" + "-//PyCalendar//icalendar//7.3.1.dev270//EN" ], [ "uid", diff --git a/src/icalendar/tests/rfc_9253_icalendar_relationships/test_concept.py b/src/icalendar/tests/rfc_9253_icalendar_relationships/test_concept.py index 4de631093..d43ee96ff 100644 --- a/src/icalendar/tests/rfc_9253_icalendar_relationships/test_concept.py +++ b/src/icalendar/tests/rfc_9253_icalendar_relationships/test_concept.py @@ -21,9 +21,9 @@ def test_concept_is_converted_to_a_vUri(component): def test_new_component_with_concept(): """We can use new with just a string.""" - component = Component.new(concepts="https://gihub.com/collective/icalendar/issues") + component = Component.new(concepts="https://gihub.com/PyCalendar/icalendar/issues") assert len(component.concepts) == 1 - assert component.concepts[0].uri == "https://gihub.com/collective/icalendar/issues" + assert component.concepts[0].uri == "https://gihub.com/PyCalendar/icalendar/issues" assert isinstance(component.concepts[0], vUri) diff --git a/src/icalendar/tests/test_components_break_on_bad_ics.py b/src/icalendar/tests/test_components_break_on_bad_ics.py index c3bddd55b..1df34f57f 100644 --- a/src/icalendar/tests/test_components_break_on_bad_ics.py +++ b/src/icalendar/tests/test_components_break_on_bad_ics.py @@ -6,7 +6,7 @@ def test_ignore_exceptions_on_broken_events_issue_104(events): (which has ignore_exceptions). Should mark the event broken but not raise an exception. - https://github.com/collective/icalendar/issues/104 + https://github.com/PyCalendar/icalendar/issues/104 """ assert events.issue_104_mark_events_broken.errors == [ (None, "Content line could not be parsed into parts: 'X': Invalid content line") @@ -23,7 +23,7 @@ def test_dont_ignore_exceptions_on_broken_calendars_issue_104(calendars): def test_rdate_dosent_become_none_on_invalid_input_issue_464(events): """Issue #464 - [BUG] RDATE can become None if value is invalid - https://github.com/collective/icalendar/issues/464 + https://github.com/PyCalendar/icalendar/issues/464 """ event = events.issue_464_invalid_rdate diff --git a/src/icalendar/tests/test_create_release.sh b/src/icalendar/tests/test_create_release.sh index a79697153..d259b3170 100755 --- a/src/icalendar/tests/test_create_release.sh +++ b/src/icalendar/tests/test_create_release.sh @@ -39,32 +39,32 @@ src" if [ "$ROOT_ENTRIES" != "$EXPECTED_ROOT_ENTRIES" ]; then echo "ERROR: Source distribution root entries differ from the reviewed allowlist." - echo " See https://github.com/collective/icalendar/issues/1695" + echo " See https://github.com/PyCalendar/icalendar/issues/1695" diff -u <(printf '%s\n' "$EXPECTED_ROOT_ENTRIES") <(printf '%s\n' "$ROOT_ENTRIES") || true exit 1 fi if echo "$FILES" | grep -q '^/src/icalendar/fuzzing'; then echo "ERROR: Fuzzing files are included in the release." - echo " See https://github.com/collective/icalendar/pull/569" + echo " See https://github.com/PyCalendar/icalendar/pull/569" exit 1 fi if ! echo "$FILES" | grep -q '^/docs/'; then echo "ERROR: The documentation is not included in the release, but should be." - echo " See https://github.com/collective/icalendar/issues/712" + echo " See https://github.com/PyCalendar/icalendar/issues/712" exit 1 fi if ! echo "$FILES" | grep -q '/funding.json$'; then echo "ERROR: Funding files need to be included in the release files." - echo " See https://github.com/collective/icalendar/issues/1493" + echo " See https://github.com/PyCalendar/icalendar/issues/1493" exit 1 fi if ! echo "$FILES" | grep -q '^/scripts/generate_windows_to_olson_mapping\.py$'; then echo "ERROR: The Windows to Olson generator is not included in the release." - echo " Source distribution tests require it; see https://github.com/collective/icalendar/pull/1770" + echo " Source distribution tests require it; see https://github.com/PyCalendar/icalendar/pull/1770" exit 1 fi diff --git a/src/icalendar/tests/test_docstrings.py b/src/icalendar/tests/test_docstrings.py index c10407761..9994ff376 100644 --- a/src/icalendar/tests/test_docstrings.py +++ b/src/icalendar/tests/test_docstrings.py @@ -3,7 +3,7 @@ It may be amended as needed. ``KNOWN_BAD_HEADINGS`` is a set of known bad headings. As docstrings are fixed, their headings may be removed from this set. -See https://github.com/collective/icalendar/issues/1481 +See https://github.com/PyCalendar/icalendar/issues/1481 """ import inspect diff --git a/src/icalendar/tests/test_encoding.py b/src/icalendar/tests/test_encoding.py index 4cc1557b0..49c14d46d 100644 --- a/src/icalendar/tests/test_encoding.py +++ b/src/icalendar/tests/test_encoding.py @@ -26,7 +26,7 @@ def test_calendar_from_ical_respects_unicode(field, expected_value, calendars): ), ("event_with_unicode_fields", "LOCATION", "Tribstrül"), # Non-unicode characters in summary - # https://github.com/collective/icalendar/issues/64 + # https://github.com/PyCalendar/icalendar/issues/64 ("issue_64_event_with_non_ascii_summary", "SUMMARY", "åäö"), # Unicode characters in summary ("issue_64_event_with_ascii_summary", "SUMMARY", "abcdef"), @@ -41,7 +41,7 @@ def test_event_from_ical_respects_unicode(test_input, field, expected_value, eve ("test_input", "expected_output"), [ # chokes on umlauts in ORGANIZER - # https://github.com/collective/icalendar/issues/101 + # https://github.com/PyCalendar/icalendar/issues/101 ("issue_101_icalendar_chokes_on_umlauts_in_organizer", "acme, ädmin"), ("event_with_unicode_organizer", "Джон Доу"), ], @@ -52,7 +52,7 @@ def test_events_parameter_unicoded(events, test_input, expected_output): def test_parses_event_with_non_ascii_tzid_issue_237(calendars, in_timezone): """Issue #237 - Fail to parse timezone with non-ascii TZID - see https://github.com/collective/icalendar/issues/237 + see https://github.com/PyCalendar/icalendar/issues/237 """ start = calendars.issue_237_fail_to_parse_timezone_with_non_ascii_tzid.walk( "VEVENT" @@ -64,7 +64,7 @@ def test_parses_event_with_non_ascii_tzid_issue_237(calendars, in_timezone): def test_parses_timezone_with_non_ascii_tzid_issue_237(timezones): """Issue #237 - Fail to parse timezone with non-ascii TZID - see https://github.com/collective/icalendar/issues/237 + see https://github.com/PyCalendar/icalendar/issues/237 """ assert timezones.issue_237_brazilia_standard["tzid"] == "(UTC-03:00) Brasília" @@ -72,7 +72,7 @@ def test_parses_timezone_with_non_ascii_tzid_issue_237(timezones): @pytest.mark.parametrize("timezone_name", ["standard", "daylight"]) def test_parses_timezone_with_non_ascii_tzname_issue_273(timezones, timezone_name): """Issue #237 - Fail to parse timezone with non-ascii TZID - see https://github.com/collective/icalendar/issues/237 + see https://github.com/PyCalendar/icalendar/issues/237 """ assert ( timezones.issue_237_brazilia_standard.walk(timezone_name)[0]["TZNAME"] diff --git a/src/icalendar/tests/test_examples.py b/src/icalendar/tests/test_examples.py index bddc20b45..55bc14970 100644 --- a/src/icalendar/tests/test_examples.py +++ b/src/icalendar/tests/test_examples.py @@ -43,7 +43,7 @@ def test_creating_calendar_with_unicode_fields(calendars, utc): cal.add_component(event1) # test_unicode_parameter_name - # test for issue #80 https://github.com/collective/icalendar/issues/80 + # test for issue #80 https://github.com/PyCalendar/icalendar/issues/80 event2 = Event() event2.add("DESCRIPTION", "äöüßÄÖÜ") cal.add_component(event2) diff --git a/src/icalendar/tests/test_ghsa_qjcq_q7h7_r74v_repeat_dos.py b/src/icalendar/tests/test_ghsa_qjcq_q7h7_r74v_repeat_dos.py index cf6a9d735..c099ca795 100644 --- a/src/icalendar/tests/test_ghsa_qjcq_q7h7_r74v_repeat_dos.py +++ b/src/icalendar/tests/test_ghsa_qjcq_q7h7_r74v_repeat_dos.py @@ -1,7 +1,7 @@ """Tests for GHSA-qjcq-q7h7-r74v. A crafted REPEAT value on a VALARM component could exhaust memory or CPU. -See https://github.com/collective/icalendar/security/advisories/GHSA-qjcq-q7h7-r74v +See https://github.com/PyCalendar/icalendar/security/advisories/GHSA-qjcq-q7h7-r74v """ from datetime import datetime, timedelta, timezone diff --git a/src/icalendar/tests/test_issue_1050_lazy_parsing.py b/src/icalendar/tests/test_issue_1050_lazy_parsing.py index a9f8fc759..4bb21b97b 100644 --- a/src/icalendar/tests/test_issue_1050_lazy_parsing.py +++ b/src/icalendar/tests/test_issue_1050_lazy_parsing.py @@ -1,6 +1,6 @@ """Test lazy parsing of calendar components. -See https://github.com/collective/icalendar/issues/1050 +See https://github.com/PyCalendar/icalendar/issues/1050 """ from typing import TYPE_CHECKING @@ -225,7 +225,7 @@ def test_uid_is_present_but_not_in_the_uid_property(calendars): """Check that even if the UID is present somewhere the component is not returned. - See https://github.com/collective/icalendar/pull/1201/changes#r2869287074 + See https://github.com/PyCalendar/icalendar/pull/1201/changes#r2869287074 """ components = calendars.issue_1050_all_components.with_uid("alarm") assert len(components) == 0 diff --git a/src/icalendar/tests/test_issue_1066_calendar_uid.py b/src/icalendar/tests/test_issue_1066_calendar_uid.py index 200157464..d3fa85155 100644 --- a/src/icalendar/tests/test_issue_1066_calendar_uid.py +++ b/src/icalendar/tests/test_issue_1066_calendar_uid.py @@ -1,6 +1,6 @@ """Tests for issue #1066: Calendar.new() should auto-generate UID. -See https://github.com/collective/icalendar/issues/1066 +See https://github.com/PyCalendar/icalendar/issues/1066 """ import uuid diff --git a/src/icalendar/tests/test_issue_1124_no_utc_vtimezone.py b/src/icalendar/tests/test_issue_1124_no_utc_vtimezone.py index c9e20978b..7c422d94b 100644 --- a/src/icalendar/tests/test_issue_1124_no_utc_vtimezone.py +++ b/src/icalendar/tests/test_issue_1124_no_utc_vtimezone.py @@ -3,7 +3,7 @@ Per :rfc:`5545#section-3.2.19`, the TZID parameter MUST NOT be applied to DATE-TIME or TIME properties whose time values are specified in UTC. -See https://github.com/collective/icalendar/issues/1124 +See https://github.com/PyCalendar/icalendar/issues/1124 """ from datetime import datetime, timezone diff --git a/src/icalendar/tests/test_issue_116.py b/src/icalendar/tests/test_issue_116.py index 7d6cbaf7c..d869bc067 100644 --- a/src/icalendar/tests/test_issue_116.py +++ b/src/icalendar/tests/test_issue_116.py @@ -3,8 +3,8 @@ def test_issue_116(): """Issue #116/#117 - How to add 'X-APPLE-STRUCTURED-LOCATION' - https://github.com/collective/icalendar/issues/116 - https://github.com/collective/icalendar/issues/117 + https://github.com/PyCalendar/icalendar/issues/116 + https://github.com/PyCalendar/icalendar/issues/117 """ event = icalendar.cal.event.Event() event.add( diff --git a/src/icalendar/tests/test_issue_1237_jcal_paring_of_known_types.py b/src/icalendar/tests/test_issue_1237_jcal_paring_of_known_types.py index a68cd2fe7..6df3b781a 100644 --- a/src/icalendar/tests/test_issue_1237_jcal_paring_of_known_types.py +++ b/src/icalendar/tests/test_issue_1237_jcal_paring_of_known_types.py @@ -1,4 +1,4 @@ -"""Tests for Issue https://github.com/collective/icalendar/issues/1237""" +"""Tests for Issue https://github.com/PyCalendar/icalendar/issues/1237""" from datetime import datetime diff --git a/src/icalendar/tests/test_issue_1238.py b/src/icalendar/tests/test_issue_1238.py index 7c72c9549..d96950e3e 100644 --- a/src/icalendar/tests/test_issue_1238.py +++ b/src/icalendar/tests/test_issue_1238.py @@ -24,7 +24,7 @@ def test_x_property_broken_value(): """X-properties with VALUE=PERIOD but invalid content should yield vBroken (issue #1238). View the discussion: - https://github.com/collective/icalendar/pull/1288#discussion_r2962648845 + https://github.com/PyCalendar/icalendar/pull/1288#discussion_r2962648845 """ cal_str = "BEGIN:VCALENDAR\r\nX-FILTER-DATE-RANGE;VALUE=PERIOD:this-is-not-a-period\r\nEND:VCALENDAR\r\n" diff --git a/src/icalendar/tests/test_issue_127_categories_comma_escaping.py b/src/icalendar/tests/test_issue_127_categories_comma_escaping.py index 89e7bae71..8cb2bac63 100644 --- a/src/icalendar/tests/test_issue_127_categories_comma_escaping.py +++ b/src/icalendar/tests/test_issue_127_categories_comma_escaping.py @@ -1,7 +1,7 @@ """Issue #127 - CATEGORIES comma escaping bug Tests for categories containing commas. -See https://github.com/collective/icalendar/issues/127 +See https://github.com/PyCalendar/icalendar/issues/127 """ from icalendar import Calendar, Event diff --git a/src/icalendar/tests/test_issue_1436_implicit_file_read.py b/src/icalendar/tests/test_issue_1436_implicit_file_read.py index b5a807c0a..faaab6dfd 100644 --- a/src/icalendar/tests/test_issue_1436_implicit_file_read.py +++ b/src/icalendar/tests/test_issue_1436_implicit_file_read.py @@ -10,8 +10,8 @@ * a missing :class:`pathlib.Path` raises ``FileNotFoundError`` like :meth:`pathlib.Path.read_bytes`. -See issue: https://github.com/collective/icalendar/issues/1436 -Related: https://github.com/collective/icalendar/issues/756 +See issue: https://github.com/PyCalendar/icalendar/issues/1436 +Related: https://github.com/PyCalendar/icalendar/issues/756 """ from pathlib import Path diff --git a/src/icalendar/tests/test_issue_1569_singletons_multiple_consistency.py b/src/icalendar/tests/test_issue_1569_singletons_multiple_consistency.py index 20626c0da..3370cac4a 100644 --- a/src/icalendar/tests/test_issue_1569_singletons_multiple_consistency.py +++ b/src/icalendar/tests/test_issue_1569_singletons_multiple_consistency.py @@ -5,7 +5,7 @@ property in both lists is contradictory. This guards the whole component registry against that mistake. -See https://github.com/collective/icalendar/issues/1569 +See https://github.com/PyCalendar/icalendar/issues/1569 """ from __future__ import annotations diff --git a/src/icalendar/tests/test_issue_1593.py b/src/icalendar/tests/test_issue_1593.py index 447fbfc72..22d6aecec 100644 --- a/src/icalendar/tests/test_issue_1593.py +++ b/src/icalendar/tests/test_issue_1593.py @@ -1,4 +1,4 @@ -"""Tests for https://github.com/collective/icalendar/issues/1593.""" +"""Tests for https://github.com/PyCalendar/icalendar/issues/1593.""" from icalendar import Event, vCalAddress diff --git a/src/icalendar/tests/test_issue_1633.py b/src/icalendar/tests/test_issue_1633.py index 14ca7f9f2..77dd5ad33 100644 --- a/src/icalendar/tests/test_issue_1633.py +++ b/src/icalendar/tests/test_issue_1633.py @@ -4,7 +4,7 @@ written with dates used to parse without error and then raise an ``AttributeError`` from ``to_ical()``. -See https://github.com/collective/icalendar/issues/1633 +See https://github.com/PyCalendar/icalendar/issues/1633 """ from datetime import date, datetime, timedelta, timezone diff --git a/src/icalendar/tests/test_issue_165_missing_event.py b/src/icalendar/tests/test_issue_165_missing_event.py index 8e9e7368a..933a231b3 100644 --- a/src/icalendar/tests/test_issue_165_missing_event.py +++ b/src/icalendar/tests/test_issue_165_missing_event.py @@ -1,6 +1,6 @@ """Issue #165 - Problem parsing a file with event recurring on weekdays -https://github.com/collective/icalendar/issues/165 +https://github.com/PyCalendar/icalendar/issues/165 """ diff --git a/src/icalendar/tests/test_issue_168_parsing_invalid_calendars_no_warning.py b/src/icalendar/tests/test_issue_168_parsing_invalid_calendars_no_warning.py index f74723879..7ae22ad25 100644 --- a/src/icalendar/tests/test_issue_168_parsing_invalid_calendars_no_warning.py +++ b/src/icalendar/tests/test_issue_168_parsing_invalid_calendars_no_warning.py @@ -1,6 +1,6 @@ """Issue #168 - Parsing invalid icalendars fails without any warning -https://github.com/collective/icalendar/issues/168 +https://github.com/PyCalendar/icalendar/issues/168 """ diff --git a/src/icalendar/tests/test_issue_1795_duplicate_single_properties.py b/src/icalendar/tests/test_issue_1795_duplicate_single_properties.py index 5aad96b52..a0a5bb46e 100644 --- a/src/icalendar/tests/test_issue_1795_duplicate_single_properties.py +++ b/src/icalendar/tests/test_issue_1795_duplicate_single_properties.py @@ -1,6 +1,6 @@ """Duplicated singleton UTC properties return the earliest valid value. -See https://github.com/collective/icalendar/issues/1795 +See https://github.com/PyCalendar/icalendar/issues/1795 """ from datetime import datetime, timezone diff --git a/src/icalendar/tests/test_issue_1802_tzp_localize.py b/src/icalendar/tests/test_issue_1802_tzp_localize.py index b53adfd6e..0378fda40 100644 --- a/src/icalendar/tests/test_issue_1802_tzp_localize.py +++ b/src/icalendar/tests/test_issue_1802_tzp_localize.py @@ -4,7 +4,7 @@ datetime -> datetime time -> time -See https://github.com/collective/icalendar/issues/1802 +See https://github.com/PyCalendar/icalendar/issues/1802 """ from datetime import date, datetime, time diff --git a/src/icalendar/tests/test_issue_1870_escaped_quote_parameters.py b/src/icalendar/tests/test_issue_1870_escaped_quote_parameters.py index 5cc61d139..c9f88034c 100644 --- a/src/icalendar/tests/test_issue_1870_escaped_quote_parameters.py +++ b/src/icalendar/tests/test_issue_1870_escaped_quote_parameters.py @@ -1,6 +1,6 @@ r"""Escaped double quotes inside quoted parameter values. -See https://github.com/collective/icalendar/issues/1870 +See https://github.com/PyCalendar/icalendar/issues/1870 A content line such as ``ATTENDEE;CN="Qu\\"ote":mailto:x@y.z`` used to be dropped silently: the quote tracking toggled on every double quote, so the diff --git a/src/icalendar/tests/test_issue_218_parse_calendar.py b/src/icalendar/tests/test_issue_218_parse_calendar.py index 3e9e5c322..b0f7591ae 100644 --- a/src/icalendar/tests/test_issue_218_parse_calendar.py +++ b/src/icalendar/tests/test_issue_218_parse_calendar.py @@ -1,6 +1,6 @@ """Parse the calendar and make sure the timezone is used. -See https://github.com/collective/icalendar/issues/218 +See https://github.com/PyCalendar/icalendar/issues/218 """ from __future__ import annotations diff --git a/src/icalendar/tests/test_issue_279_decoding_categories.py b/src/icalendar/tests/test_issue_279_decoding_categories.py index 2a2bb39a2..048aac5b6 100644 --- a/src/icalendar/tests/test_issue_279_decoding_categories.py +++ b/src/icalendar/tests/test_issue_279_decoding_categories.py @@ -1,6 +1,6 @@ """This tests decoding categories. -See issue https://github.com/collective/icalendar/issues/279. +See issue https://github.com/PyCalendar/icalendar/issues/279. """ from icalendar import Event, Todo diff --git a/src/icalendar/tests/test_issue_27_period.py b/src/icalendar/tests/test_issue_27_period.py index a25af916c..2140416d6 100644 --- a/src/icalendar/tests/test_issue_27_period.py +++ b/src/icalendar/tests/test_issue_27_period.py @@ -1,6 +1,6 @@ """Issue #27 - multiple periods -https://github.com/collective/icalendar/issues/27 +https://github.com/PyCalendar/icalendar/issues/27 """ diff --git a/src/icalendar/tests/test_issue_301_add_rrule_as_string.py b/src/icalendar/tests/test_issue_301_add_rrule_as_string.py index 46a2dd318..b0c387e6e 100644 --- a/src/icalendar/tests/test_issue_301_add_rrule_as_string.py +++ b/src/icalendar/tests/test_issue_301_add_rrule_as_string.py @@ -1,6 +1,6 @@ """We want to add rrule as a string for convenience. -See https://github.com/collective/icalendar/issues/301 +See https://github.com/PyCalendar/icalendar/issues/301 """ from icalendar.cal.event import Event diff --git a/src/icalendar/tests/test_issue_313_globally_unique_tzid.py b/src/icalendar/tests/test_issue_313_globally_unique_tzid.py index 6bd82dd97..7bae48e57 100644 --- a/src/icalendar/tests/test_issue_313_globally_unique_tzid.py +++ b/src/icalendar/tests/test_issue_313_globally_unique_tzid.py @@ -6,7 +6,7 @@ prefix stopped the timezone from being identified, so the value was parsed as timezone-naive and the UTC offset was silently lost. -See https://github.com/collective/icalendar/issues/313 +See https://github.com/PyCalendar/icalendar/issues/313 """ from datetime import timedelta @@ -84,7 +84,7 @@ def test_cached_guess_warns_on_every_lookup(tzp): The first lookup stores the guessed timezone in the TZID cache. The second lookup is served from the cache and must still emit GloballyUniqueTZIDGuessed: the result is a guess no matter where it - comes from. See https://github.com/collective/icalendar/issues/1660 + comes from. See https://github.com/PyCalendar/icalendar/issues/1660 """ tzid = "/mozilla.org/20070129_1/America/New_York" with pytest.warns(GloballyUniqueTZIDGuessed): diff --git a/src/icalendar/tests/test_issue_315_uid_required.py b/src/icalendar/tests/test_issue_315_uid_required.py index 3682c1a66..621231ddb 100644 --- a/src/icalendar/tests/test_issue_315_uid_required.py +++ b/src/icalendar/tests/test_issue_315_uid_required.py @@ -1,6 +1,6 @@ """This tests if the UID is set be default, closing issue 315. -See https://github.com/collective/icalendar/issues/315 +See https://github.com/PyCalendar/icalendar/issues/315 """ import pytest diff --git a/src/icalendar/tests/test_issue_318_skip_default_parameters.py b/src/icalendar/tests/test_issue_318_skip_default_parameters.py index 40bcf1fd3..367d24e15 100644 --- a/src/icalendar/tests/test_issue_318_skip_default_parameters.py +++ b/src/icalendar/tests/test_issue_318_skip_default_parameters.py @@ -8,7 +8,7 @@ DTSTART;VALUE=DATE-TIME:20190616T050000Z equals DTSTART:20190616T050000Z -See https://github.com/collective/icalendar/issues/318 +See https://github.com/PyCalendar/icalendar/issues/318 """ from datetime import datetime diff --git a/src/icalendar/tests/test_issue_321_dst_offset.py b/src/icalendar/tests/test_issue_321_dst_offset.py index 0fdb172a5..100989ced 100644 --- a/src/icalendar/tests/test_issue_321_dst_offset.py +++ b/src/icalendar/tests/test_issue_321_dst_offset.py @@ -8,8 +8,8 @@ transition to calculate the dst_offset, but when only DAYLIGHT exists, this assumption fails. -Original issue: https://github.com/collective/icalendar/issues/321 -Original PR with test case: https://github.com/collective/icalendar/pull/379 +Original issue: https://github.com/PyCalendar/icalendar/issues/321 +Original PR with test case: https://github.com/PyCalendar/icalendar/pull/379 Test case by: @niccokunzmann Fix by: @SashankBhamidi """ diff --git a/src/icalendar/tests/test_issue_322_single_strings_characters_split_into_multiple_categories.py b/src/icalendar/tests/test_issue_322_single_strings_characters_split_into_multiple_categories.py index 918b3b9b5..074edadab 100644 --- a/src/icalendar/tests/test_issue_322_single_strings_characters_split_into_multiple_categories.py +++ b/src/icalendar/tests/test_issue_322_single_strings_characters_split_into_multiple_categories.py @@ -1,6 +1,6 @@ """ -See https://github.com/collective/icalendar/issues/322 +See https://github.com/PyCalendar/icalendar/issues/322 """ from icalendar.cal.calendar import Calendar diff --git a/src/icalendar/tests/test_issue_336_dateutil_timezone.py b/src/icalendar/tests/test_issue_336_dateutil_timezone.py index ea57ff796..43127326d 100644 --- a/src/icalendar/tests/test_issue_336_dateutil_timezone.py +++ b/src/icalendar/tests/test_issue_336_dateutil_timezone.py @@ -1,6 +1,6 @@ """We would like to be able to get the right timezone names. -See https://github.com/collective/icalendar/issues/336 +See https://github.com/PyCalendar/icalendar/issues/336 It appears that the timezone Brazil/DeNoronha is actually America/Noronha. """ diff --git a/src/icalendar/tests/test_issue_348_exception_parsing_value.py b/src/icalendar/tests/test_issue_348_exception_parsing_value.py index 80a3440ba..f60506779 100644 --- a/src/icalendar/tests/test_issue_348_exception_parsing_value.py +++ b/src/icalendar/tests/test_issue_348_exception_parsing_value.py @@ -1,13 +1,13 @@ """These are tests for Issue #348 -see https://github.com/collective/icalendar/issues/348 +see https://github.com/PyCalendar/icalendar/issues/348 """ def test_calendar_can_be_parsed_correctly(calendars): """Exception when there's no ':' when parsing value #348 - see https://github.com/collective/icalendar/issues/348 + see https://github.com/PyCalendar/icalendar/issues/348 """ freebusy = calendars.issue_348_exception_parsing_value.walk("VFREEBUSY")[0] assert freebusy["ORGANIZER"].params["CN"] == "Sixt SE" @@ -16,7 +16,7 @@ def test_calendar_can_be_parsed_correctly(calendars): def test_parameters_are_not_truncated(calendars): """We skip to the end and we do not want to loose parameters. - see https://github.com/collective/icalendar/pull/514#issuecomment-1505878801 + see https://github.com/PyCalendar/icalendar/pull/514#issuecomment-1505878801 """ freebusy = calendars.issue_348_exception_parsing_value.walk("VFREEBUSY")[0] assert freebusy["X-ORGANIZER2"].params["CN"] == "Sixt SE" diff --git a/src/icalendar/tests/test_issue_350.py b/src/icalendar/tests/test_issue_350.py index d7ad54551..549becb7a 100644 --- a/src/icalendar/tests/test_issue_350.py +++ b/src/icalendar/tests/test_issue_350.py @@ -1,6 +1,6 @@ """Issue #350 - Ignore X-... properties also at end of file? -https://github.com/collective/icalendar/issues/350 +https://github.com/PyCalendar/icalendar/issues/350 """ diff --git a/src/icalendar/tests/test_issue_355_url_escaping.py b/src/icalendar/tests/test_issue_355_url_escaping.py index 206df8476..60b2bfaee 100644 --- a/src/icalendar/tests/test_issue_355_url_escaping.py +++ b/src/icalendar/tests/test_issue_355_url_escaping.py @@ -1,6 +1,6 @@ """Tests for Issue 355. -see https://github.com/collective/icalendar/issues/355 +see https://github.com/PyCalendar/icalendar/issues/355 """ import pytest @@ -11,7 +11,7 @@ def test_facebook_link_is_correctly_parsed(events): """The facebook link must not be damaged. - see https://github.com/collective/icalendar/pull/356#issuecomment-1222626128 + see https://github.com/PyCalendar/icalendar/pull/356#issuecomment-1222626128 """ assert ( events.issue_355_url_escaping["DESCRIPTION"] @@ -22,7 +22,7 @@ def test_facebook_link_is_correctly_parsed(events): def test_other_facebook_link_is_correctly_parsed(events): """The facebook link must not be damaged. - see https://github.com/collective/icalendar/pull/356#issuecomment-1265872696 + see https://github.com/PyCalendar/icalendar/pull/356#issuecomment-1265872696 """ expected_result = "https://www.facebook.com/events/756119502186737/?acontext=%7B%22source%22%3A5%2C%22action_history%22%3A[%7B%22surface%22%3A%22page%22%2C%22mechanism%22%3A%22main_list%22%2C%22extra_data%22%3A%22%5C%22[]%5C%22%22%7D]%2C%22has_source%22%3Atrue%7D" assert events.issue_355_url_escaping_2["DESCRIPTION"] == expected_result diff --git a/src/icalendar/tests/test_issue_500_vboolean_for_parameter.py b/src/icalendar/tests/test_issue_500_vboolean_for_parameter.py index 074a83d80..623c2e747 100644 --- a/src/icalendar/tests/test_issue_500_vboolean_for_parameter.py +++ b/src/icalendar/tests/test_issue_500_vboolean_for_parameter.py @@ -3,7 +3,7 @@ def test_vBoolean_can_be_used_as_parameter_issue_500(events): - """https://github.com/collective/icalendar/issues/500""" + """https://github.com/PyCalendar/icalendar/issues/500""" attendee = vCalAddress("mailto:someone@example.com") attendee.params["rsvp"] = vBoolean(True) event = Event() diff --git a/src/icalendar/tests/test_issue_557_encode_native_parameters.py b/src/icalendar/tests/test_issue_557_encode_native_parameters.py index 730a0086d..3b191bbf9 100644 --- a/src/icalendar/tests/test_issue_557_encode_native_parameters.py +++ b/src/icalendar/tests/test_issue_557_encode_native_parameters.py @@ -4,7 +4,7 @@ if the object to encode was already of native type, making its behavior unexpected. -see https://github.com/collective/icalendar/issues/557 +see https://github.com/PyCalendar/icalendar/issues/557 """ import unittest diff --git a/src/icalendar/tests/test_issue_596_calendar_with_attributes.py b/src/icalendar/tests/test_issue_596_calendar_with_attributes.py index 82f93acac..c19ef1237 100644 --- a/src/icalendar/tests/test_issue_596_calendar_with_attributes.py +++ b/src/icalendar/tests/test_issue_596_calendar_with_attributes.py @@ -1,6 +1,6 @@ """Create a new method for the Calendar class. -See https://github.com/collective/icalendar/issues/596 +See https://github.com/PyCalendar/icalendar/issues/596 """ import pytest @@ -13,7 +13,7 @@ [ ("name", None), ("description", None), - ("prodid", f"-//collective//icalendar//{__version__}//EN"), + ("prodid", f"-//PyCalendar//icalendar//{__version__}//EN"), ("version", "2.0"), ("calscale", None), ("method", None), @@ -49,7 +49,7 @@ def test_default_getters(): assert c.calendar_name is None assert c.description is None assert c.version == "2.0" - assert c.prodid == f"-//collective//icalendar//{__version__}//EN" + assert c.prodid == f"-//PyCalendar//icalendar//{__version__}//EN" assert c.calscale == "GREGORIAN" assert c.method == "" assert c.color == "" diff --git a/src/icalendar/tests/test_issue_662_component_properties.py b/src/icalendar/tests/test_issue_662_component_properties.py index 5aafd7f1a..929708635 100644 --- a/src/icalendar/tests/test_issue_662_component_properties.py +++ b/src/icalendar/tests/test_issue_662_component_properties.py @@ -1,6 +1,6 @@ """This tests the properties of components and their types. -See https://github.com/collective/icalendar/issues/662 +See https://github.com/PyCalendar/icalendar/issues/662 """ from __future__ import annotations @@ -364,7 +364,7 @@ def test_event_duration_one_day(): def test_event_new_datetime_no_dtend_implicit_zero_duration(): """Event.new() with a naive datetime and no end/duration: implicit zero duration. - See https://github.com/collective/icalendar/issues/1275 + See https://github.com/PyCalendar/icalendar/issues/1275 RFC 5545 §3.6.1: "For cases where a VEVENT specifies a DTSTART with a DATE-TIME value type but no DTEND property, the event ends on the same @@ -380,7 +380,7 @@ def test_event_new_datetime_no_dtend_implicit_zero_duration(): def test_event_new_datetime_tzaware_no_dtend_implicit_zero_duration(tzp): """Event.new() with a timezone-aware datetime and no end/duration: implicit zero duration. - See https://github.com/collective/icalendar/issues/1275 + See https://github.com/PyCalendar/icalendar/issues/1275 This is the exact case reported in the issue: timezone-aware DTSTART with neither DTEND nor DURATION should yield zero duration, not raise an error. @@ -395,7 +395,7 @@ def test_event_new_datetime_tzaware_no_dtend_implicit_zero_duration(tzp): def test_event_new_date_no_dtend_implicit_one_day(): """Event.new() with a date and no end/duration: implicit one-day duration. - See https://github.com/collective/icalendar/issues/1275 + See https://github.com/PyCalendar/icalendar/issues/1275 RFC 5545 §3.6.1: "For cases where a VEVENT specifies a DTSTART with a DATE value type but no DTEND nor DURATION property, the event's duration diff --git a/src/icalendar/tests/test_issue_716_alarm_time_computation.py b/src/icalendar/tests/test_issue_716_alarm_time_computation.py index b6a487b38..8513b02d1 100644 --- a/src/icalendar/tests/test_issue_716_alarm_time_computation.py +++ b/src/icalendar/tests/test_issue_716_alarm_time_computation.py @@ -10,7 +10,7 @@ The alarms can only work on the properties of the event like DTSTART, DTEND, and DURATION. -See https://github.com/collective/icalendar/issues/716 +See https://github.com/PyCalendar/icalendar/issues/716 """ from datetime import date, datetime, timedelta, timezone @@ -36,7 +36,7 @@ # If you add a new lowercase property to Alarm and it should NOT appear on # AlarmTime, add its name here with a short reason. Otherwise, add a # matching pass-through property to AlarmTime itself. -# See https://github.com/collective/icalendar/issues/1421 +# See https://github.com/PyCalendar/icalendar/issues/1421 INTENTIONALLY_EXCLUDED_ALARM_PROPERTIES = { "comments", # generic component annotation @@ -558,7 +558,7 @@ def test_alarm_time_exposes_all_useful_alarm_properties(): If this test fails, a new lowercase property was likely added to Alarm and needs either a matching pass-through property on AlarmTime, or a reasoned entry in INTENTIONALLY_EXCLUDED_ALARM_PROPERTIES. - See https://github.com/collective/icalendar/issues/1421 + See https://github.com/PyCalendar/icalendar/issues/1421 """ alarm_prop = set() alarm_time_prop = set() @@ -573,5 +573,5 @@ def test_alarm_time_exposes_all_useful_alarm_properties(): assert not unaccounted, ( f"AlarmTime is missing pass-through properties for: {sorted(unaccounted)}. " f"Either add a getter, or add to INTENTIONALLY_EXCLUDED_ALARM_PROPERTIES " - f"with a reason. See https://github.com/collective/icalendar/issues/1421" + f"with a reason. See https://github.com/PyCalendar/icalendar/issues/1421" ) diff --git a/src/icalendar/tests/test_issue_720_uid_property.py b/src/icalendar/tests/test_issue_720_uid_property.py index 2d664bab2..4c9ee9a70 100644 --- a/src/icalendar/tests/test_issue_720_uid_property.py +++ b/src/icalendar/tests/test_issue_720_uid_property.py @@ -1,6 +1,6 @@ """This tests the UID property. -See https://github.com/collective/icalendar/issues/740 +See https://github.com/PyCalendar/icalendar/issues/740 """ from icalendar.cal.alarm import Alarm diff --git a/src/icalendar/tests/test_issue_722_generate_vtimezone.py b/src/icalendar/tests/test_issue_722_generate_vtimezone.py index 094e33a71..e73c68c4d 100644 --- a/src/icalendar/tests/test_issue_722_generate_vtimezone.py +++ b/src/icalendar/tests/test_issue_722_generate_vtimezone.py @@ -8,7 +8,7 @@ Then, we cannot assume that the future information stays the same but we should be able to create tests that work for the past. -See https://github.com/collective/icalendar/issues/722 +See https://github.com/PyCalendar/icalendar/issues/722 """ import zoneinfo diff --git a/src/icalendar/tests/test_issue_756_read_calendar_from_file.py b/src/icalendar/tests/test_issue_756_read_calendar_from_file.py index 068c22cf7..512cb92b7 100644 --- a/src/icalendar/tests/test_issue_756_read_calendar_from_file.py +++ b/src/icalendar/tests/test_issue_756_read_calendar_from_file.py @@ -1,6 +1,6 @@ """Test reading a calendar from a file. -See issue: https://github.com/collective/icalendar/issues/756 +See issue: https://github.com/PyCalendar/icalendar/issues/756 """ from pathlib import Path diff --git a/src/icalendar/tests/test_issue_798_property_parameters.py b/src/icalendar/tests/test_issue_798_property_parameters.py index 2c96b409e..6579542aa 100644 --- a/src/icalendar/tests/test_issue_798_property_parameters.py +++ b/src/icalendar/tests/test_issue_798_property_parameters.py @@ -1,6 +1,6 @@ """Test the property parameters. -See https://github.com/collective/icalendar/issues/798 +See https://github.com/PyCalendar/icalendar/issues/798 """ from datetime import datetime diff --git a/src/icalendar/tests/test_issue_802.py b/src/icalendar/tests/test_issue_802.py index e4a401287..b8f656c6d 100644 --- a/src/icalendar/tests/test_issue_802.py +++ b/src/icalendar/tests/test_issue_802.py @@ -1,7 +1,7 @@ """Test the sequence and other int properies. https://www.rfc-editor.org/rfc/rfc5545#section-3.8.7.4 -https://github.com/collective/icalendar/issues/802 +https://github.com/PyCalendar/icalendar/issues/802 """ diff --git a/src/icalendar/tests/test_issue_828.py b/src/icalendar/tests/test_issue_828.py index b99b8602b..96dabc37e 100644 --- a/src/icalendar/tests/test_issue_828.py +++ b/src/icalendar/tests/test_issue_828.py @@ -1,6 +1,6 @@ """Events differ although their times are equal. -See https://github.com/collective/icalendar/issues/828 +See https://github.com/PyCalendar/icalendar/issues/828 """ import contextlib diff --git a/src/icalendar/tests/test_issue_836_do_not_quote_tzid.py b/src/icalendar/tests/test_issue_836_do_not_quote_tzid.py index 76a8b4a5e..37bd133c6 100644 --- a/src/icalendar/tests/test_issue_836_do_not_quote_tzid.py +++ b/src/icalendar/tests/test_issue_836_do_not_quote_tzid.py @@ -1,6 +1,6 @@ """Quoting the TZID parameter creates compatibility problems. -See https://github.com/collective/icalendar/issues/836 +See https://github.com/PyCalendar/icalendar/issues/836 :rfc:`5545`: diff --git a/src/icalendar/tests/test_issue_843_new_method_for_components.py b/src/icalendar/tests/test_issue_843_new_method_for_components.py index db2f4a148..3900b7586 100644 --- a/src/icalendar/tests/test_issue_843_new_method_for_components.py +++ b/src/icalendar/tests/test_issue_843_new_method_for_components.py @@ -6,7 +6,7 @@ New keywords can be added over time. -See https://github.com/collective/icalendar/issues/843 +See https://github.com/PyCalendar/icalendar/issues/843 """ from __future__ import annotations @@ -867,8 +867,8 @@ def assert_component_attribute_has_value( {Calendar}, "source", "SOURCE", - "https://github.com/collective/icalendar", - "https://github.com/collective/icalendar", + "https://github.com/PyCalendar/icalendar", + "https://github.com/PyCalendar/icalendar", True, "setting a string", ), diff --git a/src/icalendar/tests/test_issue_857_enhanced_api.py b/src/icalendar/tests/test_issue_857_enhanced_api.py index 8850f07d9..1548ef7a4 100644 --- a/src/icalendar/tests/test_issue_857_enhanced_api.py +++ b/src/icalendar/tests/test_issue_857_enhanced_api.py @@ -48,7 +48,7 @@ def test_calendar_new_no_organization_uses_default_prodid(): calendar = Calendar.new(name="Test Calendar") # Should use the default icalendar prodid - assert "collective" in calendar.prodid + assert "PyCalendar" in calendar.prodid assert "icalendar" in calendar.prodid diff --git a/src/icalendar/tests/test_issue_860_improved_setters.py b/src/icalendar/tests/test_issue_860_improved_setters.py index fe6aa382d..f0509cc2b 100644 --- a/src/icalendar/tests/test_issue_860_improved_setters.py +++ b/src/icalendar/tests/test_issue_860_improved_setters.py @@ -1,7 +1,7 @@ """Tests for issue #860: Improved setters for start/duration/end. This test suite defines the desired behavior for the improved setter implementations -as described in https://github.com/collective/icalendar/issues/860 +as described in https://github.com/PyCalendar/icalendar/issues/860 The tests ensure RFC 5545 compliance, proper property locking mechanisms, and backward compatibility with existing code. diff --git a/src/icalendar/tests/test_issue_867_todo_duration_fix.py b/src/icalendar/tests/test_issue_867_todo_duration_fix.py index 5082b2272..8f89ae57d 100644 --- a/src/icalendar/tests/test_issue_867_todo_duration_fix.py +++ b/src/icalendar/tests/test_issue_867_todo_duration_fix.py @@ -184,7 +184,7 @@ def test_component_duration_calculated_fallback(component_class): def test_todo_duration_due_without_dtstart_is_zero(): """A VTODO with only DUE occupies that instant and has zero duration. - See https://github.com/collective/icalendar/issues/1786 + See https://github.com/PyCalendar/icalendar/issues/1786 """ todo = Todo() todo.end = datetime(2026, 1, 1, 12, 0) diff --git a/src/icalendar/tests/test_issue_884_get_duration.py b/src/icalendar/tests/test_issue_884_get_duration.py index abc837f3e..338a81783 100644 --- a/src/icalendar/tests/test_issue_884_get_duration.py +++ b/src/icalendar/tests/test_issue_884_get_duration.py @@ -1,7 +1,7 @@ """If the duration property exists, and it's not a ``default`` object but a ``timedelta`` instance, then it should return a ``duration``, not ``None``. -See https://github.com/collective/icalendar/issues/884 +See https://github.com/PyCalendar/icalendar/issues/884 """ from datetime import timedelta diff --git a/src/icalendar/tests/test_issue_898_todo_end.py b/src/icalendar/tests/test_issue_898_todo_end.py index ea106d92c..28d612e3e 100644 --- a/src/icalendar/tests/test_issue_898_todo_end.py +++ b/src/icalendar/tests/test_issue_898_todo_end.py @@ -8,7 +8,7 @@ - date: end = start (NOT start + 1 day) - datetime: end = start -See https://github.com/collective/icalendar/issues/898 +See https://github.com/PyCalendar/icalendar/issues/898 """ from datetime import date, datetime diff --git a/src/icalendar/tests/test_issue_899_copy_component.py b/src/icalendar/tests/test_issue_899_copy_component.py index 4e303a814..b563794a5 100644 --- a/src/icalendar/tests/test_issue_899_copy_component.py +++ b/src/icalendar/tests/test_issue_899_copy_component.py @@ -1,6 +1,6 @@ """Tests for copying components. -See https://github.com/collective/icalendar/issues/899 +See https://github.com/PyCalendar/icalendar/issues/899 """ import pytest diff --git a/src/icalendar/tests/test_jcal_recursion.py b/src/icalendar/tests/test_jcal_recursion.py index 1fd6b0b45..ffe3930bc 100644 --- a/src/icalendar/tests/test_jcal_recursion.py +++ b/src/icalendar/tests/test_jcal_recursion.py @@ -1,7 +1,7 @@ """Regression test for RecursionError on deeply-nested jCal. The iCal parser/serializer was made iterative to survive deep nesting -(see https://github.com/collective/icalendar/issues/1370), but the jCal +(see https://github.com/PyCalendar/icalendar/issues/1370), but the jCal counterparts :meth:`Component.from_jcal` and :meth:`Component.to_jcal` remained recursive: a small jCal payload nesting components a few hundred levels deep raised an uncaught ``RecursionError`` at the default recursion diff --git a/src/icalendar/tests/test_parsing.py b/src/icalendar/tests/test_parsing.py index ca1cefcfc..472e467bd 100644 --- a/src/icalendar/tests/test_parsing.py +++ b/src/icalendar/tests/test_parsing.py @@ -22,13 +22,13 @@ ("raw_content_line", "expected_output"), [ # Issue #142 - Multivalued parameters. This is needed for VCard 3.0. - # see https://github.com/collective/icalendar/pull/142 + # see https://github.com/PyCalendar/icalendar/pull/142 ( "TEL;TYPE=HOME,VOICE:000000000", ("TEL", Parameters({"TYPE": ["HOME", "VOICE"]}), "000000000"), ), # Issue #143 - Allow dots in property names. Another vCard related issue. - # see https://github.com/collective/icalendar/pull/143 + # see https://github.com/PyCalendar/icalendar/pull/143 ( "ITEMADRNULLTHISISTHEADRESS08158SOMECITY12345.ADR:;;This is the Adress 08; Some City;;12345;Germany", ( @@ -86,7 +86,7 @@ def test_percent_escapes_in_parameter_values_are_preserved( def test_timezone_info_present_in_ical_issue_112(events, timezone_info): """Issue #112 - No timezone info on EXDATE - https://github.com/collective/icalendar/issues/112 + https://github.com/PyCalendar/icalendar/issues/112 """ assert timezone_info in events.issue_112_missing_tzinfo_on_exdate.to_ical() @@ -94,7 +94,7 @@ def test_timezone_info_present_in_ical_issue_112(events, timezone_info): def test_timezone_name_parsed_issue_112(events): """Issue #112 - No timezone info on EXDATE - https://github.com/collective/icalendar/issues/112 + https://github.com/PyCalendar/icalendar/issues/112 """ assert ( events.issue_112_missing_tzinfo_on_exdate["exdate"][0].dts[0].dt.tzname() @@ -105,7 +105,7 @@ def test_timezone_name_parsed_issue_112(events): def test_issue_157_removes_trailing_semicolon(events): """Issue #157 - Recurring rules and trailing semicolons - https://github.com/collective/icalendar/pull/157 + https://github.com/PyCalendar/icalendar/pull/157 """ recur = events.issue_157_removes_trailing_semicolon.decoded("RRULE") assert isinstance(recur, vRecur) @@ -115,7 +115,7 @@ def test_issue_157_removes_trailing_semicolon(events): @pytest.mark.parametrize( "event_name", [ - # https://github.com/collective/icalendar/pull/100 + # https://github.com/PyCalendar/icalendar/pull/100 ("issue_100_transformed_doctests_into_unittests"), ("issue_184_broken_representation_of_period"), # PERIOD should be put back into shape @@ -133,7 +133,7 @@ def test_event_to_ical_is_inverse_of_from_ical(events, event_name): def test_decode_rrule_attribute_error_issue_70(events): # Issue #70 - e.decode("RRULE") causes Attribute Error - # see https://github.com/collective/icalendar/issues/70 + # see https://github.com/PyCalendar/icalendar/issues/70 recur = events.issue_70_rrule_causes_attribute_error.decoded("RRULE") assert isinstance(recur, vRecur) assert recur.to_ical() == b"FREQ=WEEKLY;UNTIL=20070619T225959;INTERVAL=1" @@ -142,7 +142,7 @@ def test_decode_rrule_attribute_error_issue_70(events): def test_description_parsed_properly_issue_53(events): """Issue #53 - Parsing failure on some descriptions? - https://github.com/collective/icalendar/issues/53 + https://github.com/PyCalendar/icalendar/issues/53 """ assert ( b"July 12 at 6:30 PM" @@ -197,7 +197,7 @@ def test_raises_value_error_for_properties_without_parent_pull_179(): """Found an issue where from_ical() would raise IndexError for properties without parent components. - https://github.com/collective/icalendar/pull/179 + https://github.com/PyCalendar/icalendar/pull/179 """ with pytest.raises(ValueError): Calendar.from_ical("VERSION:2.0") @@ -206,7 +206,7 @@ def test_raises_value_error_for_properties_without_parent_pull_179(): def test_tzid_parsed_properly_issue_53(timezones): """Issue #53 - Parsing failure on some descriptions? - https://github.com/collective/icalendar/issues/53 + https://github.com/PyCalendar/icalendar/issues/53 """ assert ( timezones.issue_53_tzid_parsed_properly["tzid"].to_ical() == b"America/New_York" @@ -215,7 +215,7 @@ def test_tzid_parsed_properly_issue_53(timezones): def test_timezones_to_ical_is_inverse_of_from_ical(timezones): """Issue #55 - Parse error on utc-offset with seconds value - see https://github.com/collective/icalendar/issues/55""" + see https://github.com/PyCalendar/icalendar/issues/55""" timezone = timezones["issue_55_parse_error_on_utc_offset_with_seconds"] assert timezone.to_ical() == timezone.raw_ics @@ -231,8 +231,8 @@ def test_no_tzid_when_utc(utc, date, expected_output): """Issue #58 - TZID on UTC DATE-TIMEs Issue #335 - UTC timezone identification is broken - https://github.com/collective/icalendar/issues/58 - https://github.com/collective/icalendar/issues/335 + https://github.com/PyCalendar/icalendar/issues/58 + https://github.com/PyCalendar/icalendar/issues/335 """ # According to RFC 5545: "The TZID property parameter MUST NOT be # applied to DATE-TIME or TIME properties whose time values are @@ -246,7 +246,7 @@ def test_no_tzid_when_utc(utc, date, expected_output): def test_vBinary_base64_encoded_issue_82(): """Issue #82 - vBinary __repr__ called rather than to_ical from container types - https://github.com/collective/icalendar/issues/82 + https://github.com/PyCalendar/icalendar/issues/82 """ b = vBinary("text") b.params["FMTTYPE"] = "text/plain" @@ -256,7 +256,7 @@ def test_vBinary_base64_encoded_issue_82(): def test_creates_event_with_base64_encoded_attachment_issue_82(events): """Issue #82 - vBinary __repr__ called rather than to_ical from container types - https://github.com/collective/icalendar/issues/82 + https://github.com/PyCalendar/icalendar/issues/82 """ b = vBinary("text") b.params["FMTTYPE"] = "text/plain" @@ -269,7 +269,7 @@ def test_creates_event_with_base64_encoded_attachment_issue_82(events): "calendar_name", [ # Issue #466 - [BUG] TZID timezone is ignored when forward-slash is used - # https://github.com/collective/icalendar/issues/466 + # https://github.com/PyCalendar/icalendar/issues/466 "issue_466_respect_unique_timezone", "issue_466_convert_tzid_with_slash", ], diff --git a/src/icalendar/tests/test_period.py b/src/icalendar/tests/test_period.py index f225e527c..359b487ee 100644 --- a/src/icalendar/tests/test_period.py +++ b/src/icalendar/tests/test_period.py @@ -1,7 +1,7 @@ """These tests make sure that we have some coverage on the usage of the PERIOD value type. See -- https://github.com/collective/icalendar/issues/156 +- https://github.com/PyCalendar/icalendar/issues/156 - https://github.com/pimutils/khal/issues/152#issuecomment-933635248 """ diff --git a/src/icalendar/tests/test_property_docstrings.py b/src/icalendar/tests/test_property_docstrings.py index 35f4867f5..7bac13abb 100644 --- a/src/icalendar/tests/test_property_docstrings.py +++ b/src/icalendar/tests/test_property_docstrings.py @@ -8,7 +8,7 @@ ``DTSTART``'s "Start of the component." and was documented as the start of the component. -Part of https://github.com/collective/icalendar/issues/1650 +Part of https://github.com/PyCalendar/icalendar/issues/1650 """ from datetime import datetime, timezone diff --git a/src/icalendar/tests/test_recurrence.py b/src/icalendar/tests/test_recurrence.py index aaaf5316a..1323397c0 100644 --- a/src/icalendar/tests/test_recurrence.py +++ b/src/icalendar/tests/test_recurrence.py @@ -106,7 +106,7 @@ def test_list_exdate_to_ical_is_inverse_of_from_ical( b"BEGIN:VEVENT\r\nSUMMARY:Event MONTHLY -5SA\r\nDTSTART;VALUE=DATE:20531101\r\nRRULE:FREQ=MONTHLY;BYDAY=-5SA\r\nEND:VEVENT\r\n", ), # Specifically test examples from the report of Issue #518 - # https://github.com/collective/icalendar/issues/518 + # https://github.com/PyCalendar/icalendar/issues/518 ( "YEARLY", "9MO", diff --git a/src/icalendar/tests/test_repr_recursion.py b/src/icalendar/tests/test_repr_recursion.py index 31cd2f5ce..d4f141882 100644 --- a/src/icalendar/tests/test_repr_recursion.py +++ b/src/icalendar/tests/test_repr_recursion.py @@ -1,6 +1,6 @@ """Regression test for repr() RecursionError on deeply-nested calendars. -See https://github.com/collective/icalendar/issues/1370. +See https://github.com/PyCalendar/icalendar/issues/1370. A crafted ``.ics`` payload of only ~13 KB nesting ``BEGIN:VEVENT`` many levels deep used to make ``repr()`` / ``str()`` / ``f"{cal}"`` diff --git a/src/icalendar/tests/test_request_status.py b/src/icalendar/tests/test_request_status.py index 226a4b7ab..339f7bcf4 100644 --- a/src/icalendar/tests/test_request_status.py +++ b/src/icalendar/tests/test_request_status.py @@ -1,7 +1,7 @@ """This tests the REQUEST-STATUS property. See -- https://github.com/collective/icalendar/issues/1666 +- https://github.com/PyCalendar/icalendar/issues/1666 - https://www.rfc-editor.org/rfc/rfc5545#section-3.8.8.3 """ diff --git a/src/icalendar/tests/test_rfc_7529.py b/src/icalendar/tests/test_rfc_7529.py index e74be7eb8..f816f30dc 100644 --- a/src/icalendar/tests/test_rfc_7529.py +++ b/src/icalendar/tests/test_rfc_7529.py @@ -1,7 +1,7 @@ """This tests the compatibility with RFC 7529. See -- https://github.com/collective/icalendar/issues/655 +- https://github.com/PyCalendar/icalendar/issues/655 - https://www.rfc-editor.org/rfc/rfc7529.html """ diff --git a/src/icalendar/tests/test_rfc_7986.py b/src/icalendar/tests/test_rfc_7986.py index cebbf22fe..c976186cf 100644 --- a/src/icalendar/tests/test_rfc_7986.py +++ b/src/icalendar/tests/test_rfc_7986.py @@ -289,6 +289,6 @@ def test_attributes_from_calendar(calendars, get_calendar): assert calendar.description == "We want a lot of RFC 7986 parameters in here!" assert ( calendar.source - == "https://github.com/collective/icalendar/tree/main/src/icalendar/tests/calendars/rfc_7986_properties.ics" + == "https://github.com/PyCalendar/icalendar/tree/main/src/icalendar/tests/calendars/rfc_7986_properties.ics" ) assert isinstance(calendar.source, vUri) diff --git a/src/icalendar/tests/test_rfc_7986_categories.py b/src/icalendar/tests/test_rfc_7986_categories.py index 482fbfa7d..35b13774c 100644 --- a/src/icalendar/tests/test_rfc_7986_categories.py +++ b/src/icalendar/tests/test_rfc_7986_categories.py @@ -3,7 +3,7 @@ CATEGORIES property See -- https://github.com/collective/icalendar/issues/655 +- https://github.com/PyCalendar/icalendar/issues/655 - https://www.rfc-editor.org/rfc/rfc7529.html """ diff --git a/src/icalendar/tests/test_rfc_9074.py b/src/icalendar/tests/test_rfc_9074.py index 63b455b8b..9827920f2 100644 --- a/src/icalendar/tests/test_rfc_9074.py +++ b/src/icalendar/tests/test_rfc_9074.py @@ -1,7 +1,7 @@ """Test the VALARM compatibility of RFC 9074. See https://www.rfc-editor.org/rfc/rfc9074.html -and also https://github.com/collective/icalendar/issues/657 +and also https://github.com/PyCalendar/icalendar/issues/657 """ import pytest diff --git a/src/icalendar/timezone/equivalent_timezone_ids.py b/src/icalendar/timezone/equivalent_timezone_ids.py index 210a305cb..e86f979e2 100644 --- a/src/icalendar/timezone/equivalent_timezone_ids.py +++ b/src/icalendar/timezone/equivalent_timezone_ids.py @@ -86,7 +86,7 @@ def generate_tree( offsets: dict[timedelta, list[TZ]] = defaultdict(list) try: # if we are around a timezone change, we must move on - # see https://github.com/collective/icalendar/issues/776 + # see https://github.com/PyCalendar/icalendar/issues/776 around_tz_change = not all( tz.tz.utcoffset(start) == tz.tz.utcoffset(start - DISTANCE_FROM_TIMEZONE_CHANGE) diff --git a/src/icalendar/timezone/zoneinfo.py b/src/icalendar/timezone/zoneinfo.py index 22ae7f09c..3cc969ccd 100644 --- a/src/icalendar/timezone/zoneinfo.py +++ b/src/icalendar/timezone/zoneinfo.py @@ -31,7 +31,7 @@ class ZONEINFO(TZProvider): name = "zoneinfo" # Use lazy initialization via properties to avoid import-time failures # in environments without timezone data (e.g., Pyodide/WebAssembly). - # See https://github.com/collective/icalendar/issues/1073 + # See https://github.com/PyCalendar/icalendar/issues/1073 _utc: zoneinfo.ZoneInfo | None = None _available_timezones_cache: set | None = None # Class-level lock is intentional: caches are shared by all instances. diff --git a/tox.ini b/tox.ini index 00a8afd39..4f066b308 100644 --- a/tox.ini +++ b/tox.ini @@ -3,7 +3,7 @@ envlist = py310,py311,py312,py313,py314,pypy3,docs,nopytz # Note: the 'docs' env creates a 'build' directory which may interfere in strange ways # with the other environments. You might see this when you run the tests in parallel. -# See https://github.com/collective/icalendar/pull/359#issuecomment-1214150269 +# See https://github.com/PyCalendar/icalendar/pull/359#issuecomment-1214150269 [testenv] description = test environment From 75b275ae9c403e3f3b1cafce6e6d89f255d730f4 Mon Sep 17 00:00:00 2001 From: Sashank Bhamidi Date: Fri, 13 Nov 2026 02:06:58 +0530 Subject: [PATCH 2/2] Take Steve's suggestions --- .gitignore | 1 - docs/contribute/maintenance.rst | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index f933d1d44..5df5a8c8a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,5 @@ __pycache__ /_build/ -/docs/_build/ /.coverage /.hypothesis/ /.prompts/ diff --git a/docs/contribute/maintenance.rst b/docs/contribute/maintenance.rst index 617df9824..d2f03d607 100644 --- a/docs/contribute/maintenance.rst +++ b/docs/contribute/maintenance.rst @@ -49,7 +49,7 @@ Coveralls It doesn't grant you permission to configure the Coveralls GitHub app. That requires Owner permission in the GitHub organization PyCalendar. - To configure the Coveralls app for icalendar, contact an owner of the PyCalendar organization, such as @stevepiercy. + To configure the Coveralls app for icalendar, contact an `owner of the PyCalendar organization `_. .. seealso::