icalendar AssertionError: DTSTART субкомпонентов VTIMEZONE должен иметь тип datetime, а не date - PullRequest
1 голос
/ 12 июля 2020

Когда я запускаю этот код в Python 3.75, vscode:

from icalendar import Calendar 
import requests
SkeddaBridgeURL = 'https://bridgeartspace.skedda.com/ical?key=457bda7'
f=requests.get(SkeddaBridgeURL)
c = Calendar.from_ical(f.text)

, я получаю эту ошибку:

VTIMEZONEs sub-components' DTSTART must be of type datetime, not date
  File "/Users/jeff/Scrape/Code/skedda.py", line 6, in <module>
    c = Calendar.from_ical(f.text)

Но когда я запускаю этот URL через валидатор ical в https://icalendar.org/validator.html, у меня нет ошибок.

Я не чувствую себя вправе называть это ошибкой, но, возможно, это так!

Я попытался справиться с этим - подавить ошибки утверждения с помощью флага запуска как: python 3 -Oc "Assert False"

Но я не понимаю, как установить это как флаг в VSCode, который я тоже изучаю.

Более того, запустив отладчик для этого кода, установив icalendar через pip3, я не могу войти в код или изменить его. Мне нужно будет выяснить, как загрузить весь модуль с github и go удалить утверждение?

1 Ответ

1 голос
/ 12 июля 2020

Переход на летнее время в часовом поясе начинается в ДАТУ и ВРЕМЯ, а не только в день, поэтому это должно быть ДАТА-ВРЕМЯ, а не ДАТА. From https://icalendar.org/iCalendar-RFC-5545/3-6-5-time-zone-component.html

Обязательное свойство «DTSTART» дает эффективную дату начала и местное время для определения подкомпонента часового пояса. «DTSTART» в этом случае ДОЛЖЕН быть указан как дата с местным временем.

Различные валидаторы не принимают все в моем опыте, поэтому я пытаюсь проверить все, что могу найти. Кроме того, не все основные календарные приложения поддерживают все, что указано в спецификации RFC5545. (Например: календарь Google не повторял ПОЧАС в последний раз, когда я проверял.) Поэтому лучше также провести тестирование с основными календарными приложениями. Раньше Google был очень привередлив к файлам, но без хорошего сообщения.

...