From 86d373e6683404d6f2e1eb0b46a7ee5ecd909086 Mon Sep 17 00:00:00 2001 From: Peter Bieringer Date: Tue, 2 Jun 2026 06:39:46 +0200 Subject: [PATCH 1/3] sharing/info: expose supported actions --- radicale/sharing/__init__.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/radicale/sharing/__init__.py b/radicale/sharing/__init__.py index bee138b0..e0161a9a 100644 --- a/radicale/sharing/__init__.py +++ b/radicale/sharing/__init__.py @@ -116,6 +116,7 @@ API_TYPES_V1: dict[str, type] = { "SupportedConversions": list, "PermittedPropertiesOverlay": bool, "SupportedPropertiesOverlay": list, + "SupportedActions": dict, } @@ -184,6 +185,7 @@ def check_template_alarm_trigger(data: Any) -> str: return data +# dict for validation of API request: create/update ACTIONS_WHITELIST: dict = { 'config': { 'conversion_bday_summary_template': check_template_not_empty, @@ -194,6 +196,17 @@ ACTIONS_WHITELIST: dict = { }, } +# dict for displaying API request: info +ACTIONS_WHITELIST_INFO: dict = { + 'config': { + 'conversion_bday_summary_template': "str", + 'conversion_bday_description_template': "str", + 'conversion_bday_alarm_trigger_template': "str", + 'conversion_bday_categories': "str", + 'conversion_bday_age_max': "int", + }, + } + CONVERSIONS_WHITELIST: Sequence[str] = ("bday", "none") @@ -1405,6 +1418,7 @@ class BaseSharing: answer['SupportedConversions'] = CONVERSIONS_WHITELIST answer['PermittedPropertiesOverlay'] = self.permit_properties_overlay answer['SupportedPropertiesOverlay'] = OVERLAY_PROPERTIES_WHITELIST + answer['SupportedActions'] = ACTIONS_WHITELIST_INFO # action: TOGGLE elif action in API_SHARE_TOGGLES_V1: From 8b3e8450da39ae10f27e9f48cb8f9f5604a91a00 Mon Sep 17 00:00:00 2001 From: Peter Bieringer Date: Tue, 2 Jun 2026 06:40:04 +0200 Subject: [PATCH 2/3] sharing/doc: extend list with supported actions --- SHARING.md | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/SHARING.md b/SHARING.md index 6fd52791..df605d47 100644 --- a/SHARING.md +++ b/SHARING.md @@ -270,7 +270,8 @@ FeatureEnabledCollectionByToken=True PermittedCreateCollectionByToken=True SupportedConversions=(bday none) PermittedPropertiesOverlay=True -SupportedPropertiesOverlay=(C:calendar-description ICAL:calendar-color CR:addressbook-description INF:addressbook-color D:displayname) +SupportedPropertiesOverlay=(C:calendar-description ICAL:calendar-color CR:addressbook-description INF:addressbook-color D:displayname ICAL:calendar-order) +SupportedActions='{'config': {'conversion_bday_summary_template': 'str', 'conversion_bday_description_template': 'str', 'conversion_bday_alarm_trigger_template': 'str', 'conversion_bday_categories': 'str', 'conversion_bday_age_max': 'int'}}' ``` ###### json->json, parsed with jq @@ -285,9 +286,28 @@ curl -u user:$userpw --silent -H "accept: application/json" -d "" http://localho "PermittedCreateCollectionByMap": true, "FeatureEnabledCollectionByToken": true, "PermittedCreateCollectionByToken": true, - "SupportedConversions": ["bday", "none"], + "SupportedConversions": [ + "bday", + "none" + ], "PermittedPropertiesOverlay": true, - "SupportedPropertiesOverlay": ["C:calendar-description", "ICAL:calendar-color", "CR:addressbook-description", "INF:addressbook-color", "D:displayname"] + "SupportedPropertiesOverlay": [ + "C:calendar-description", + "ICAL:calendar-color", + "CR:addressbook-description", + "INF:addressbook-color", + "D:displayname", + "ICAL:calendar-order" + ], + "SupportedActions": { + "config": { + "conversion_bday_summary_template": "str", + "conversion_bday_description_template": "str", + "conversion_bday_alarm_trigger_template": "str", + "conversion_bday_categories": "str", + "conversion_bday_age_max": "int" + } + } } ``` From 2c15cb062bff9d69de9f95d60c49560667019d6f Mon Sep 17 00:00:00 2001 From: Peter Bieringer Date: Tue, 2 Jun 2026 06:40:29 +0200 Subject: [PATCH 3/3] sharing/Actions: test "info" --- radicale/tests/test_sharing.py | 1 + 1 file changed, 1 insertion(+) diff --git a/radicale/tests/test_sharing.py b/radicale/tests/test_sharing.py index 3d08ab67..d903e3b1 100644 --- a/radicale/tests/test_sharing.py +++ b/radicale/tests/test_sharing.py @@ -425,6 +425,7 @@ class TestSharingApiSanity(BaseTest): assert answer_dict['SupportedConversions'] == list(sharing.CONVERSIONS_WHITELIST) assert answer_dict['PermittedPropertiesOverlay'] is True assert answer_dict['SupportedPropertiesOverlay'] == list(sharing.OVERLAY_PROPERTIES_WHITELIST) + assert answer_dict['SupportedActions'] == sharing.ACTIONS_WHITELIST_INFO logging.info("\n*** check API hook: info/all (2)") self.configure({"sharing": {"permit_properties_overlay": "False"}})