From 5f725c651b20e10e5459b7a341dc996e789fcbae Mon Sep 17 00:00:00 2001 From: vincent porte Date: Wed, 5 Mar 2025 11:10:23 +0100 Subject: [PATCH 1/2] add python-crontab dependencies --- pyproject.toml | 1 + uv.lock | 14 ++++++++++++++ 2 files changed, 15 insertions(+) diff --git a/pyproject.toml b/pyproject.toml index 84230e213..0c6c5b4d6 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -24,6 +24,7 @@ dependencies = [ "django-permissions-policy>=4.24", "langdetect>=1.0.9", "pyjwt>=2.10", + "python-crontab>=3.2.0", ] [dependency-groups] diff --git a/uv.lock b/uv.lock index 76194e3b6..90008c692 100644 --- a/uv.lock +++ b/uv.lock @@ -711,6 +711,7 @@ dependencies = [ { name = "langdetect" }, { name = "psycopg" }, { name = "pyjwt" }, + { name = "python-crontab" }, { name = "python-dotenv" }, { name = "sentry-sdk" }, ] @@ -756,6 +757,7 @@ requires-dist = [ { name = "langdetect", specifier = ">=1.0.9" }, { name = "psycopg", specifier = ">=3.2" }, { name = "pyjwt", specifier = ">=2.10" }, + { name = "python-crontab", specifier = ">=3.2.0" }, { name = "python-dotenv", specifier = ">=1.0" }, { name = "sentry-sdk", specifier = ">=2.20" }, ] @@ -1073,6 +1075,18 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/6d/82/1d96bf03ee4c0fdc3c0cbe61470070e659ca78dc0086fb88b66c185e2449/pytest_xdist-3.6.1-py3-none-any.whl", hash = "sha256:9ed4adfb68a016610848639bb7e02c9352d5d9f03d04809919e2dafc3be4cca7", size = 46108 }, ] +[[package]] +name = "python-crontab" +version = "3.2.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "python-dateutil" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e2/f0/25775565c133d4e29eeb607bf9ddba0075f3af36041a1844dd207881047f/python_crontab-3.2.0.tar.gz", hash = "sha256:40067d1dd39ade3460b2ad8557c7651514cd3851deffff61c5c60e1227c5c36b", size = 57001 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3b/91/832fb3b3a1f62bd2ab4924f6be0c7736c9bc4f84d3b153b74efcf6d4e4a1/python_crontab-3.2.0-py3-none-any.whl", hash = "sha256:82cb9b6a312d41ff66fd3caf3eed7115c28c195bfb50711bc2b4b9592feb9fe5", size = 27351 }, +] + [[package]] name = "python-dateutil" version = "2.9.0.post0" From 60b338e738800264858d9d5fb28c2b93c3522bf7 Mon Sep 17 00:00:00 2001 From: vincent porte Date: Wed, 5 Mar 2025 11:16:02 +0100 Subject: [PATCH 2/2] =?UTF-8?q?add=20sorting=20cronified=20tasks=20order?= =?UTF-8?q?=20test=20on=20frequency=20(nb=20of=20occurs=20in=20a=20year)?= =?UTF-8?q?=20>=20hour=20>=20minute,=20PLUS=C2=A0reorder=20tasks=20in=20cr?= =?UTF-8?q?on.json"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- clevercloud/cron.json | 14 +++++++------- lacommunaute/utils/tests/tests_consistency.py | 17 +++++++++++++++++ 2 files changed, 24 insertions(+), 7 deletions(-) create mode 100644 lacommunaute/utils/tests/tests_consistency.py diff --git a/clevercloud/cron.json b/clevercloud/cron.json index 0c8250142..160b9ba71 100644 --- a/clevercloud/cron.json +++ b/clevercloud/cron.json @@ -1,15 +1,15 @@ [ "*/10 * * * * $ROOT/clevercloud/rebuild_index.sh", + "*/15 7-21 * * * $ROOT/clevercloud/run_management_command.sh send_messages_notifications asap", + "10 6-22 * * * $ROOT/clevercloud/run_management_command.sh add_user_to_list_when_register", + "55 8-18 * * 1-5 $ROOT/clevercloud/run_management_command.sh add_missyou_notifications", "0 3 * * * $ROOT/clevercloud/run_management_command.sh clearsessions", + "20 6 * * * $ROOT/clevercloud/run_management_command.sh send_messages_notifications day", "0 11 * * * $ROOT/clevercloud/run_management_command.sh collect_matomo_stats", "5 11 * * * $ROOT/clevercloud/run_management_command.sh collect_django_stats", - "10 11 1 * * $ROOT/clevercloud/run_management_command.sh collect_matomo_stats --period month", + "2 12 * * * $ROOT/clevercloud/run_management_command.sh datas_anonymisation", + "30 13 * * 1-5 $ROOT/clevercloud/run_management_command.sh send_notifs_on_unanswered_topics", "15 11 * * 1 $ROOT/clevercloud/run_management_command.sh collect_matomo_forum_stats", - "*/15 7-21 * * * $ROOT/clevercloud/run_management_command.sh send_messages_notifications asap", - "55 8-18 * * 1-5 $ROOT/clevercloud/run_management_command.sh add_missyou_notifications", - "20 6 * * * $ROOT/clevercloud/run_management_command.sh send_messages_notifications day", - "10 6-22 * * * $ROOT/clevercloud/run_management_command.sh add_user_to_list_when_register", "0 12 * * 1 $ROOT/clevercloud/run_management_command.sh delete_old_email_sent_tracks", - "2 12 * * * $ROOT/clevercloud/run_management_command.sh datas_anonymisation", - "30 13 * * 1-5 $ROOT/clevercloud/run_management_command.sh send_notifs_on_unanswered_topics" + "10 11 1 * * $ROOT/clevercloud/run_management_command.sh collect_matomo_stats --period month" ] diff --git a/lacommunaute/utils/tests/tests_consistency.py b/lacommunaute/utils/tests/tests_consistency.py new file mode 100644 index 000000000..d8576ceba --- /dev/null +++ b/lacommunaute/utils/tests/tests_consistency.py @@ -0,0 +1,17 @@ +import json +import pathlib + +from crontab import CronTab + + +def test_crontab_order(settings): + current_jobs = list( + CronTab( + tab="\n".join( + json.loads(pathlib.Path(settings.ROOT_DIR).joinpath("clevercloud", "cron.json").read_bytes()) + ) + ) + ) + ordered_jobs = sorted(current_jobs, key=lambda j: (-j.frequency(), j.hour.parts, j.minute.parts)) + + assert ordered_jobs == current_jobs