Skip to content

Commit 7841870

Browse files
refactor(jmap): eliminate duplication and shadow-builtin parameter names
1 parent f79e188 commit 7841870

5 files changed

Lines changed: 26 additions & 29 deletions

File tree

caldav/jmap/_methods/event.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ def parse_event_changes(
105105

106106
def build_event_query(
107107
account_id: str,
108-
filter: dict | None = None,
108+
filter_condition: dict | None = None,
109109
sort: list[dict] | None = None,
110110
position: int = 0,
111111
limit: int | None = None,
@@ -114,7 +114,7 @@ def build_event_query(
114114
115115
Args:
116116
account_id: The JMAP accountId to query.
117-
filter: A ``FilterCondition`` or ``FilterOperator`` dict, e.g.
117+
filter_condition: A ``FilterCondition`` or ``FilterOperator`` dict, e.g.
118118
``{"after": "2024-01-01T00:00:00Z", "before": "2024-12-31T23:59:59Z"}``.
119119
``None`` means no filter (return all events).
120120
sort: List of ``Comparator`` dicts, e.g.
@@ -127,8 +127,8 @@ def build_event_query(
127127
A 3-tuple ``("CalendarEvent/query", arguments_dict, call_id)``.
128128
"""
129129
args: dict = {"accountId": account_id, "position": position}
130-
if filter is not None:
131-
args["filter"] = filter
130+
if filter_condition is not None:
131+
args["filter"] = filter_condition
132132
if sort is not None:
133133
args["sort"] = sort
134134
if limit is not None:
@@ -161,7 +161,7 @@ def parse_event_query(response_args: dict) -> tuple[list[str], str, int]:
161161
def build_event_query_changes(
162162
account_id: str,
163163
since_query_state: str,
164-
filter: dict | None = None,
164+
filter_condition: dict | None = None,
165165
sort: list[dict] | None = None,
166166
max_changes: int | None = None,
167167
) -> tuple:
@@ -171,16 +171,16 @@ def build_event_query_changes(
171171
account_id: The JMAP accountId to query.
172172
since_query_state: The ``queryState`` string from a previous
173173
``CalendarEvent/query`` or ``CalendarEvent/queryChanges`` response.
174-
filter: Same filter as the original ``CalendarEvent/query`` call.
174+
filter_condition: Same filter as the original ``CalendarEvent/query`` call.
175175
sort: Same sort as the original ``CalendarEvent/query`` call.
176176
max_changes: Optional upper bound on the number of changes returned.
177177
178178
Returns:
179179
A 3-tuple ``("CalendarEvent/queryChanges", arguments_dict, call_id)``.
180180
"""
181181
args: dict = {"accountId": account_id, "sinceQueryState": since_query_state}
182-
if filter is not None:
183-
args["filter"] = filter
182+
if filter_condition is not None:
183+
args["filter"] = filter_condition
184184
if sort is not None:
185185
args["sort"] = sort
186186
if max_changes is not None:

caldav/jmap/async_client.py

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,11 @@
1616
from caldav.jmap._methods.event import (
1717
build_event_changes,
1818
build_event_get,
19+
build_event_set_create,
1920
build_event_set_destroy,
2021
build_event_set_update,
2122
parse_event_changes,
23+
parse_event_get,
2224
parse_event_set,
2325
)
2426
from caldav.jmap._methods.task import (
@@ -166,11 +168,7 @@ async def create_event(self, calendar_id: str, ical_str: str) -> str:
166168
"""
167169
session = await self._get_session()
168170
jscal = ical_to_jscal(ical_str, calendar_id=calendar_id)
169-
call = (
170-
"CalendarEvent/set",
171-
{"accountId": session.account_id, "create": {"new-0": jscal}},
172-
"ev-set-create-0",
173-
)
171+
call = build_event_set_create(session.account_id, {"new-0": jscal})
174172
responses = await self._request([call])
175173

176174
for method_name, resp_args, _ in responses:
@@ -208,7 +206,7 @@ async def get_event(self, event_id: str) -> JMAPCalendarObject:
208206

209207
for method_name, resp_args, _ in responses:
210208
if method_name == "CalendarEvent/get":
211-
items = resp_args.get("list", [])
209+
items = parse_event_get(resp_args)
212210
if not items:
213211
raise JMAPMethodError(
214212
url=session.api_url,
@@ -260,7 +258,7 @@ async def _search(
260258
if method_name == "CalendarEvent/get":
261259
return [
262260
JMAPCalendarObject(data=item, parent=parent)
263-
for item in resp_args.get("list", [])
261+
for item in parse_event_get(resp_args)
264262
]
265263

266264
return []
@@ -366,7 +364,7 @@ async def get_objects_by_sync_token(
366364
events_by_id: dict[str, JMAPCalendarObject] = {}
367365
for method_name, resp_args, _ in get_responses:
368366
if method_name == "CalendarEvent/get":
369-
for item in resp_args.get("list", []):
367+
for item in parse_event_get(resp_args):
370368
events_by_id[item["id"]] = JMAPCalendarObject(data=item, parent=None)
371369

372370
added = [events_by_id[i] for i in created_ids if i in events_by_id]

caldav/jmap/client.py

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,11 @@
2525
build_event_changes,
2626
build_event_get,
2727
build_event_query,
28+
build_event_set_create,
2829
build_event_set_destroy,
2930
build_event_set_update,
3031
parse_event_changes,
32+
parse_event_get,
3133
parse_event_set,
3234
)
3335
from caldav.jmap._methods.task import (
@@ -139,7 +141,7 @@ def _build_event_search_calls(
139141
filter_dict["before"] = end
140142
if text is not None:
141143
filter_dict["text"] = text
142-
query_call = build_event_query(account_id, filter=filter_dict or None)
144+
query_call = build_event_query(account_id, filter_condition=filter_dict or None)
143145
get_call = (
144146
"CalendarEvent/get",
145147
{
@@ -279,11 +281,7 @@ def create_event(self, calendar_id: str, ical_str: str) -> str:
279281
"""
280282
session = self._get_session()
281283
jscal = ical_to_jscal(ical_str, calendar_id=calendar_id)
282-
call = (
283-
"CalendarEvent/set",
284-
{"accountId": session.account_id, "create": {"new-0": jscal}},
285-
"ev-set-create-0",
286-
)
284+
call = build_event_set_create(session.account_id, {"new-0": jscal})
287285
responses = self._request([call])
288286

289287
for method_name, resp_args, _ in responses:
@@ -321,7 +319,7 @@ def get_event(self, event_id: str) -> JMAPCalendarObject:
321319

322320
for method_name, resp_args, _ in responses:
323321
if method_name == "CalendarEvent/get":
324-
items = resp_args.get("list", [])
322+
items = parse_event_get(resp_args)
325323
if not items:
326324
raise JMAPMethodError(
327325
url=session.api_url,
@@ -373,7 +371,7 @@ def _search(
373371
if method_name == "CalendarEvent/get":
374372
return [
375373
JMAPCalendarObject(data=item, parent=parent)
376-
for item in resp_args.get("list", [])
374+
for item in parse_event_get(resp_args)
377375
]
378376

379377
return []
@@ -481,7 +479,7 @@ def get_objects_by_sync_token(
481479
events_by_id: dict[str, JMAPCalendarObject] = {}
482480
for method_name, resp_args, _ in get_responses:
483481
if method_name == "CalendarEvent/get":
484-
for item in resp_args.get("list", []):
482+
for item in parse_event_get(resp_args):
485483
events_by_id[item["id"]] = JMAPCalendarObject(data=item, parent=None)
486484

487485
added = [events_by_id[i] for i in created_ids if i in events_by_id]
@@ -513,6 +511,7 @@ def delete_event(self, event_id: str) -> None:
513511
def _get_object_by_uid(
514512
self, uid: str, calendar_id: str | None = None, parent: JMAPCalendar | None = None
515513
) -> JMAPCalendarObject:
514+
# RFC 8984 FilterCondition has no uid field; UID matching is done client-side.
516515
for obj in self._search(calendar_id=calendar_id, parent=parent):
517516
if obj.data.get("uid") == uid:
518517
return obj

caldav/jmap/objects/calendar.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ def to_jmap(self) -> dict:
8585
d["color"] = self.color
8686
return d
8787

88-
def search(self, **searchargs) -> list[JMAPCalendarObject]:
88+
def search(self, **searchargs):
8989
"""Search for calendar objects in this calendar.
9090
9191
Mirrors :meth:`caldav.collection.Calendar.search`. When called on an
@@ -137,7 +137,7 @@ async def _async_search(self, **searchargs) -> list[JMAPCalendarObject]:
137137
parent=self,
138138
)
139139

140-
def get_object_by_uid(self, uid: str, comp_class=None) -> JMAPCalendarObject:
140+
def get_object_by_uid(self, uid: str, comp_class=None):
141141
"""Get a calendar object by its iCalendar UID.
142142
143143
Mirrors :meth:`caldav.collection.Calendar.get_object_by_uid`. When

tests/test_jmap_unit.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -772,7 +772,7 @@ def test_build_event_query_structure(self):
772772

773773
def test_build_event_query_with_filter(self):
774774
f = {"after": "2024-01-01T00:00:00Z", "before": "2024-12-31T23:59:59Z"}
775-
_, args, _ = build_event_query("u1", filter=f)
775+
_, args, _ = build_event_query("u1", filter_condition=f)
776776
assert args["filter"] == f
777777

778778
def test_build_event_query_with_sort(self):
@@ -822,7 +822,7 @@ def test_build_event_query_changes_structure(self):
822822
def test_build_event_query_changes_with_filter_and_sort(self):
823823
f = {"calendarIds": {"cal1": True}}
824824
s = [{"property": "start", "isAscending": True}]
825-
_, args, _ = build_event_query_changes("u1", "qstate-1", filter=f, sort=s)
825+
_, args, _ = build_event_query_changes("u1", "qstate-1", filter_condition=f, sort=s)
826826
assert args["filter"] == f
827827
assert args["sort"] == s
828828

0 commit comments

Comments
 (0)