diff --git a/last_commit.txt b/last_commit.txt index 70be03d5ab..068e16cbce 100644 --- a/last_commit.txt +++ b/last_commit.txt @@ -1,91 +1,25 @@ -Repository: plone.app.event +Repository: plone.event Branch: refs/heads/master -Date: 2023-09-07T15:13:55+02:00 -Author: Maurits van Rees (mauritsvanrees) -Commit: https://github.com/plone/plone.app.event/commit/86c775628ece5bedb0824402de8d1c6a2feec527 +Date: 2023-09-18T16:07:30+02:00 +Author: Mauro Amico (mamico) +Commit: https://github.com/plone/plone.event/commit/186c0708b166e419b1b018eaaada6023025ce310 -Require setuptools 68.2 or higher for building the package. +ignore dtstart and until time in rrule (#23) -When built with setuptools 68.1, you could not import the package, at least not an editable package. -Note that you can still *install* this package with older setuptools versions. -See [Plone meta issue 172](https://github.com/plone/meta/issues/172) for details. - -New problem though. `tox -e dependencies` says: - -``` -ERROR Missing dependencies: - setuptools>=68.2 -``` - -I tried with `setuptools<68.1', which would also work, but that only changes the message: - -``` -ERROR Missing dependencies: - setuptools<68.1 -``` - -I think this is a shortcoming in `z3c.dependencychecker`. It should not report this as a missing dependency. -It should see that `pyproject.toml` has this dependency covered. - -We definitely should *not* require `setuptools>=68.2` in `install_requires`. - -Files changed: -A news/172.internal -M pyproject.toml - -b'diff --git a/news/172.internal b/news/172.internal\nnew file mode 100644\nindex 000000000..6a54c5491\n--- /dev/null\n+++ b/news/172.internal\n@@ -0,0 +1,5 @@\n+Require setuptools 68.2 or higher for building the package.\n+When built with setuptools 68.1, you could not import the package, at least not an editable package.\n+Note that you can still *install* this package with older setuptools versions.\n+See `Plone meta issue 172 `_ for details.\n+[maurits]\ndiff --git a/pyproject.toml b/pyproject.toml\nindex 4f15ca58f..fd2ab3e2c 100644\n--- a/pyproject.toml\n+++ b/pyproject.toml\n@@ -1,6 +1,9 @@\n # Generated from:\n # https://github.com/plone/meta/tree/master/config/default\n # See the inline comments on how to expand/tweak this configuration file\n+[build-system]\n+requires = ["setuptools>=68.2", "wheel"]\n+\n [tool.towncrier]\n directory = "news/"\n filename = "CHANGES.rst"\n' - -Repository: plone.app.event - - -Branch: refs/heads/master -Date: 2023-09-07T15:47:33+02:00 -Author: Maurits van Rees (mauritsvanrees) -Commit: https://github.com/plone/plone.app.event/commit/ce6b5c3c9d9180d966f96c57a724385730c4f1d0 - -tox -e dependencies: we do want isolation when building the package. - -Otherwise the build command fails. -See https://github.com/reinout/z3c.dependencychecker/issues/124 - -Files changed: -M tox.ini - -b'diff --git a/tox.ini b/tox.ini\nindex 60d323c7..16c4de19 100644\n--- a/tox.ini\n+++ b/tox.ini\n@@ -58,7 +58,7 @@ deps =\n build\n z3c.dependencychecker==2.11\n commands =\n- python -m build --sdist --no-isolation\n+ python -m build --sdist\n dependencychecker\n \n [testenv:dependencies-graph]\n' - -Repository: plone.app.event - - -Branch: refs/heads/master -Date: 2023-09-07T15:53:11+02:00 -Author: Maurits van Rees (mauritsvanrees) -Commit: https://github.com/plone/plone.app.event/commit/ff5c13e759da554c607d6833ad447b25d0018620 - -tox: need to build with isolation in check-release env as well. - -Files changed: -M tox.ini - -b'diff --git a/tox.ini b/tox.ini\nindex 16c4de19..3f82c641 100644\n--- a/tox.ini\n+++ b/tox.ini\n@@ -125,7 +125,7 @@ commands =\n # we build the change log as news entries might break\n # the README that is displayed on PyPI\n towncrier build --version=100.0.0 --yes\n- python -m build --sdist --no-isolation\n+ python -m build --sdist\n twine check dist/*\n \n [testenv:circular]\n' - -Repository: plone.app.event - - -Branch: refs/heads/master -Date: 2023-09-16T12:13:25+02:00 -Author: Maurits van Rees (mauritsvanrees) -Commit: https://github.com/plone/plone.app.event/commit/e040c0e3ea7f7a1458000fb15d5188f9dfb0f9bf - -Merge pull request #385 from plone/maurits-minimum-setuptools-version-for-build - -Require setuptools 68.2 or higher for building the package. +Ignore dtstart and until time in rrule in recurrence_sequence_ical. + +In recurrence_sequence_ical, the DTSTART in the recrule is used for all occurrences that follow the first one. This is a design issue because the start time is a mandatory parameter, and its time must be used for every occurrence, by design. + +For the same reason, the time in the UNTIL field must always be ignored. + +Problems occur, for example, with the rrule widget in Volto (see also plone/volto#5002), which consistently returns a DTSTART and UNTIL field inside the recrule with a timezone (UTC). Files changed: -A news/172.internal -M pyproject.toml -M tox.ini +A news/23.bugfix +M plone/event/recurrence.py +M plone/event/tests/test_recurrence_sequence_ical.py -b'diff --git a/news/172.internal b/news/172.internal\nnew file mode 100644\nindex 000000000..6a54c5491\n--- /dev/null\n+++ b/news/172.internal\n@@ -0,0 +1,5 @@\n+Require setuptools 68.2 or higher for building the package.\n+When built with setuptools 68.1, you could not import the package, at least not an editable package.\n+Note that you can still *install* this package with older setuptools versions.\n+See `Plone meta issue 172 `_ for details.\n+[maurits]\ndiff --git a/pyproject.toml b/pyproject.toml\nindex 4f15ca58f..fd2ab3e2c 100644\n--- a/pyproject.toml\n+++ b/pyproject.toml\n@@ -1,6 +1,9 @@\n # Generated from:\n # https://github.com/plone/meta/tree/master/config/default\n # See the inline comments on how to expand/tweak this configuration file\n+[build-system]\n+requires = ["setuptools>=68.2", "wheel"]\n+\n [tool.towncrier]\n directory = "news/"\n filename = "CHANGES.rst"\ndiff --git a/tox.ini b/tox.ini\nindex 60d323c79..3f82c641a 100644\n--- a/tox.ini\n+++ b/tox.ini\n@@ -58,7 +58,7 @@ deps =\n build\n z3c.dependencychecker==2.11\n commands =\n- python -m build --sdist --no-isolation\n+ python -m build --sdist\n dependencychecker\n \n [testenv:dependencies-graph]\n@@ -125,7 +125,7 @@ commands =\n # we build the change log as news entries might break\n # the README that is displayed on PyPI\n towncrier build --version=100.0.0 --yes\n- python -m build --sdist --no-isolation\n+ python -m build --sdist\n twine check dist/*\n \n [testenv:circular]\n' +b'diff --git a/news/23.bugfix b/news/23.bugfix\nnew file mode 100644\nindex 0000000..abd78be\n--- /dev/null\n+++ b/news/23.bugfix\n@@ -0,0 +1 @@\n+Ignore dtstart and until time in rrule in recurrence_sequence_ical [mamico]\ndiff --git a/plone/event/recurrence.py b/plone/event/recurrence.py\nindex 2900837..34a6ffe 100644\n--- a/plone/event/recurrence.py\n+++ b/plone/event/recurrence.py\n@@ -72,6 +72,14 @@ def recurrence_sequence_ical(\n duration = datetime.timedelta(0)\n \n if recrule:\n+ # We want the recurrence be calculated ignoring the DTSTART,\n+ # which is defined by the event\'s own start.\n+ # \xe2\x80\x8c Also set the UNTIL time to the end of the day to include the last\n+ # occurrence for sure.\n+ #\n+ # start is a mandatory parameter for this function, remove DTSTART\n+ # from recrule\n+ recrule = re.sub(r"DTSTART:[^;\\n]*[;\\n]", "", recrule, re.MULTILINE)\n # TODO BUGFIX WRONG TIME DEFINITIONS\n # THIS HACK ensures, that UNTIL, RDATE and EXDATE definitions with\n # incorrect time (currently always set to 0:00 by the recurrence\n@@ -93,9 +101,9 @@ def recurrence_sequence_ical(\n # subbing if the start time is already 000000.\n if t0str != "T000000":\n recrule = re.sub(r"T000000", t0str, recrule)\n- # Then, replace incorrect until times with the end of the day\n+ # Then, replace each until times with the end of the day\n recrule = re.sub(\n- r"(UNTIL[^T]*[0-9]{8})T(000000)",\n+ r"(UNTIL[^T]*[0-9]{8})T([0-9]{6}Z?)",\n r"\\1T235959",\n recrule,\n )\ndiff --git a/plone/event/tests/test_recurrence_sequence_ical.py b/plone/event/tests/test_recurrence_sequence_ical.py\nindex 25f1887..6dbe2cf 100644\n--- a/plone/event/tests/test_recurrence_sequence_ical.py\n+++ b/plone/event/tests/test_recurrence_sequence_ical.py\n@@ -180,3 +180,18 @@ def test_recrule_until_with_timezone(self):\n recrule = "RRULE:FREQ=DAILY;UNTIL=20111130T000000Z"\n seq = list(recurrence_sequence_ical(start, recrule=recrule))\n self.assertEqual(len(seq), 7)\n+\n+ def test_recrule_with_dtstart(self):\n+ from datetime import datetime\n+ from plone.event.recurrence import recurrence_sequence_ical\n+\n+ import pytz\n+\n+ at = pytz.timezone("Europe/Vienna")\n+ start = at.localize(datetime(2023, 9, 4, 1, 0))\n+ # DTSTART is ignored, because start is ever explicitly given\n+ recrule = "DTSTART:20230903T180000Z\\nRRULE:FREQ=DAILY;UNTIL=20230905T230000Z"\n+ seq = list(recurrence_sequence_ical(start, recrule=recrule))\n+ self.assertEqual(len(seq), 2)\n+ self.assertEqual(seq[0], at.localize(datetime(2023, 9, 4, 1, 0)))\n+ self.assertEqual(seq[1], at.localize(datetime(2023, 9, 5, 1, 0)))\n'