Skip to content

Commit 1354abe

Browse files
author
Review
committed
Merge remote-tracking branch 'origin/main' into remove-sync-apis
2 parents a8f709f + d365c45 commit 1354abe

4 files changed

Lines changed: 33 additions & 14 deletions

File tree

nc_py_api/_version.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
"""Version of nc_py_api."""
22

3-
__version__ = "0.30.0.dev0"
3+
__version__ = "0.30.0"

nc_py_api/files/__init__.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -442,6 +442,12 @@ def path(self) -> str:
442442
"""Share path relative to the user's root directory."""
443443
return self._raw_data.get("path", "").lstrip("/")
444444

445+
@property
446+
def token(self) -> str:
447+
"""Token for the Shared object."""
448+
# Nextcloud pre-initializes token to null and overwrites it for types that have it.
449+
return self._raw_data.get("token") or ""
450+
445451
@property
446452
def label(self) -> str:
447453
"""Label for the Shared object."""

tests/actual_tests/calendar_test.py

Lines changed: 24 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,13 @@ async def test_create_delete_async(anc):
1313
calendars = principal.calendars()
1414
assert calendars
1515
all_events_before = calendar.events()
16+
# Use a past date so the event isn't picked up by Nextcloud's
17+
# calendar-status automation (which scans events in [now, now+5m]
18+
# and caches the result for 5 minutes, breaking user_status tests).
19+
past = datetime.datetime.now() - datetime.timedelta(days=400)
1620
event = calendar.save_event(
17-
dtstart=datetime.datetime.now(),
18-
dtend=datetime.datetime.now() + datetime.timedelta(hours=1),
21+
dtstart=past,
22+
dtend=past + datetime.timedelta(hours=1),
1923
summary="NcPyApi + CalDAV test",
2024
)
2125
all_events_after = calendar.events()
@@ -71,7 +75,9 @@ async def test_event_full_lifecycle_async(anc):
7175
calendar = principal.make_calendar("test_ncpyapi_ops")
7276
try:
7377
# --- Event lifecycle ---
74-
now = datetime.datetime.now()
78+
# Use a past anchor so these events don't trigger Nextcloud's
79+
# calendar-status automation (see test_create_delete for details).
80+
now = datetime.datetime.now() - datetime.timedelta(days=400)
7581
calendar.save_event(
7682
dtstart=now,
7783
dtend=now + datetime.timedelta(hours=2),
@@ -114,21 +120,26 @@ async def test_event_date_range_search_async(anc):
114120
principal = anc.cal.principal()
115121
calendar = principal.make_calendar("test_ncpyapi_search")
116122
try:
117-
base = datetime.datetime.now().replace(hour=12, minute=0, second=0, microsecond=0)
123+
# Anchor the search range in the past so none of these events fall
124+
# into Nextcloud's calendar-status window ([now, now+5m]); the
125+
# date-range search logic under test doesn't depend on "today".
126+
base = (datetime.datetime.now() - datetime.timedelta(days=400)).replace(
127+
hour=12, minute=0, second=0, microsecond=0
128+
)
118129
calendar.save_event(
119130
dtstart=base,
120131
dtend=base + datetime.timedelta(hours=1),
121-
summary="Today Event",
132+
summary="Day 0 Event",
122133
)
123134
calendar.save_event(
124135
dtstart=base + datetime.timedelta(days=1),
125136
dtend=base + datetime.timedelta(days=1, hours=1),
126-
summary="Tomorrow Event",
137+
summary="Day +1 Event",
127138
)
128139
calendar.save_event(
129140
dtstart=base + datetime.timedelta(days=7),
130141
dtend=base + datetime.timedelta(days=7, hours=1),
131-
summary="Next Week Event",
142+
summary="Day +7 Event",
132143
)
133144
assert len(calendar.events()) == 3
134145

@@ -139,19 +150,19 @@ async def test_event_date_range_search_async(anc):
139150
event=True,
140151
)
141152
summaries = {str(e.icalendar_component.get("SUMMARY")) for e in results}
142-
assert "Today Event" in summaries
143-
assert "Tomorrow Event" not in summaries
153+
assert "Day 0 Event" in summaries
154+
assert "Day +1 Event" not in summaries
144155

145-
# Search for today + tomorrow
156+
# Search for day 0 + day +1
146157
results = calendar.search(
147158
start=base - datetime.timedelta(hours=1),
148159
end=base + datetime.timedelta(days=1, hours=2),
149160
event=True,
150161
)
151162
summaries = {str(e.icalendar_component.get("SUMMARY")) for e in results}
152-
assert "Today Event" in summaries
153-
assert "Tomorrow Event" in summaries
154-
assert "Next Week Event" not in summaries
163+
assert "Day 0 Event" in summaries
164+
assert "Day +1 Event" in summaries
165+
assert "Day +7 Event" not in summaries
155166
finally:
156167
calendar.delete()
157168

tests/actual_tests/files_sharing_test.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@ def _test_share_fields(new_share: Share, get_by_id: Share, shared_file: FsNode):
3535
assert new_share.permissions & FilePermissions.PERMISSION_READ
3636
assert new_share.url
3737
assert new_share.path == shared_file.user_path
38+
assert new_share.token
39+
assert get_by_id.token == new_share.token
3840
assert get_by_id.share_id == new_share.share_id
3941
assert get_by_id.path == new_share.path
4042
assert get_by_id.mimetype == new_share.mimetype

0 commit comments

Comments
 (0)