Searching also returns full-day events of adjacent days
I maintainer di solito rispondono entro 1 giorno
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 48/100
Direzione di ricerca
Start by reproducing the reported cases with the supplied calendar.search(start=..., end=..., event=True, expand=True) calls, then read the implementation and documentation for search() and its handling of full-day events and timezones. Done means searches return the expected events for the reported dates and timezone variants; clarify the intended CalDAV behavior before choosing a fix.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Problem:
I'm trying to find all events that occur today or later. In some cases, events from yesterday are returned.
I'm not completely sure if this is a bug or just the way CalDAV works, but at least it's not what I expected.
Test setup: There are there are three full-day events in the calendar, on 18.,19.,20.08.25. I created them with Thunderbird, the server is Baikal. I did not specify a timezone (nor could I for full-day events).
Code:
from datetime import datetime, timedelta, date, timezone
import caldav
url = "..."
username = "..."
password = "..."
client = caldav.DAVClient(url, username=username, password=password)
principal = client.principal()
calendars = principal.calendars()
calendar = next(cal for cal in calendars if cal.name == "Test-Cal")
# there are three full-day events in the calendar, on 18.,19.,20.08.25
dates = [
datetime(year=2025, month=8, day=17, hour=0, minute=10),
datetime(year=2025, month=8, day=17, hour=0, minute=10, tzinfo=timezone(timedelta(hours=2))),
datetime(year=2025, month=8, day=17, hour=0, minute=10, tzinfo=timezone(timedelta(hours=0))),
datetime(year=2025, month=8, day=17, hour=0, minute=0),
datetime(year=2025, month=8, day=17, hour=0, minute=0, tzinfo=timezone(timedelta(hours=2))),
datetime(year=2025, month=8, day=17, hour=0, minute=0, tzinfo=timezone(timedelta(hours=0))),
]
for test_time in dates:
print("Testing with", test_time)
print(" | 18 | 19 | 20 |")
for i in range(4):
print(f" +{i} |", end="")
t = test_time + timedelta(days=i)
results = calendar.search(start=t, end=t + timedelta(days=1), event=True, expand=True, sort_keys="dtstart")
summaries = [e.instance.vevent.summary.value for e in results]
for j in range(1, 4):
if f"Test{j}" in summaries:
print(f" X |", end="")
else:
print(f" |", end="")
print()
Output (with comments from me). Expected would be a diagonal in the last three lines.
Testing with 2025-08-17 00:10:00 //my actual code, running in UTC+2 just after midnight
| 18 | 19 | 20 |
+0 | | | |
+1 | X | | |
+2 | X | X | | //the bug I noticed
+3 | | X | X |
Testing with 2025-08-17 00:10:00+02:00 //add the timezone explicitly
| 18 | 19 | 20 |
+0 | | | |
+1 | X | | |
+2 | X | X | | //no change
+3 | | X | X |
Testing with 2025-08-17 00:10:00+00:00 //now in UTC
| 18 | 19 | 20 |
+0 | X | | | //this is correct b/c 00:10+1d contains the next day!
+1 | X | X | |
+2 | | X | X |
+3 | | | X |
Testing with 2025-08-17 00:00:00 // test on exactly midnight
| 18 | 19 | 20 |
+0 | | | |
+1 | X | | |
+2 | X | X | | //same problem
+3 | | X | X |
Testing with 2025-08-17 00:00:00+02:00
| 18 | 19 | 20 |
+0 | | | |
+1 | X | | |
+2 | X | X | | //dito
+3 | | X | X |
Testing with 2025-08-17 00:00:00+00:00 //midnight, UTC
| 18 | 19 | 20 |
+0 | | | |
+1 | X | | | //correct!
+2 | | X | |
+3 | | | X |
This is the pattern I could make up from this:
- without timezone infos, the datetime gets interpreted in the local timezone
- before matching against full-day events in the calendar, dates are shifted to UTC
- this causes the dates to move to the previous day
This is just my guesswork, someone with more insight to CalDAV can probably make more sense out of this.
- Lingua principale
- Python
- Stelle
- 412
- Fork
- 113
- Merge medio
- 1g 2h
- PR unite (30g)
- 41
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Nessun modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di python-caldav/caldav
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 62/100
python-caldav/caldav#687 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 25/100
python-caldav/caldav#774 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 25/100
python-caldav/caldav#769 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 3/5 Mezza giornata Idoneità per principianti 50/100
python-caldav/caldav#765 ·
I maintainer di solito rispondono entro 1 giorno
-
enhancement
Difficoltà 5/5 Più di una settimana Idoneità per principianti 35/100
python-caldav/caldav#763 ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di python-caldav/caldav
Issue simili
-
Workflow.schedule stops when a cron deadline passes before sleepForse già presa @HuaTNA l’ha presa oggi. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
I maintainer di solito rispondono entro 1 giorno
-
[Bug] HiveDialect shares its colspecs dict with SQLAlchemy's DefaultDialect (python/pyhive)Forse già presa @rusackas l’ha presa oggi. Aperta
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 80/100
apache/kyuubi#7786 · 1 commento ·
I maintainer di solito rispondono entro 2 giorni
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 80/100
I maintainer di solito rispondono entro 1 giorno
-
[20.0] hr_work_entry: Duration column of Export Time Entries is truncated to whole hoursForse già presa @odooaktiv l’ha presa oggi. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
I maintainer di solito rispondono entro 1 giorno
-
fix formatting of the sample database page of the docsForse già presa @Aaqibhafeezkhan l’ha presa oggi. Apertadocumentation good first issue help wanted
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 72/100
chaoss/CollectOSS#544 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno