Skip to content

Commit 10eaee1

Browse files
tobixenclaude
andcommitted
feat: migrate no_scheduling legacy flags to new 'scheduling' feature
Replace the old_flags no_scheduling / no_scheduling_mailbox / no_scheduling_calendar_user_address_set with the new 'scheduling' feature entry in the compatibility matrix, and adapt the test code to use skip_unless_support("scheduling") / is_supported("scheduling"). Servers with no_scheduling → "scheduling": {"support": "unsupported"}: xandikos_v0_2_12, xandikos, radicale, robur, posteo, purelymail Servers with partial scheduling (mailbox/address-set missing) → noted with a TODO for future sub-features: gmx Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent e90f9db commit 10eaee1

File tree

2 files changed

+16
-31
lines changed

2 files changed

+16
-31
lines changed

caldav/compatibility_hints.py

Lines changed: 11 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -711,15 +711,6 @@ def dotted_feature_set_list(self, compact=False):
711711
## * Perhaps some more readable format should be considered (yaml?).
712712
## * Consider how to get this into the documentation
713713
incompatibility_description = {
714-
'no_scheduling':
715-
"""RFC6833 is not supported""",
716-
717-
'no_scheduling_mailbox':
718-
"""Parts of RFC6833 is supported, but not the existence of inbox/mailbox""",
719-
720-
'no_scheduling_calendar_user_address_set':
721-
"""Parts of RFC6833 is supported, but not getting the calendar users addresses""",
722-
723714
'no_default_calendar':
724715
"""The given user starts without an assigned default calendar """
725716
"""(or without pre-defined calendars at all)""",
@@ -841,14 +832,12 @@ def dotted_feature_set_list(self, compact=False):
841832
"search.text.category.substring": {"support": "unsupported"},
842833
'principal-search': {'support': 'unsupported'},
843834
'freebusy-query.rfc4791': {'support': 'ungraceful', 'behaviour': '500 internal server error'},
835+
"scheduling": {"support": "unsupported"},
844836
"old_flags": [
845837
## https://github.com/jelmer/xandikos/issues/8
846838
'date_todo_search_ignores_duration',
847839
'vtodo_datesearch_nostart_future_tasks_delivered',
848840

849-
## scheduling is not supported
850-
"no_scheduling",
851-
852841
## The test with an rrule and an overridden event passes as
853842
## long as it's with timestamps. With dates, xandikos gets
854843
## into troubles. I've chosen to edit the test to use timestamp
@@ -876,13 +865,11 @@ def dotted_feature_set_list(self, compact=False):
876865
## this only applies for very simple installations
877866
"auto-connect.url": {"domain": "localhost", "scheme": "http", "basepath": "/"},
878867

868+
"scheduling": {"support": "unsupported"},
879869
"old_flags": [
880870
## https://github.com/jelmer/xandikos/issues/8
881871
'date_todo_search_ignores_duration',
882872
'vtodo_datesearch_nostart_future_tasks_delivered',
883-
884-
## scheduling is not supported
885-
"no_scheduling",
886873
]
887874
}
888875

@@ -899,11 +886,11 @@ def dotted_feature_set_list(self, compact=False):
899886
## this only applies for very simple installations
900887
"auto-connect.url": {"domain": "localhost", "scheme": "http", "basepath": "/"},
901888
## freebusy is not supported yet, but on the long-term road map
889+
"scheduling": {"support": "unsupported"},
902890
'old_flags': [
903891
## calendar listings and calendar creation works a bit
904892
## "weird" on radicale
905893

906-
'no_scheduling',
907894
'no_search_openended',
908895

909896
#'text_search_is_exact_match_sometimes',
@@ -1228,9 +1215,9 @@ def dotted_feature_set_list(self, compact=False):
12281215
'search.recurrences.includes-implicit.todo': {'support': 'unsupported'},
12291216
'principal-search': {'support': 'ungraceful'},
12301217
'freebusy-query.rfc4791': {'support': 'ungraceful'},
1218+
"scheduling": {"support": "unsupported"},
12311219
'old_flags': [
12321220
'non_existing_raises_other', ## AuthorizationError instead of NotFoundError
1233-
'no_scheduling',
12341221
'no_supported_components_support',
12351222
'no_relships',
12361223
],
@@ -1270,8 +1257,8 @@ def dotted_feature_set_list(self, compact=False):
12701257
'search.combined-is-logical-and': {'support': 'unsupported'},
12711258
'sync-token': {'support': 'ungraceful'},
12721259
'principal-search': {'support': 'unsupported'},
1260+
"scheduling": {"support": "unsupported"},
12731261
'old_flags': [
1274-
'no_scheduling',
12751262
#'no_recurring_todo', ## todo
12761263
]
12771264
}
@@ -1405,10 +1392,9 @@ def dotted_feature_set_list(self, compact=False):
14051392
'basepath': '/webdav/',
14061393
'domain': 'purelymail.com',
14071394
},
1395+
## Known, work in progress
1396+
"scheduling": {"support": "unsupported"},
14081397
'old_flags': [
1409-
## Known, work in progress
1410-
'no_scheduling',
1411-
14121398
## Known, not a breach of standard
14131399
'no_supported_components_support',
14141400

@@ -1452,11 +1438,13 @@ def dotted_feature_set_list(self, compact=False):
14521438
## was apparently observed working for a while, possibly due to the master/more_checks split-brain git branching incident in the server-checker project.
14531439
## unsupported in be26d42b1ca3ff3b4fd183761b4a9b024ce12b84 / 537a23b145487006bb987dee5ab9e00cdebb0492 2026-02-19. Supported when testing again short time after. Either I'm confused or it's "fragile".
14541440
#'search.time-range.alarm': {'support': 'unsupported'},
1441+
## GMX advertises calendar-auto-schedule but inbox/mailbox and
1442+
## calendar-user-address-set are not functional (RFC6638 sub-features).
1443+
## TODO: add scheduling.mailbox and scheduling.calendar-user-address-set sub-features
1444+
"scheduling": {"support": "full"},
14551445
"old_flags": [
1456-
"no_scheduling_mailbox",
14571446
#"text_search_is_case_insensitive",
14581447
"no_search_openended",
1459-
"no_scheduling_calendar_user_address_set",
14601448
"vtodo-cannot-be-uncompleted",
14611449
]
14621450
}

tests/test_caldav.py

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1093,20 +1093,17 @@ def testSupport(self):
10931093
self.skip_on_compatibility_flag("dav_not_supported")
10941094
assert self.caldav.check_dav_support()
10951095
assert self.caldav.check_cdav_support()
1096-
if self.check_compatibility_flag("no_scheduling"):
1097-
assert not self.caldav.check_scheduling_support()
1098-
else:
1099-
assert self.caldav.check_scheduling_support()
1096+
assert self.caldav.check_scheduling_support() == self.is_supported("scheduling")
11001097

11011098
def testSchedulingInfo(self):
1102-
self.skip_on_compatibility_flag("no_scheduling")
1103-
self.skip_on_compatibility_flag("no_scheduling_calendar_user_address_set")
1099+
self.skip_unless_support("scheduling")
1100+
## TODO: add scheduling.calendar-user-address-set sub-feature check
11041101
calendar_user_address_set = self.principal.calendar_user_address_set()
11051102
me_a_participant = self.principal.get_vcal_address()
11061103

11071104
def testSchedulingMailboxes(self):
1108-
self.skip_on_compatibility_flag("no_scheduling")
1109-
self.skip_on_compatibility_flag("no_scheduling_mailbox")
1105+
self.skip_unless_support("scheduling")
1106+
## TODO: add scheduling.mailbox sub-feature check
11101107
inbox = self.principal.schedule_inbox()
11111108
outbox = self.principal.schedule_outbox()
11121109

0 commit comments

Comments
 (0)