>>> khal: Building community/khal 0.11.3-r2 (using abuild 3.14.1-r1) started Wed, 06 Nov 2024 09:16:03 +0000 >>> khal: Validating /home/buildozer/aports/community/khal/APKBUILD... >>> khal: Analyzing dependencies... >>> khal: Installing for build: build-base py3-atomicwrites py3-click py3-click-log py3-configobj py3-dateutil py3-icalendar py3-tz py3-tzlocal py3-urwid py3-xdg py3-gpep517 py3-setuptools py3-wheel py3-setuptools_scm py3-sphinx py3-sphinxcontrib-newsfeed bash py3-packaging py3-pytest py3-freezegun py3-hypothesis vdirsyncer (1/138) Installing libbz2 (1.0.8-r6) (2/138) Installing libffi (3.4.6-r0) (3/138) Installing gdbm (1.24-r0) (4/138) Installing xz-libs (5.6.3-r0) (5/138) Installing mpdecimal (4.0.0-r0) (6/138) Installing libpanelw (6.5_p20241006-r2) (7/138) Installing sqlite-libs (3.47.0-r0) (8/138) Installing python3 (3.12.7-r1) (9/138) Installing python3-pycache-pyc0 (3.12.7-r1) (10/138) Installing pyc (3.12.7-r1) (11/138) Installing py3-atomicwrites-pyc (1.4.1-r3) (12/138) Installing python3-pyc (3.12.7-r1) (13/138) Installing py3-atomicwrites (1.4.1-r3) (14/138) Installing py3-click (8.1.7-r2) (15/138) Installing py3-click-pyc (8.1.7-r2) (16/138) Installing py3-click-log (0.4.0-r3) (17/138) Installing py3-click-log-pyc (0.4.0-r3) (18/138) Installing py3-six (1.16.0-r9) (19/138) Installing py3-six-pyc (1.16.0-r9) (20/138) Installing py3-configobj (5.0.9-r0) (21/138) Installing py3-configobj-pyc (5.0.9-r0) (22/138) Installing py3-dateutil (2.9.0-r1) (23/138) Installing py3-dateutil-pyc (2.9.0-r1) (24/138) Installing tzdata (2024b-r1) (25/138) Installing py3-icalendar (6.0.1-r0) (26/138) Installing py3-icalendar-pyc (6.0.1-r0) (27/138) Installing py3-tz (2024.2-r0) (28/138) Installing py3-tz-pyc (2024.2-r0) (29/138) Installing py3-attrs (24.2.0-r0) (30/138) Installing py3-attrs-pyc (24.2.0-r0) (31/138) Installing py3-tzdata (2024.2-r0) (32/138) Installing py3-tzdata-pyc (2024.2-r0) (33/138) Installing py3-tzlocal (5.2-r1) (34/138) Installing py3-tzlocal-pyc (5.2-r1) (35/138) Installing py3-typing-extensions (4.12.2-r0) (36/138) Installing py3-typing-extensions-pyc (4.12.2-r0) (37/138) Installing py3-wcwidth (0.2.13-r1) (38/138) Installing py3-wcwidth-pyc (0.2.13-r1) (39/138) Installing py3-urwid (2.6.13-r0) (40/138) Installing py3-urwid-pyc (2.6.13-r0) (41/138) Installing py3-xdg (0.28-r3) (42/138) Installing py3-xdg-pyc (0.28-r3) (43/138) Installing py3-installer (0.7.0-r2) (44/138) Installing py3-installer-pyc (0.7.0-r2) (45/138) Installing py3-gpep517 (16-r0) (46/138) Installing py3-gpep517-pyc (16-r0) (47/138) Installing py3-parsing (3.1.4-r0) (48/138) Installing py3-parsing-pyc (3.1.4-r0) (49/138) Installing py3-packaging (24.1-r0) (50/138) Installing py3-packaging-pyc (24.1-r0) (51/138) Installing py3-setuptools (70.3.0-r0) (52/138) Installing py3-setuptools-pyc (70.3.0-r0) (53/138) Installing py3-wheel (0.43.0-r0) (54/138) Installing py3-wheel-pyc (0.43.0-r0) (55/138) Installing py3-setuptools_scm (8.1.0-r0) (56/138) Installing py3-setuptools_scm-pyc (8.1.0-r0) (57/138) Installing py3-babel (2.14.0-r2) (58/138) Installing py3-babel-pyc (2.14.0-r2) (59/138) Installing py3-docutils (0.21.2-r0) (60/138) Installing py3-docutils-pyc (0.21.2-r0) (61/138) Installing py3-imagesize (1.4.1-r4) (62/138) Installing py3-imagesize-pyc (1.4.1-r4) (63/138) Installing py3-markupsafe (3.0.2-r0) (64/138) Installing py3-markupsafe-pyc (3.0.2-r0) (65/138) Installing py3-jinja2 (3.1.4-r0) (66/138) Installing py3-jinja2-pyc (3.1.4-r0) (67/138) Installing py3-pygments (2.18.0-r0) (68/138) Installing py3-pygments-pyc (2.18.0-r0) (69/138) Installing py3-certifi (2024.8.30-r0) (70/138) Installing py3-certifi-pyc (2024.8.30-r0) (71/138) Installing py3-charset-normalizer (3.4.0-r0) (72/138) Installing py3-charset-normalizer-pyc (3.4.0-r0) (73/138) Installing py3-idna (3.10-r0) (74/138) Installing py3-idna-pyc (3.10-r0) (75/138) Installing py3-urllib3 (1.26.20-r0) (76/138) Installing py3-urllib3-pyc (1.26.20-r0) (77/138) Installing py3-requests (2.32.3-r0) (78/138) Installing py3-requests-pyc (2.32.3-r0) (79/138) Installing py3-snowballstemmer (2.2.0-r5) (80/138) Installing py3-snowballstemmer-pyc (2.2.0-r5) (81/138) Installing py3-alabaster (1.0.0-r0) (82/138) Installing py3-alabaster-pyc (1.0.0-r0) (83/138) Installing py3-sphinxcontrib-applehelp (1.0.4-r3) (84/138) Installing py3-sphinxcontrib-applehelp-pyc (1.0.4-r3) (85/138) Installing py3-sphinxcontrib-devhelp (1.0.5-r2) (86/138) Installing py3-sphinxcontrib-devhelp-pyc (1.0.5-r2) (87/138) Installing py3-sphinxcontrib-htmlhelp (2.0.1-r3) (88/138) Installing py3-sphinxcontrib-htmlhelp-pyc (2.0.1-r3) (89/138) Installing py3-sphinxcontrib-jsmath (1.0.1-r8) (90/138) Installing py3-sphinxcontrib-jsmath-pyc (1.0.1-r8) (91/138) Installing py3-sphinxcontrib-serializinghtml (1.1.9-r2) (92/138) Installing py3-sphinxcontrib-serializinghtml-pyc (1.1.9-r2) (93/138) Installing py3-sphinxcontrib-qthelp (1.0.6-r2) (94/138) Installing py3-sphinxcontrib-qthelp-pyc (1.0.6-r2) (95/138) Installing py3-sphinx (8.1.3-r0) (96/138) Installing py3-sphinx-pyc (8.1.3-r0) (97/138) Installing py3-sphinxcontrib-newsfeed (0.1.4-r5) (98/138) Installing py3-sphinxcontrib-newsfeed-pyc (0.1.4-r5) (99/138) Installing bash (5.2.37-r0) Executing bash-5.2.37-r0.post-install (100/138) Installing py3-iniconfig (2.0.0-r1) (101/138) Installing py3-iniconfig-pyc (2.0.0-r1) (102/138) Installing py3-pluggy (1.5.0-r0) (103/138) Installing py3-pluggy-pyc (1.5.0-r0) (104/138) Installing py3-py (1.11.0-r4) (105/138) Installing py3-py-pyc (1.11.0-r4) (106/138) Installing py3-pytest (8.3.3-r0) (107/138) Installing py3-pytest-pyc (8.3.3-r0) (108/138) Installing py3-freezegun (1.4.0-r1) (109/138) Installing py3-freezegun-pyc (1.4.0-r1) (110/138) Installing py3-sortedcontainers (2.4.0-r5) (111/138) Installing py3-sortedcontainers-pyc (2.4.0-r5) (112/138) Installing py3-hypothesis (6.116.0-r0) (113/138) Installing py3-hypothesis-pyc (6.116.0-r0) (114/138) Installing py3-aiohappyeyeballs (2.4.0-r0) (115/138) Installing py3-aiohappyeyeballs-pyc (2.4.0-r0) (116/138) Installing py3-frozenlist (1.4.1-r1) (117/138) Installing py3-frozenlist-pyc (1.4.1-r1) (118/138) Installing py3-aiosignal (1.3.1-r3) (119/138) Installing py3-aiosignal-pyc (1.3.1-r3) (120/138) Installing py3-async-timeout (4.0.3-r1) (121/138) Installing py3-async-timeout-pyc (4.0.3-r1) (122/138) Installing py3-brotli (1.1.0-r2) (123/138) Installing py3-brotli-pyc (1.1.0-r2) (124/138) Installing py3-idna-ssl (1.1.0-r9) (125/138) Installing py3-idna-ssl-pyc (1.1.0-r9) (126/138) Installing py3-multidict (6.0.5-r1) (127/138) Installing py3-multidict-pyc (6.0.5-r1) (128/138) Installing py3-yarl (1.13.1-r0) (129/138) Installing py3-yarl-pyc (1.13.1-r0) (130/138) Installing py3-aiohttp (3.10.9-r0) (131/138) Installing py3-aiohttp-pyc (3.10.9-r0) (132/138) Installing py3-aiostream (0.6.4-r0) (133/138) Installing py3-aiostream-pyc (0.6.4-r0) (134/138) Installing py3-requests-toolbelt (1.0.0-r1) (135/138) Installing py3-requests-toolbelt-pyc (1.0.0-r1) (136/138) Installing vdirsyncer (0.19.3-r1) (137/138) Installing vdirsyncer-pyc (0.19.3-r1) (138/138) Installing .makedepends-khal (20241106.091605) Executing busybox-1.37.0-r6.trigger OK: 399 MiB in 239 packages >>> khal: Cleaning up srcdir >>> khal: Cleaning up pkgdir >>> khal: Cleaning up tmpdir >>> khal: Fetching https://distfiles.alpinelinux.org/distfiles/v3.21/khal-0.11.3.tar.gz >>> khal: Fetching https://distfiles.alpinelinux.org/distfiles/v3.21/khal-0.11.3.tar.gz >>> khal: Checking sha512sums... khal-0.11.3.tar.gz: OK fix-doc-intersphinx-mapping.patch: OK >>> khal: Unpacking /var/cache/distfiles/v3.21/khal-0.11.3.tar.gz... >>> khal: fix-doc-intersphinx-mapping.patch patching file doc/source/conf.py 2024-11-06 09:16:07,375 gpep517 INFO Building wheel via backend setuptools.build_meta:__legacy__ WARNING setuptools_scm.pyproject_reading toml section missing 'pyproject.toml does not contain a tool.setuptools_scm section' Traceback (most recent call last): File "/usr/lib/python3.12/site-packages/setuptools_scm/_integration/pyproject_reading.py", line 36, in read_pyproject section = defn.get("tool", {})[tool_name] ~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^ KeyError: 'setuptools_scm' 2024-11-06 09:16:07,420 root INFO running bdist_wheel 2024-11-06 09:16:07,451 root INFO running build 2024-11-06 09:16:07,451 root INFO running build_py 2024-11-06 09:16:07,457 root INFO creating build 2024-11-06 09:16:07,457 root INFO creating build/lib 2024-11-06 09:16:07,457 root INFO creating build/lib/khal 2024-11-06 09:16:07,457 root INFO copying khal/__init__.py -> build/lib/khal 2024-11-06 09:16:07,457 root INFO copying khal/cli.py -> build/lib/khal 2024-11-06 09:16:07,458 root INFO copying khal/exceptions.py -> build/lib/khal 2024-11-06 09:16:07,458 root INFO copying khal/custom_types.py -> build/lib/khal 2024-11-06 09:16:07,458 root INFO copying khal/version.py -> build/lib/khal 2024-11-06 09:16:07,458 root INFO copying khal/configwizard.py -> build/lib/khal 2024-11-06 09:16:07,458 root INFO copying khal/terminal.py -> build/lib/khal 2024-11-06 09:16:07,459 root INFO copying khal/utils.py -> build/lib/khal 2024-11-06 09:16:07,459 root INFO copying khal/controllers.py -> build/lib/khal 2024-11-06 09:16:07,459 root INFO copying khal/__main__.py -> build/lib/khal 2024-11-06 09:16:07,459 root INFO copying khal/calendar_display.py -> build/lib/khal 2024-11-06 09:16:07,459 root INFO copying khal/icalendar.py -> build/lib/khal 2024-11-06 09:16:07,460 root INFO copying khal/parse_datetime.py -> build/lib/khal 2024-11-06 09:16:07,460 root INFO creating build/lib/khal/ui 2024-11-06 09:16:07,460 root INFO copying khal/ui/__init__.py -> build/lib/khal/ui 2024-11-06 09:16:07,460 root INFO copying khal/ui/widgets.py -> build/lib/khal/ui 2024-11-06 09:16:07,461 root INFO copying khal/ui/colors.py -> build/lib/khal/ui 2024-11-06 09:16:07,461 root INFO copying khal/ui/editor.py -> build/lib/khal/ui 2024-11-06 09:16:07,461 root INFO copying khal/ui/calendarwidget.py -> build/lib/khal/ui 2024-11-06 09:16:07,461 root INFO copying khal/ui/base.py -> build/lib/khal/ui 2024-11-06 09:16:07,462 root INFO creating build/lib/khal/khalendar 2024-11-06 09:16:07,462 root INFO copying khal/khalendar/__init__.py -> build/lib/khal/khalendar 2024-11-06 09:16:07,462 root INFO copying khal/khalendar/exceptions.py -> build/lib/khal/khalendar 2024-11-06 09:16:07,462 root INFO copying khal/khalendar/backend.py -> build/lib/khal/khalendar 2024-11-06 09:16:07,462 root INFO copying khal/khalendar/event.py -> build/lib/khal/khalendar 2024-11-06 09:16:07,463 root INFO copying khal/khalendar/khalendar.py -> build/lib/khal/khalendar 2024-11-06 09:16:07,463 root INFO copying khal/khalendar/vdir.py -> build/lib/khal/khalendar 2024-11-06 09:16:07,463 root INFO creating build/lib/khal/settings 2024-11-06 09:16:07,463 root INFO copying khal/settings/__init__.py -> build/lib/khal/settings 2024-11-06 09:16:07,463 root INFO copying khal/settings/exceptions.py -> build/lib/khal/settings 2024-11-06 09:16:07,464 root INFO copying khal/settings/utils.py -> build/lib/khal/settings 2024-11-06 09:16:07,464 root INFO copying khal/settings/settings.py -> build/lib/khal/settings 2024-11-06 09:16:07,464 root INFO copying khal/settings/khal.spec -> build/lib/khal/settings 2024-11-06 09:16:07,475 root INFO installing to build/bdist.linux-armv8l/wheel 2024-11-06 09:16:07,475 root INFO running install 2024-11-06 09:16:07,484 root INFO running install_lib 2024-11-06 09:16:07,489 root INFO creating build/bdist.linux-armv8l 2024-11-06 09:16:07,489 root INFO creating build/bdist.linux-armv8l/wheel 2024-11-06 09:16:07,489 root INFO creating build/bdist.linux-armv8l/wheel/khal 2024-11-06 09:16:07,489 root INFO copying build/lib/khal/__init__.py -> build/bdist.linux-armv8l/wheel/khal 2024-11-06 09:16:07,490 root INFO creating build/bdist.linux-armv8l/wheel/khal/khalendar 2024-11-06 09:16:07,490 root INFO copying build/lib/khal/khalendar/__init__.py -> build/bdist.linux-armv8l/wheel/khal/khalendar 2024-11-06 09:16:07,490 root INFO copying build/lib/khal/khalendar/exceptions.py -> build/bdist.linux-armv8l/wheel/khal/khalendar 2024-11-06 09:16:07,490 root INFO copying build/lib/khal/khalendar/backend.py -> build/bdist.linux-armv8l/wheel/khal/khalendar 2024-11-06 09:16:07,490 root INFO copying build/lib/khal/khalendar/event.py -> build/bdist.linux-armv8l/wheel/khal/khalendar 2024-11-06 09:16:07,491 root INFO copying build/lib/khal/khalendar/khalendar.py -> build/bdist.linux-armv8l/wheel/khal/khalendar 2024-11-06 09:16:07,491 root INFO copying build/lib/khal/khalendar/vdir.py -> build/bdist.linux-armv8l/wheel/khal/khalendar 2024-11-06 09:16:07,491 root INFO copying build/lib/khal/cli.py -> build/bdist.linux-armv8l/wheel/khal 2024-11-06 09:16:07,491 root INFO copying build/lib/khal/exceptions.py -> build/bdist.linux-armv8l/wheel/khal 2024-11-06 09:16:07,491 root INFO copying build/lib/khal/custom_types.py -> build/bdist.linux-armv8l/wheel/khal 2024-11-06 09:16:07,491 root INFO copying build/lib/khal/version.py -> build/bdist.linux-armv8l/wheel/khal 2024-11-06 09:16:07,492 root INFO copying build/lib/khal/configwizard.py -> build/bdist.linux-armv8l/wheel/khal 2024-11-06 09:16:07,492 root INFO copying build/lib/khal/terminal.py -> build/bdist.linux-armv8l/wheel/khal 2024-11-06 09:16:07,492 root INFO copying build/lib/khal/utils.py -> build/bdist.linux-armv8l/wheel/khal 2024-11-06 09:16:07,492 root INFO copying build/lib/khal/controllers.py -> build/bdist.linux-armv8l/wheel/khal 2024-11-06 09:16:07,492 root INFO copying build/lib/khal/__main__.py -> build/bdist.linux-armv8l/wheel/khal 2024-11-06 09:16:07,492 root INFO creating build/bdist.linux-armv8l/wheel/khal/ui 2024-11-06 09:16:07,493 root INFO copying build/lib/khal/ui/__init__.py -> build/bdist.linux-armv8l/wheel/khal/ui 2024-11-06 09:16:07,493 root INFO copying build/lib/khal/ui/widgets.py -> build/bdist.linux-armv8l/wheel/khal/ui 2024-11-06 09:16:07,493 root INFO copying build/lib/khal/ui/colors.py -> build/bdist.linux-armv8l/wheel/khal/ui 2024-11-06 09:16:07,493 root INFO copying build/lib/khal/ui/editor.py -> build/bdist.linux-armv8l/wheel/khal/ui 2024-11-06 09:16:07,493 root INFO copying build/lib/khal/ui/calendarwidget.py -> build/bdist.linux-armv8l/wheel/khal/ui 2024-11-06 09:16:07,493 root INFO copying build/lib/khal/ui/base.py -> build/bdist.linux-armv8l/wheel/khal/ui 2024-11-06 09:16:07,493 root INFO copying build/lib/khal/calendar_display.py -> build/bdist.linux-armv8l/wheel/khal 2024-11-06 09:16:07,494 root INFO copying build/lib/khal/icalendar.py -> build/bdist.linux-armv8l/wheel/khal 2024-11-06 09:16:07,494 root INFO creating build/bdist.linux-armv8l/wheel/khal/settings 2024-11-06 09:16:07,494 root INFO copying build/lib/khal/settings/__init__.py -> build/bdist.linux-armv8l/wheel/khal/settings 2024-11-06 09:16:07,494 root INFO copying build/lib/khal/settings/exceptions.py -> build/bdist.linux-armv8l/wheel/khal/settings 2024-11-06 09:16:07,494 root INFO copying build/lib/khal/settings/utils.py -> build/bdist.linux-armv8l/wheel/khal/settings 2024-11-06 09:16:07,494 root INFO copying build/lib/khal/settings/khal.spec -> build/bdist.linux-armv8l/wheel/khal/settings 2024-11-06 09:16:07,495 root INFO copying build/lib/khal/settings/settings.py -> build/bdist.linux-armv8l/wheel/khal/settings 2024-11-06 09:16:07,495 root INFO copying build/lib/khal/parse_datetime.py -> build/bdist.linux-armv8l/wheel/khal 2024-11-06 09:16:07,495 root INFO running install_egg_info 2024-11-06 09:16:07,500 root INFO running egg_info 2024-11-06 09:16:07,504 root INFO writing khal.egg-info/PKG-INFO 2024-11-06 09:16:07,505 root INFO writing dependency_links to khal.egg-info/dependency_links.txt 2024-11-06 09:16:07,505 root INFO writing entry points to khal.egg-info/entry_points.txt 2024-11-06 09:16:07,505 root INFO writing requirements to khal.egg-info/requires.txt 2024-11-06 09:16:07,506 root INFO writing top-level names to khal.egg-info/top_level.txt 2024-11-06 09:16:09,087 root INFO reading manifest file 'khal.egg-info/SOURCES.txt' 2024-11-06 09:16:09,088 root INFO reading manifest template 'MANIFEST.in' 2024-11-06 09:16:09,088 root WARNING warning: no files found matching 'CONTRIBUTING.txt' 2024-11-06 09:16:09,089 root INFO adding license file 'COPYING' 2024-11-06 09:16:09,089 root INFO adding license file 'AUTHORS.txt' 2024-11-06 09:16:09,091 root INFO writing manifest file 'khal.egg-info/SOURCES.txt' 2024-11-06 09:16:09,091 root INFO Copying khal.egg-info to build/bdist.linux-armv8l/wheel/khal-0.11.3-py3.12.egg-info 2024-11-06 09:16:09,092 root INFO running install_scripts 2024-11-06 09:16:09,095 root INFO creating build/bdist.linux-armv8l/wheel/khal-0.11.3.dist-info/WHEEL 2024-11-06 09:16:09,095 wheel INFO creating '/home/buildozer/aports/community/khal/src/khal-0.11.3/dist/.tmp-x12rxmi1/khal-0.11.3-py3-none-any.whl' and adding 'build/bdist.linux-armv8l/wheel' to it 2024-11-06 09:16:09,096 wheel INFO adding 'khal/__init__.py' 2024-11-06 09:16:09,096 wheel INFO adding 'khal/__main__.py' 2024-11-06 09:16:09,096 wheel INFO adding 'khal/calendar_display.py' 2024-11-06 09:16:09,096 wheel INFO adding 'khal/cli.py' 2024-11-06 09:16:09,096 wheel INFO adding 'khal/configwizard.py' 2024-11-06 09:16:09,097 wheel INFO adding 'khal/controllers.py' 2024-11-06 09:16:09,097 wheel INFO adding 'khal/custom_types.py' 2024-11-06 09:16:09,097 wheel INFO adding 'khal/exceptions.py' 2024-11-06 09:16:09,097 wheel INFO adding 'khal/icalendar.py' 2024-11-06 09:16:09,097 wheel INFO adding 'khal/parse_datetime.py' 2024-11-06 09:16:09,097 wheel INFO adding 'khal/terminal.py' 2024-11-06 09:16:09,098 wheel INFO adding 'khal/utils.py' 2024-11-06 09:16:09,098 wheel INFO adding 'khal/version.py' 2024-11-06 09:16:09,098 wheel INFO adding 'khal/khalendar/__init__.py' 2024-11-06 09:16:09,098 wheel INFO adding 'khal/khalendar/backend.py' 2024-11-06 09:16:09,098 wheel INFO adding 'khal/khalendar/event.py' 2024-11-06 09:16:09,099 wheel INFO adding 'khal/khalendar/exceptions.py' 2024-11-06 09:16:09,099 wheel INFO adding 'khal/khalendar/khalendar.py' 2024-11-06 09:16:09,099 wheel INFO adding 'khal/khalendar/vdir.py' 2024-11-06 09:16:09,099 wheel INFO adding 'khal/settings/__init__.py' 2024-11-06 09:16:09,099 wheel INFO adding 'khal/settings/exceptions.py' 2024-11-06 09:16:09,099 wheel INFO adding 'khal/settings/khal.spec' 2024-11-06 09:16:09,099 wheel INFO adding 'khal/settings/settings.py' 2024-11-06 09:16:09,100 wheel INFO adding 'khal/settings/utils.py' 2024-11-06 09:16:09,100 wheel INFO adding 'khal/ui/__init__.py' 2024-11-06 09:16:09,100 wheel INFO adding 'khal/ui/base.py' 2024-11-06 09:16:09,100 wheel INFO adding 'khal/ui/calendarwidget.py' 2024-11-06 09:16:09,101 wheel INFO adding 'khal/ui/colors.py' 2024-11-06 09:16:09,101 wheel INFO adding 'khal/ui/editor.py' 2024-11-06 09:16:09,101 wheel INFO adding 'khal/ui/widgets.py' 2024-11-06 09:16:09,101 wheel INFO adding 'khal-0.11.3.dist-info/AUTHORS.txt' 2024-11-06 09:16:09,101 wheel INFO adding 'khal-0.11.3.dist-info/COPYING' 2024-11-06 09:16:09,102 wheel INFO adding 'khal-0.11.3.dist-info/METADATA' 2024-11-06 09:16:09,102 wheel INFO adding 'khal-0.11.3.dist-info/WHEEL' 2024-11-06 09:16:09,102 wheel INFO adding 'khal-0.11.3.dist-info/entry_points.txt' 2024-11-06 09:16:09,102 wheel INFO adding 'khal-0.11.3.dist-info/top_level.txt' 2024-11-06 09:16:09,102 wheel INFO adding 'khal-0.11.3.dist-info/RECORD' 2024-11-06 09:16:09,102 root INFO removing build/bdist.linux-armv8l/wheel 2024-11-06 09:16:09,103 gpep517 INFO The backend produced dist/khal-0.11.3-py3-none-any.whl khal-0.11.3-py3-none-any.whl make: Entering directory '/home/buildozer/aports/community/khal/src/khal-0.11.3/doc' sphinx-build -b man -d build/doctrees source build/man Running Sphinx v8.1.3 loading translations [en]... done making output directory... done Converting `source_suffix = '.rst'` to `source_suffix = {'.rst': 'restructuredtext'}`. loading intersphinx inventory 'python' from https://docs.python.org/3/objects.inv ... building [mo]: targets for 0 po files that are out of date writing output... building [man]: all manpages updating environment: [new config] 40 added, 0 changed, 0 removed reading sources... [ 2%] changelog reading sources... [ 5%] configure reading sources... [ 8%] faq reading sources... [ 10%] feedback reading sources... [ 12%] hacking reading sources... [ 15%] index reading sources... [ 18%] install reading sources... [ 20%] license reading sources... [ 22%] man reading sources... [ 25%] news reading sources... [ 28%] news/30c3 reading sources... [ 30%] news/31c3 reading sources... [ 32%] news/callfortesting reading sources... [ 35%] news/khal01 reading sources... [ 38%] news/khal0100 reading sources... [ 40%] news/khal011 reading sources... [ 42%] news/khal02 reading sources... [ 45%] news/khal03 reading sources... [ 48%] news/khal031 reading sources... [ 50%] news/khal04 reading sources... [ 52%] news/khal05 reading sources... [ 55%] news/khal06 reading sources... [ 57%] news/khal07 reading sources... [ 60%] news/khal071 reading sources... [ 62%] news/khal08 reading sources... [ 65%] news/khal081 reading sources... [ 68%] news/khal082 reading sources... [ 70%] news/khal083 reading sources... [ 72%] news/khal084 reading sources... [ 75%] news/khal09 reading sources... [ 78%] news/khal091 reading sources... [ 80%] news/khal092 reading sources... [ 82%] news/khal093 reading sources... [ 85%] news/khal094 reading sources... [ 88%] news/khal095 reading sources... [ 90%] news/khal096 reading sources... [ 92%] news/khal097 reading sources... [ 95%] news/khal098 reading sources... [ 98%] standards reading sources... [100%] usage looking for now-outdated files... none found pickling environment... done checking consistency... /home/buildozer/aports/community/khal/src/khal-0.11.3/doc/source/man.rst: WARNING: document isn't included in any toctree /home/buildozer/aports/community/khal/src/khal-0.11.3/doc/source/configure.rst: document is referenced in multiple toctrees: ['index', 'man'], selecting: man <- configure /home/buildozer/aports/community/khal/src/khal-0.11.3/doc/source/faq.rst: document is referenced in multiple toctrees: ['index', 'man'], selecting: man <- faq /home/buildozer/aports/community/khal/src/khal-0.11.3/doc/source/license.rst: document is referenced in multiple toctrees: ['index', 'man'], selecting: man <- license /home/buildozer/aports/community/khal/src/khal-0.11.3/doc/source/standards.rst: document is referenced in multiple toctrees: ['index', 'man'], selecting: man <- standards /home/buildozer/aports/community/khal/src/khal-0.11.3/doc/source/usage.rst: document is referenced in multiple toctrees: ['index', 'man'], selecting: man <- usage done preparing documents... done copying assets... copying assets: done writing... khal.1 { usage configure standards faq license } /home/buildozer/aports/community/khal/src/khal-0.11.3/doc/source/usage.rst:53: WARNING: unknown option: '--color' [ref.option] /home/buildozer/aports/community/khal/src/khal-0.11.3/doc/source/usage.rst:53: WARNING: unknown option: '--color' [ref.option] /home/buildozer/aports/community/khal/src/khal-0.11.3/doc/source/usage.rst:401: WARNING: unknown option: '--interactive' [ref.option] /home/buildozer/aports/community/khal/src/khal-0.11.3/doc/source/configure.rst:17: WARNING: unknown option: '-c\npath/to/config' [ref.option] done build succeeded, 5 warnings. The manual pages are in build/man. Build finished. The manual pages are in build/man. make: Leaving directory '/home/buildozer/aports/community/khal/src/khal-0.11.3/doc' ============================= test session starts ============================== platform linux -- Python 3.12.7, pytest-8.3.3, pluggy-1.5.0 rootdir: /home/buildozer/aports/community/khal/src/khal-0.11.3 configfile: pyproject.toml plugins: hypothesis-6.116.0 collected 315 items / 4 deselected / 311 selected tests/backend_test.py .F.FF...FFFF....F............. [ 9%] tests/cal_display_test.py ..... [ 11%] tests/cli_test.py .FFFF...F.xX.x..FF....F...........F.F.FF. [ 24%] tests/configwizard_test.py .. [ 25%] tests/controller_test.py .....FF..... [ 28%] tests/event_test.py ..F.FF..FFFFFFF...F..F.........FF..F.......F........ [ 45%] .... [ 46%] tests/icalendar_test.py ..FF.F. [ 49%] tests/khalendar_test.py .......F..FFF..F..FFF......... [ 58%] tests/khalendar_utils_test.py FFF....F.....F...F...FFFF.F..FF.......... [ 72%] tests/parse_datetime_test.py ........................................... [ 85%] ..... [ 87%] tests/settings_test.py ............ [ 91%] tests/terminal_test.py ... [ 92%] tests/ui/test_calendarwidget.py ..... [ 93%] tests/ui/test_editor.py .... [ 95%] tests/ui/test_widgets.py . [ 95%] tests/utils_test.py ........ [ 98%] tests/vdir_test.py ... [ 99%] tests/vtimezone_test.py ... [100%] =================================== FAILURES =================================== ________________________ test_event_rrule_recurrence_id ________________________ def test_event_rrule_recurrence_id(): dbi = backend.SQLiteDb([calname], ':memory:', locale=LOCALE_BERLIN) assert dbi.list(calname) == [] events = dbi.get_localized( BERLIN.localize(dt.datetime(2014, 6, 30, 0, 0)), BERLIN.localize(dt.datetime(2014, 8, 26, 0, 0)), ) assert list(events) == [] > dbi.update(_get_text('event_rrule_recuid'), href='12345.ics', etag='abcd', calendar=calname) tests/backend_test.py:31: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ khal/khalendar/backend.py:246: in update self._update_impl(vevent, href, calendar) khal/khalendar/backend.py:367: in _update_impl dtstartend = expand_vevent(vevent, href) khal/icalendar.py:315: in expand dtstartl = set(rrule) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ date = datetime.datetime(2014, 6, 30, 7, 0) def sanitize_datetime(date): if allday and isinstance(date, dt.datetime): date = date.date() if events_tz is not None: > date = events_tz.localize(date) E AttributeError: 'zoneinfo.ZoneInfo' object has no attribute 'localize' khal/icalendar.py:256: AttributeError ____________________ test_event_rrule_recurrence_id_reverse ____________________ def test_event_rrule_recurrence_id_reverse(): """as icalendar elements can be saved in arbitrary order, we also have to deal with `reverse` ordered icalendar files """ dbi = backend.SQLiteDb([calname], ':memory:', locale=LOCALE_BERLIN) assert dbi.list(calname) == [] events = dbi.get_localized( BERLIN.localize(dt.datetime(2014, 6, 30, 0, 0)), BERLIN.localize(dt.datetime(2014, 8, 26, 0, 0))) assert list(events) == [] > dbi.update(event_rrule_recurrence_id_reverse, href='12345.ics', etag='abcd', calendar=calname) tests/backend_test.py:104: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ khal/khalendar/backend.py:246: in update self._update_impl(vevent, href, calendar) khal/khalendar/backend.py:367: in _update_impl dtstartend = expand_vevent(vevent, href) khal/icalendar.py:315: in expand dtstartl = set(rrule) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ date = datetime.datetime(2014, 6, 30, 7, 0) def sanitize_datetime(date): if allday and isinstance(date, dt.datetime): date = date.date() if events_tz is not None: > date = events_tz.localize(date) E AttributeError: 'zoneinfo.ZoneInfo' object has no attribute 'localize' khal/icalendar.py:256: AttributeError ______________ test_event_rrule_recurrence_id_update_with_exclude ______________ def test_event_rrule_recurrence_id_update_with_exclude(): """ test if updates work as they should. The updated event has the extra RECURRENCE-ID event removed and one recurrence date excluded via EXDATE """ dbi = backend.SQLiteDb([calname], ':memory:', locale=LOCALE_BERLIN) > dbi.update(_get_text('event_rrule_recuid'), href='12345.ics', etag='abcd', calendar=calname) tests/backend_test.py:126: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ khal/khalendar/backend.py:246: in update self._update_impl(vevent, href, calendar) khal/khalendar/backend.py:367: in _update_impl dtstartend = expand_vevent(vevent, href) khal/icalendar.py:315: in expand dtstartl = set(rrule) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ date = datetime.datetime(2014, 6, 30, 7, 0) def sanitize_datetime(date): if allday and isinstance(date, dt.datetime): date = date.date() if events_tz is not None: > date = events_tz.localize(date) E AttributeError: 'zoneinfo.ZoneInfo' object has no attribute 'localize' khal/icalendar.py:256: AttributeError ______________________________ test_event_delete _______________________________ def test_event_delete(): dbi = backend.SQLiteDb([calname], ':memory:', locale=LOCALE_BERLIN) assert dbi.list(calname) == [] events = dbi.get_localized(BERLIN.localize(dt.datetime(2014, 6, 30, 0, 0)), BERLIN.localize(dt.datetime(2014, 8, 26, 0, 0))) assert list(events) == [] > dbi.update(event_rrule_recurrence_id_reverse, href='12345.ics', etag='abcd', calendar=calname) tests/backend_test.py:200: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ khal/khalendar/backend.py:246: in update self._update_impl(vevent, href, calendar) khal/khalendar/backend.py:367: in _update_impl dtstartend = expand_vevent(vevent, href) khal/icalendar.py:315: in expand dtstartl = set(rrule) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ date = datetime.datetime(2014, 6, 30, 7, 0) def sanitize_datetime(date): if allday and isinstance(date, dt.datetime): date = date.date() if events_tz is not None: > date = events_tz.localize(date) E AttributeError: 'zoneinfo.ZoneInfo' object has no attribute 'localize' khal/icalendar.py:256: AttributeError _____________________________ test_this_and_prior ______________________________ def test_this_and_prior(): """we do not support THISANDPRIOR, therefore this should fail""" dbi = backend.SQLiteDb([calname], ':memory:', locale=LOCALE_BERLIN) with pytest.raises(UpdateFailed): > dbi.update(event_rrule_this_and_prior, href='12345.ics', etag='abcd', calendar=calname) tests/backend_test.py:235: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ khal/khalendar/backend.py:246: in update self._update_impl(vevent, href, calendar) khal/khalendar/backend.py:367: in _update_impl dtstartend = expand_vevent(vevent, href) khal/icalendar.py:315: in expand dtstartl = set(rrule) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ date = datetime.datetime(2014, 6, 30, 7, 0) def sanitize_datetime(date): if allday and isinstance(date, dt.datetime): date = date.date() if events_tz is not None: > date = events_tz.localize(date) E AttributeError: 'zoneinfo.ZoneInfo' object has no attribute 'localize' khal/icalendar.py:256: AttributeError _______________________ test_event_rrule_this_and_future _______________________ def test_event_rrule_this_and_future(): dbi = backend.SQLiteDb([calname], ':memory:', locale=LOCALE_BERLIN) > dbi.update(event_rrule_this_and_future, href='12345.ics', etag='abcd', calendar=calname) tests/backend_test.py:263: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ khal/khalendar/backend.py:246: in update self._update_impl(vevent, href, calendar) khal/khalendar/backend.py:367: in _update_impl dtstartend = expand_vevent(vevent, href) khal/icalendar.py:315: in expand dtstartl = set(rrule) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ date = datetime.datetime(2014, 6, 30, 7, 0) def sanitize_datetime(date): if allday and isinstance(date, dt.datetime): date = date.date() if events_tz is not None: > date = events_tz.localize(date) E AttributeError: 'zoneinfo.ZoneInfo' object has no attribute 'localize' khal/icalendar.py:256: AttributeError _______________ test_event_rrule_this_and_future_multi_day_shift _______________ def test_event_rrule_this_and_future_multi_day_shift(): dbi = backend.SQLiteDb([calname], ':memory:', locale=LOCALE_BERLIN) > dbi.update(event_rrule_this_and_future_multi_day_shift, href='12345.ics', etag='abcd', calendar=calname) tests/backend_test.py:295: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ khal/khalendar/backend.py:246: in update self._update_impl(vevent, href, calendar) khal/khalendar/backend.py:367: in _update_impl dtstartend = expand_vevent(vevent, href) khal/icalendar.py:315: in expand dtstartl = set(rrule) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ date = datetime.datetime(2014, 6, 30, 7, 0) def sanitize_datetime(date): if allday and isinstance(date, dt.datetime): date = date.date() if events_tz is not None: > date = events_tz.localize(date) E AttributeError: 'zoneinfo.ZoneInfo' object has no attribute 'localize' khal/icalendar.py:256: AttributeError _________________________ test_two_calendars_same_uid __________________________ def test_two_calendars_same_uid(): home = 'home' work = 'work' dbi = backend.SQLiteDb([home, work], ':memory:', locale=LOCALE_BERLIN) assert dbi.list(home) == [] assert dbi.list(work) == [] > dbi.update(event_a, href='12345.ics', etag='abcd', calendar=home) tests/backend_test.py:513: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ khal/khalendar/backend.py:246: in update self._update_impl(vevent, href, calendar) khal/khalendar/backend.py:367: in _update_impl dtstartend = expand_vevent(vevent, href) khal/icalendar.py:315: in expand dtstartl = set(rrule) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ date = datetime.datetime(2014, 6, 30, 7, 0) def sanitize_datetime(date): if allday and isinstance(date, dt.datetime): date = date.date() if events_tz is not None: > date = events_tz.localize(date) E AttributeError: 'zoneinfo.ZoneInfo' object has no attribute 'localize' khal/icalendar.py:256: AttributeError _________________________________ test_simple __________________________________ runner = def test_simple(runner): runner = runner(days=2) result = runner.invoke(main_khal, ['list']) assert not result.exception assert result.output == '' now = dt.datetime.now().strftime('%d.%m.%Y') result = runner.invoke( main_khal, f'new {now} 18:00 myevent'.split()) assert result.output == '' > assert not result.exception E assert not AttributeError("'zoneinfo.ZoneInfo' object has no attribute '_tzinfos'") E + where AttributeError("'zoneinfo.ZoneInfo' object has no attribute '_tzinfos'") = .exception tests/cli_test.py:137: AssertionError ______________________________ test_simple_color _______________________________ runner = def test_simple_color(runner): runner = runner(days=2) now = dt.datetime.now().strftime('%d.%m.%Y') result = runner.invoke(main_khal, f'new {now} 18:00 myevent'.split()) assert result.output == '' > assert not result.exception E assert not AttributeError("'zoneinfo.ZoneInfo' object has no attribute '_tzinfos'") E + where AttributeError("'zoneinfo.ZoneInfo' object has no attribute '_tzinfos'") = .exception tests/cli_test.py:153: AssertionError __________________________________ test_days ___________________________________ runner = def test_days(runner): runner = runner(days=9) when = (dt.datetime.now() + dt.timedelta(days=7)).strftime('%d.%m.%Y') result = runner.invoke(main_khal, f'new {when} 18:00 nextweek'.split()) assert result.output == '' > assert not result.exception E assert not AttributeError("'zoneinfo.ZoneInfo' object has no attribute '_tzinfos'") E + where AttributeError("'zoneinfo.ZoneInfo' object has no attribute '_tzinfos'") = .exception tests/cli_test.py:166: AssertionError _______________________________ test_notstarted ________________________________ runner = def test_notstarted(runner): with freeze_time('2015-6-1 15:00'): runner = runner(days=2) for command in [ 'new 30.5.2015 5.6.2015 long event', 'new 2.6.2015 4.6.2015 two day event', 'new 1.6.2015 14:00 18:00 four hour event', 'new 1.6.2015 16:00 17:00 one hour event', 'new 2.6.2015 10:00 13:00 three hour event', ]: result = runner.invoke(main_khal, command.split()) > assert not result.exception E assert not AttributeError("'zoneinfo.ZoneInfo' object has no attribute '_tzinfos'") E + where AttributeError("'zoneinfo.ZoneInfo' object has no attribute '_tzinfos'") = .exception tests/cli_test.py:191: AssertionError ____________________________ test_invalid_calendar _____________________________ runner = def test_invalid_calendar(runner): runner = runner(days=2) result = runner.invoke( main_khal, ['new'] + '-a one 18:00 myevent'.split()) > assert not result.exception E assert not AttributeError("'zoneinfo.ZoneInfo' object has no attribute '_tzinfos'") E + where AttributeError("'zoneinfo.ZoneInfo' object has no attribute '_tzinfos'") = .exception tests/cli_test.py:314: AssertionError __________________________________ test_list ___________________________________ runner = def test_list(runner): runner = runner(days=2) now = dt.datetime.now().strftime('%d.%m.%Y') result = runner.invoke( main_khal, f'new {now} 18:00 myevent'.split()) format = '{red}{start-end-time-style}{reset} {title} :: {description}' args = ['--color', 'list', '--format', format, '--day-format', 'header', '18:30'] result = runner.invoke(main_khal, args) expected = 'header\x1b[0m\n\x1b[31m18:00-19:00\x1b[0m myevent :: \x1b[0m\n' assert not result.exception > assert result.output.startswith(expected) E AssertionError: assert False E + where False = ('header\x1b[0m\n\x1b[31m18:00-19:00\x1b[0m myevent :: \x1b[0m\n') E + where = ''.startswith E + where '' = .output tests/cli_test.py:414: AssertionError _________________________________ test_search __________________________________ runner = def test_search(runner): runner = runner(days=2) now = dt.datetime.now().strftime('%d.%m.%Y') result = runner.invoke(main_khal, f'new {now} 18:00 myevent'.split()) format = '{red}{start-end-time-style}{reset} {title} :: {description}' result = runner.invoke(main_khal, ['--color', 'search', '--format', format, 'myevent']) assert not result.exception > assert result.output.startswith('\x1b[34m\x1b[31m18:00') E AssertionError: assert False E + where False = ('\x1b[34m\x1b[31m18:00') E + where = ''.startswith E + where '' = .output tests/cli_test.py:424: AssertionError _____________________ test_import_proper_invalid_timezone ______________________ runner = def test_import_proper_invalid_timezone(runner): runner = runner() result = runner.invoke( main_khal, ['import', _get_ics_filepath('invalid_tzoffset')], input='0\ny\n') assert result.output.startswith( 'warning: Invalid timezone offset encountered, timezone information may be wrong') > assert not result.exception E assert not SystemExit(1) E + where SystemExit(1) = .exception tests/cli_test.py:491: AssertionError __________________________________ test_edit ___________________________________ runner = def test_edit(runner): runner = runner() result = runner.invoke(main_khal, ['list']) assert not result.exception assert result.output == '' for name in ['event_dt_simple', 'event_d_15']: cal_dt = _get_text(name) event = runner.calendars['one'].join(f'{name}.ics') event.write(cal_dt) format = '{start-end-time-style}: {title}' result = runner.invoke( main_khal, ['edit', '--show-past', 'Event'], input='s\nGreat Event\nn\nn\n') > assert not result.exception E assert not AttributeError("'zoneinfo.ZoneInfo' object has no attribute '_tzinfos'") E + where AttributeError("'zoneinfo.ZoneInfo' object has no attribute '_tzinfos'") = .exception tests/cli_test.py:819: AssertionError _____________________________ test_new_interactive _____________________________ runner = @freeze_time('2015-6-1 8:00') def test_new_interactive(runner): runner = runner(print_new='path') result = runner.invoke( main_khal, 'new -i'.split(), 'Another event\n13:00 17:00\n\nNone\nn\n' ) > assert not result.exception E assert not AttributeError("'zoneinfo.ZoneInfo' object has no attribute '_tzinfos'") E + where AttributeError("'zoneinfo.ZoneInfo' object has no attribute '_tzinfos'") = .exception tests/cli_test.py:849: AssertionError ________________________ test_new_interactive_extensive ________________________ runner = @freeze_time('2015-6-1 8:00') def test_new_interactive_extensive(runner): runner = runner(print_new='path', default_calendar=False) result = runner.invoke( main_khal, 'new -i 15:00 15:30'.split(), '?\ninvalid\ntwo\n' 'Unicce Name\n' '\n' 'Europe/London\n' 'bar\n' 'l\non a boat\n' 'p\nweekly\n' '1.1.2018\n' 'a\n30m\n' 'c\nwork\n' 'n\n' ) > assert not result.exception E assert not AttributeError("'zoneinfo.ZoneInfo' object has no attribute '_tzinfos'") E + where AttributeError("'zoneinfo.ZoneInfo' object has no attribute '_tzinfos'") = .exception tests/cli_test.py:880: AssertionError _______________________________ test_issue_1056 ________________________________ runner = @freeze_time('2015-6-1 8:00') def test_issue_1056(runner): """if an ansi escape sequence is contained in the output, we can't parse it properly""" runner = runner(print_new='path', default_calendar=False) result = runner.invoke( main_khal, 'new -i'.split(), 'two\n' 'new event\n' 'now\n' 'Europe/London\n' 'None\n' 't\n' # edit datetime range '\n' 'n\n' ) assert 'error parsing range' not in result.output > assert not result.exception E assert not AttributeError("'zoneinfo.ZoneInfo' object has no attribute '_tzinfos'") E + where AttributeError("'zoneinfo.ZoneInfo' object has no attribute '_tzinfos'") = .exception tests/cli_test.py:903: AssertionError ____________________________ TestImport.test_import ____________________________ self = coll_vdirs = (, {"Dad's calendar": , 'private': }) def test_import(self, coll_vdirs): coll, vdirs = coll_vdirs view = {'event_format': '{title}'} conf = {'locale': utils.LOCALE_BERLIN, 'view': view} > import_ics(coll, conf, _get_text('event_rrule_recuid'), batch=True) tests/controller_test.py:100: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ khal/controllers.py:617: in import_ics import_event(vevent, collection, conf['locale'], batch, format, env) khal/controllers.py:665: in import_event collection.insert(Item(vevent), collection=calendar_name) khal/khalendar/khalendar.py:228: in insert self._backend.update(event.raw, event.href, event.etag, calendar=calendar) khal/khalendar/backend.py:246: in update self._update_impl(vevent, href, calendar) khal/khalendar/backend.py:367: in _update_impl dtstartend = expand_vevent(vevent, href) khal/icalendar.py:315: in expand dtstartl = set(rrule) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ date = datetime.datetime(2014, 6, 30, 7, 0) def sanitize_datetime(date): if allday and isinstance(date, dt.datetime): date = date.date() if events_tz is not None: > date = events_tz.localize(date) E AttributeError: 'zoneinfo.ZoneInfo' object has no attribute 'localize' khal/icalendar.py:256: AttributeError ----------------------------- Captured stderr call ----------------------------- warning: Cannot find timezone `Europe/Berlin` in .ics file, this could be a bug, please report this issue at http://github.com/pimutils/khal/. warning: Cannot find timezone `UTC` in .ics file, this could be a bug, please report this issue at http://github.com/pimutils/khal/. ______________________ TestImport.test_mix_datetime_types ______________________ collection = conf = {'locale': {'dateformat': '%d.%m.', 'datetimeformat': '%d.%m. %H:%M', 'default_timezone': , 'firstweekday': 0, ...}, 'view': {'event_format': '{title}'}} ics = 'BEGIN:VCALENDAR\nVERSION:2.0\nPRODID:ownCloud Calendar 0.7.3\nBEGIN:VEVENT\nSUMMARY:Termin:Junghackertag\nURL:http://...DTEND:20150602T160000\nDESCRIPTION:Junghackertag\nDTSTAMP:20150626T182050\nSEQUENCE:10172\nEND:VEVENT\nEND:VCALENDAR\n' batch = True, random_uid = False, format = '{title}', env = None def import_ics(collection, conf, ics, batch=False, random_uid=False, format=None, env=None): """ :param batch: setting this to True will insert without asking for approval, even when an event with the same uid already exists :type batch: bool :param random_uid: whether to assign a random UID to imported events or not :type random_uid: bool :param format: the format string to print events with :type format: str """ if format is None: format = conf['view']['event_format'] try: > vevents = split_ics(ics, random_uid, conf['locale']['default_timezone']) khal/controllers.py:613: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ khal/icalendar.py:86: in split_ics raise saved_exception khal/icalendar.py:79: in split_ics ics = ics_from_list(events, tzs, random_uid, default_timezone) khal/icalendar.py:178: in ics_from_list sub_event = sanitize(sub_event, default_timezone=default_timezone) khal/icalendar.py:406: in sanitize dtstart, dtend = sanitize_timerange( _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ dtstart = datetime.datetime(2015, 5, 30, 12, 0) dtend = datetime.datetime(2015, 5, 30, 16, 0, tzinfo=zoneinfo.ZoneInfo(key='Europe/Berlin')) duration = None def sanitize_timerange(dtstart, dtend, duration=None): '''return sensible dtstart and end for events that have an invalid or missing DTEND, assuming the event just lasts one hour.''' if isinstance(dtstart, dt.datetime) and isinstance(dtend, dt.datetime): if dtstart.tzinfo and not dtend.tzinfo: logger.warning( "Event end time has no timezone. " "Assuming it's the same timezone as the start time" ) dtend = dtstart.tzinfo.localize(dtend) if not dtstart.tzinfo and dtend.tzinfo: logger.warning( "Event start time has no timezone. " "Assuming it's the same timezone as the end time" ) > dtstart = dtend.tzinfo.localize(dtstart) E AttributeError: 'zoneinfo.ZoneInfo' object has no attribute 'localize' khal/icalendar.py:431: AttributeError During handling of the above exception, another exception occurred: self = coll_vdirs = (, {"Dad's calendar": , 'private': }) def test_mix_datetime_types(self, coll_vdirs): """ Test importing events with mixed tz-aware and tz-naive datetimes. """ coll, vdirs = coll_vdirs view = {'event_format': '{title}'} > import_ics( coll, {'locale': utils.LOCALE_BERLIN, 'view': view}, _get_text('event_dt_mixed_awareness'), batch=True ) tests/controller_test.py:125: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ collection = conf = {'locale': {'dateformat': '%d.%m.', 'datetimeformat': '%d.%m. %H:%M', 'default_timezone': , 'firstweekday': 0, ...}, 'view': {'event_format': '{title}'}} ics = 'BEGIN:VCALENDAR\nVERSION:2.0\nPRODID:ownCloud Calendar 0.7.3\nBEGIN:VEVENT\nSUMMARY:Termin:Junghackertag\nURL:http://...DTEND:20150602T160000\nDESCRIPTION:Junghackertag\nDTSTAMP:20150626T182050\nSEQUENCE:10172\nEND:VEVENT\nEND:VCALENDAR\n' batch = True, random_uid = False, format = '{title}', env = None def import_ics(collection, conf, ics, batch=False, random_uid=False, format=None, env=None): """ :param batch: setting this to True will insert without asking for approval, even when an event with the same uid already exists :type batch: bool :param random_uid: whether to assign a random UID to imported events or not :type random_uid: bool :param format: the format string to print events with :type format: str """ if format is None: format = conf['view']['event_format'] try: vevents = split_ics(ics, random_uid, conf['locale']['default_timezone']) except Exception as error: > raise FatalError(error) E khal.exceptions.FatalError: 'zoneinfo.ZoneInfo' object has no attribute 'localize' khal/controllers.py:615: FatalError ----------------------------- Captured stderr call ----------------------------- warning: Event end time has no timezone. Assuming it's the same timezone as the start time warning: Error when trying to import the event S9HZETRQne warning: Event start time has no timezone. Assuming it's the same timezone as the end time warning: Error when trying to import the event http://wiki.hamburg.ccc.de/Termin:Junghackertag _________________________________ test_raw_dt __________________________________ def test_raw_dt(): event_dt = _get_text('event_dt_simple') start = BERLIN.localize(dt.datetime(2014, 4, 9, 9, 30)) end = BERLIN.localize(dt.datetime(2014, 4, 9, 10, 30)) event = Event.fromString(event_dt, start=start, end=end, **EVENT_KWARGS) with freeze_time('2016-1-1'): assert normalize_component(event.raw) == \ > normalize_component(_get_text('event_dt_simple_inkl_vtimezone')) tests/event_test.py:51: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ khal/khalendar/event.py:385: in raw timezone = create_timezone(tzinfo, self.start) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tz = zoneinfo.ZoneInfo(key='Europe/Berlin') first_date = datetime.datetime(2014, 4, 9, 7, 30) last_date = datetime.datetime(2014, 4, 10, 7, 30) def create_timezone( tz: pytz.BaseTzInfo, first_date: Optional[dt.datetime]=None, last_date: Optional[dt.datetime]=None ) -> icalendar.Timezone: """ create an icalendar vtimezone from a pytz.tzinfo object :param tz: the timezone :param first_date: the very first datetime that needs to be included in the transition times, typically the DTSTART value of the (first recurring) event :param last_date: the last datetime that needs to included, typically the end of the (very last) event (of a recursion set) :returns: timezone information we currently have a problem here: pytz.timezones only carry the absolute dates of time zone transitions, not their RRULEs. This will a) make for rather bloated VTIMEZONE components, especially for long recurring events, b) we'll need to specify for which time range this VTIMEZONE should be generated and c) will not be valid for recurring events that go into eternity. Possible Solutions: As this information is not provided by pytz at all, there is no easy solution, we'd really need to ship another version of the OLSON DB. """ if isinstance(tz, StaticTzInfo): return _create_timezone_static(tz) # TODO last_date = None, recurring to infinity first_date = dt.datetime.today() if not first_date else to_naive_utc(first_date) last_date = first_date + dt.timedelta(days=1) if not last_date else to_naive_utc(last_date) timezone = icalendar.Timezone() timezone.add('TZID', tz) dst = { one[2]: 'DST' in two.__repr__() > for one, two in iter(tz._tzinfos.items()) # type: ignore } E AttributeError: 'zoneinfo.ZoneInfo' object has no attribute '_tzinfos' khal/khalendar/event.py:903: AttributeError ______________________________ test_update_simple ______________________________ def test_update_simple(): event = Event.fromString(_get_text('event_dt_simple'), **EVENT_KWARGS) event_updated = Event.fromString(_get_text('event_dt_simple_updated'), **EVENT_KWARGS) event.update_summary('A not so simple Event') event.update_description('Everything has changed') event.update_location('anywhere') event.update_categories(['meeting']) > assert normalize_component(event.raw) == normalize_component(event_updated.raw) tests/event_test.py:83: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ khal/khalendar/event.py:385: in raw timezone = create_timezone(tzinfo, self.start) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tz = zoneinfo.ZoneInfo(key='Europe/Berlin') first_date = datetime.datetime(2014, 4, 9, 7, 30) last_date = datetime.datetime(2014, 4, 10, 7, 30) def create_timezone( tz: pytz.BaseTzInfo, first_date: Optional[dt.datetime]=None, last_date: Optional[dt.datetime]=None ) -> icalendar.Timezone: """ create an icalendar vtimezone from a pytz.tzinfo object :param tz: the timezone :param first_date: the very first datetime that needs to be included in the transition times, typically the DTSTART value of the (first recurring) event :param last_date: the last datetime that needs to included, typically the end of the (very last) event (of a recursion set) :returns: timezone information we currently have a problem here: pytz.timezones only carry the absolute dates of time zone transitions, not their RRULEs. This will a) make for rather bloated VTIMEZONE components, especially for long recurring events, b) we'll need to specify for which time range this VTIMEZONE should be generated and c) will not be valid for recurring events that go into eternity. Possible Solutions: As this information is not provided by pytz at all, there is no easy solution, we'd really need to ship another version of the OLSON DB. """ if isinstance(tz, StaticTzInfo): return _create_timezone_static(tz) # TODO last_date = None, recurring to infinity first_date = dt.datetime.today() if not first_date else to_naive_utc(first_date) last_date = first_date + dt.timedelta(days=1) if not last_date else to_naive_utc(last_date) timezone = icalendar.Timezone() timezone.add('TZID', tz) dst = { one[2]: 'DST' in two.__repr__() > for one, two in iter(tz._tzinfos.items()) # type: ignore } E AttributeError: 'zoneinfo.ZoneInfo' object has no attribute '_tzinfos' khal/khalendar/event.py:903: AttributeError _________________________________ test_add_url _________________________________ def test_add_url(): event = Event.fromString(_get_text('event_dt_simple'), **EVENT_KWARGS) event.update_url('https://github.com/pimutils/khal') > assert 'URL:https://github.com/pimutils/khal' in event.raw tests/event_test.py:89: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ khal/khalendar/event.py:385: in raw timezone = create_timezone(tzinfo, self.start) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tz = zoneinfo.ZoneInfo(key='Europe/Berlin') first_date = datetime.datetime(2014, 4, 9, 7, 30) last_date = datetime.datetime(2014, 4, 10, 7, 30) def create_timezone( tz: pytz.BaseTzInfo, first_date: Optional[dt.datetime]=None, last_date: Optional[dt.datetime]=None ) -> icalendar.Timezone: """ create an icalendar vtimezone from a pytz.tzinfo object :param tz: the timezone :param first_date: the very first datetime that needs to be included in the transition times, typically the DTSTART value of the (first recurring) event :param last_date: the last datetime that needs to included, typically the end of the (very last) event (of a recursion set) :returns: timezone information we currently have a problem here: pytz.timezones only carry the absolute dates of time zone transitions, not their RRULEs. This will a) make for rather bloated VTIMEZONE components, especially for long recurring events, b) we'll need to specify for which time range this VTIMEZONE should be generated and c) will not be valid for recurring events that go into eternity. Possible Solutions: As this information is not provided by pytz at all, there is no easy solution, we'd really need to ship another version of the OLSON DB. """ if isinstance(tz, StaticTzInfo): return _create_timezone_static(tz) # TODO last_date = None, recurring to infinity first_date = dt.datetime.today() if not first_date else to_naive_utc(first_date) last_date = first_date + dt.timedelta(days=1) if not last_date else to_naive_utc(last_date) timezone = icalendar.Timezone() timezone.add('TZID', tz) dst = { one[2]: 'DST' in two.__repr__() > for one, two in iter(tz._tzinfos.items()) # type: ignore } E AttributeError: 'zoneinfo.ZoneInfo' object has no attribute '_tzinfos' khal/khalendar/event.py:903: AttributeError _______________________ test_do_not_save_empty_location ________________________ def test_do_not_save_empty_location(): event = Event.fromString(_get_text('event_dt_simple'), **EVENT_KWARGS) event.update_location('') > assert 'LOCATION' not in event.raw tests/event_test.py:109: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ khal/khalendar/event.py:385: in raw timezone = create_timezone(tzinfo, self.start) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tz = zoneinfo.ZoneInfo(key='Europe/Berlin') first_date = datetime.datetime(2014, 4, 9, 7, 30) last_date = datetime.datetime(2014, 4, 10, 7, 30) def create_timezone( tz: pytz.BaseTzInfo, first_date: Optional[dt.datetime]=None, last_date: Optional[dt.datetime]=None ) -> icalendar.Timezone: """ create an icalendar vtimezone from a pytz.tzinfo object :param tz: the timezone :param first_date: the very first datetime that needs to be included in the transition times, typically the DTSTART value of the (first recurring) event :param last_date: the last datetime that needs to included, typically the end of the (very last) event (of a recursion set) :returns: timezone information we currently have a problem here: pytz.timezones only carry the absolute dates of time zone transitions, not their RRULEs. This will a) make for rather bloated VTIMEZONE components, especially for long recurring events, b) we'll need to specify for which time range this VTIMEZONE should be generated and c) will not be valid for recurring events that go into eternity. Possible Solutions: As this information is not provided by pytz at all, there is no easy solution, we'd really need to ship another version of the OLSON DB. """ if isinstance(tz, StaticTzInfo): return _create_timezone_static(tz) # TODO last_date = None, recurring to infinity first_date = dt.datetime.today() if not first_date else to_naive_utc(first_date) last_date = first_date + dt.timedelta(days=1) if not last_date else to_naive_utc(last_date) timezone = icalendar.Timezone() timezone.add('TZID', tz) dst = { one[2]: 'DST' in two.__repr__() > for one, two in iter(tz._tzinfos.items()) # type: ignore } E AttributeError: 'zoneinfo.ZoneInfo' object has no attribute '_tzinfos' khal/khalendar/event.py:903: AttributeError ______________________ test_do_not_save_empty_description ______________________ def test_do_not_save_empty_description(): event = Event.fromString(_get_text('event_dt_simple'), **EVENT_KWARGS) event.update_description('') > assert 'DESCRIPTION' not in event.raw tests/event_test.py:115: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ khal/khalendar/event.py:385: in raw timezone = create_timezone(tzinfo, self.start) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tz = zoneinfo.ZoneInfo(key='Europe/Berlin') first_date = datetime.datetime(2014, 4, 9, 7, 30) last_date = datetime.datetime(2014, 4, 10, 7, 30) def create_timezone( tz: pytz.BaseTzInfo, first_date: Optional[dt.datetime]=None, last_date: Optional[dt.datetime]=None ) -> icalendar.Timezone: """ create an icalendar vtimezone from a pytz.tzinfo object :param tz: the timezone :param first_date: the very first datetime that needs to be included in the transition times, typically the DTSTART value of the (first recurring) event :param last_date: the last datetime that needs to included, typically the end of the (very last) event (of a recursion set) :returns: timezone information we currently have a problem here: pytz.timezones only carry the absolute dates of time zone transitions, not their RRULEs. This will a) make for rather bloated VTIMEZONE components, especially for long recurring events, b) we'll need to specify for which time range this VTIMEZONE should be generated and c) will not be valid for recurring events that go into eternity. Possible Solutions: As this information is not provided by pytz at all, there is no easy solution, we'd really need to ship another version of the OLSON DB. """ if isinstance(tz, StaticTzInfo): return _create_timezone_static(tz) # TODO last_date = None, recurring to infinity first_date = dt.datetime.today() if not first_date else to_naive_utc(first_date) last_date = first_date + dt.timedelta(days=1) if not last_date else to_naive_utc(last_date) timezone = icalendar.Timezone() timezone.add('TZID', tz) dst = { one[2]: 'DST' in two.__repr__() > for one, two in iter(tz._tzinfos.items()) # type: ignore } E AttributeError: 'zoneinfo.ZoneInfo' object has no attribute '_tzinfos' khal/khalendar/event.py:903: AttributeError __________________________ test_do_not_save_empty_url __________________________ def test_do_not_save_empty_url(): event = Event.fromString(_get_text('event_dt_simple'), **EVENT_KWARGS) event.update_url('') > assert 'URL' not in event.raw tests/event_test.py:121: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ khal/khalendar/event.py:385: in raw timezone = create_timezone(tzinfo, self.start) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tz = zoneinfo.ZoneInfo(key='Europe/Berlin') first_date = datetime.datetime(2014, 4, 9, 7, 30) last_date = datetime.datetime(2014, 4, 10, 7, 30) def create_timezone( tz: pytz.BaseTzInfo, first_date: Optional[dt.datetime]=None, last_date: Optional[dt.datetime]=None ) -> icalendar.Timezone: """ create an icalendar vtimezone from a pytz.tzinfo object :param tz: the timezone :param first_date: the very first datetime that needs to be included in the transition times, typically the DTSTART value of the (first recurring) event :param last_date: the last datetime that needs to included, typically the end of the (very last) event (of a recursion set) :returns: timezone information we currently have a problem here: pytz.timezones only carry the absolute dates of time zone transitions, not their RRULEs. This will a) make for rather bloated VTIMEZONE components, especially for long recurring events, b) we'll need to specify for which time range this VTIMEZONE should be generated and c) will not be valid for recurring events that go into eternity. Possible Solutions: As this information is not provided by pytz at all, there is no easy solution, we'd really need to ship another version of the OLSON DB. """ if isinstance(tz, StaticTzInfo): return _create_timezone_static(tz) # TODO last_date = None, recurring to infinity first_date = dt.datetime.today() if not first_date else to_naive_utc(first_date) last_date = first_date + dt.timedelta(days=1) if not last_date else to_naive_utc(last_date) timezone = icalendar.Timezone() timezone.add('TZID', tz) dst = { one[2]: 'DST' in two.__repr__() > for one, two in iter(tz._tzinfos.items()) # type: ignore } E AttributeError: 'zoneinfo.ZoneInfo' object has no attribute '_tzinfos' khal/khalendar/event.py:903: AttributeError ________________ test_remove_existing_location_if_set_to_empty _________________ def test_remove_existing_location_if_set_to_empty(): event = Event.fromString(_get_text('event_dt_simple_updated'), **EVENT_KWARGS) event.update_location('') > assert 'LOCATION' not in event.raw tests/event_test.py:127: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ khal/khalendar/event.py:385: in raw timezone = create_timezone(tzinfo, self.start) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tz = zoneinfo.ZoneInfo(key='Europe/Berlin') first_date = datetime.datetime(2014, 4, 9, 7, 30) last_date = datetime.datetime(2014, 4, 10, 7, 30) def create_timezone( tz: pytz.BaseTzInfo, first_date: Optional[dt.datetime]=None, last_date: Optional[dt.datetime]=None ) -> icalendar.Timezone: """ create an icalendar vtimezone from a pytz.tzinfo object :param tz: the timezone :param first_date: the very first datetime that needs to be included in the transition times, typically the DTSTART value of the (first recurring) event :param last_date: the last datetime that needs to included, typically the end of the (very last) event (of a recursion set) :returns: timezone information we currently have a problem here: pytz.timezones only carry the absolute dates of time zone transitions, not their RRULEs. This will a) make for rather bloated VTIMEZONE components, especially for long recurring events, b) we'll need to specify for which time range this VTIMEZONE should be generated and c) will not be valid for recurring events that go into eternity. Possible Solutions: As this information is not provided by pytz at all, there is no easy solution, we'd really need to ship another version of the OLSON DB. """ if isinstance(tz, StaticTzInfo): return _create_timezone_static(tz) # TODO last_date = None, recurring to infinity first_date = dt.datetime.today() if not first_date else to_naive_utc(first_date) last_date = first_date + dt.timedelta(days=1) if not last_date else to_naive_utc(last_date) timezone = icalendar.Timezone() timezone.add('TZID', tz) dst = { one[2]: 'DST' in two.__repr__() > for one, two in iter(tz._tzinfos.items()) # type: ignore } E AttributeError: 'zoneinfo.ZoneInfo' object has no attribute '_tzinfos' khal/khalendar/event.py:903: AttributeError _______________ test_remove_existing_description_if_set_to_empty _______________ def test_remove_existing_description_if_set_to_empty(): event = Event.fromString(_get_text('event_dt_simple_updated'), **EVENT_KWARGS) event.update_description('') > assert 'DESCRIPTION' not in event.raw tests/event_test.py:133: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ khal/khalendar/event.py:385: in raw timezone = create_timezone(tzinfo, self.start) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tz = zoneinfo.ZoneInfo(key='Europe/Berlin') first_date = datetime.datetime(2014, 4, 9, 7, 30) last_date = datetime.datetime(2014, 4, 10, 7, 30) def create_timezone( tz: pytz.BaseTzInfo, first_date: Optional[dt.datetime]=None, last_date: Optional[dt.datetime]=None ) -> icalendar.Timezone: """ create an icalendar vtimezone from a pytz.tzinfo object :param tz: the timezone :param first_date: the very first datetime that needs to be included in the transition times, typically the DTSTART value of the (first recurring) event :param last_date: the last datetime that needs to included, typically the end of the (very last) event (of a recursion set) :returns: timezone information we currently have a problem here: pytz.timezones only carry the absolute dates of time zone transitions, not their RRULEs. This will a) make for rather bloated VTIMEZONE components, especially for long recurring events, b) we'll need to specify for which time range this VTIMEZONE should be generated and c) will not be valid for recurring events that go into eternity. Possible Solutions: As this information is not provided by pytz at all, there is no easy solution, we'd really need to ship another version of the OLSON DB. """ if isinstance(tz, StaticTzInfo): return _create_timezone_static(tz) # TODO last_date = None, recurring to infinity first_date = dt.datetime.today() if not first_date else to_naive_utc(first_date) last_date = first_date + dt.timedelta(days=1) if not last_date else to_naive_utc(last_date) timezone = icalendar.Timezone() timezone.add('TZID', tz) dst = { one[2]: 'DST' in two.__repr__() > for one, two in iter(tz._tzinfos.items()) # type: ignore } E AttributeError: 'zoneinfo.ZoneInfo' object has no attribute '_tzinfos' khal/khalendar/event.py:903: AttributeError ___________________ test_remove_existing_url_if_set_to_empty ___________________ def test_remove_existing_url_if_set_to_empty(): event = Event.fromString(_get_text('event_dt_url'), **EVENT_KWARGS) event.update_url('') > assert 'URL' not in event.raw tests/event_test.py:139: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ khal/khalendar/event.py:385: in raw timezone = create_timezone(tzinfo, self.start) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tz = zoneinfo.ZoneInfo(key='Europe/Berlin') first_date = datetime.datetime(2014, 4, 9, 7, 30) last_date = datetime.datetime(2014, 4, 10, 7, 30) def create_timezone( tz: pytz.BaseTzInfo, first_date: Optional[dt.datetime]=None, last_date: Optional[dt.datetime]=None ) -> icalendar.Timezone: """ create an icalendar vtimezone from a pytz.tzinfo object :param tz: the timezone :param first_date: the very first datetime that needs to be included in the transition times, typically the DTSTART value of the (first recurring) event :param last_date: the last datetime that needs to included, typically the end of the (very last) event (of a recursion set) :returns: timezone information we currently have a problem here: pytz.timezones only carry the absolute dates of time zone transitions, not their RRULEs. This will a) make for rather bloated VTIMEZONE components, especially for long recurring events, b) we'll need to specify for which time range this VTIMEZONE should be generated and c) will not be valid for recurring events that go into eternity. Possible Solutions: As this information is not provided by pytz at all, there is no easy solution, we'd really need to ship another version of the OLSON DB. """ if isinstance(tz, StaticTzInfo): return _create_timezone_static(tz) # TODO last_date = None, recurring to infinity first_date = dt.datetime.today() if not first_date else to_naive_utc(first_date) last_date = first_date + dt.timedelta(days=1) if not last_date else to_naive_utc(last_date) timezone = icalendar.Timezone() timezone.add('TZID', tz) dst = { one[2]: 'DST' in two.__repr__() > for one, two in iter(tz._tzinfos.items()) # type: ignore } E AttributeError: 'zoneinfo.ZoneInfo' object has no attribute '_tzinfos' khal/khalendar/event.py:903: AttributeError ________________________ test_update_remove_categories _________________________ def test_update_remove_categories(): event = Event.fromString(_get_text('event_dt_simple_updated'), **EVENT_KWARGS) event_nocat = Event.fromString(_get_text('event_dt_simple_nocat'), **EVENT_KWARGS) event.update_categories([]) > assert normalize_component(event.raw) == normalize_component(event_nocat.raw) tests/event_test.py:146: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ khal/khalendar/event.py:385: in raw timezone = create_timezone(tzinfo, self.start) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tz = zoneinfo.ZoneInfo(key='Europe/Berlin') first_date = datetime.datetime(2014, 4, 9, 7, 30) last_date = datetime.datetime(2014, 4, 10, 7, 30) def create_timezone( tz: pytz.BaseTzInfo, first_date: Optional[dt.datetime]=None, last_date: Optional[dt.datetime]=None ) -> icalendar.Timezone: """ create an icalendar vtimezone from a pytz.tzinfo object :param tz: the timezone :param first_date: the very first datetime that needs to be included in the transition times, typically the DTSTART value of the (first recurring) event :param last_date: the last datetime that needs to included, typically the end of the (very last) event (of a recursion set) :returns: timezone information we currently have a problem here: pytz.timezones only carry the absolute dates of time zone transitions, not their RRULEs. This will a) make for rather bloated VTIMEZONE components, especially for long recurring events, b) we'll need to specify for which time range this VTIMEZONE should be generated and c) will not be valid for recurring events that go into eternity. Possible Solutions: As this information is not provided by pytz at all, there is no easy solution, we'd really need to ship another version of the OLSON DB. """ if isinstance(tz, StaticTzInfo): return _create_timezone_static(tz) # TODO last_date = None, recurring to infinity first_date = dt.datetime.today() if not first_date else to_naive_utc(first_date) last_date = first_date + dt.timedelta(days=1) if not last_date else to_naive_utc(last_date) timezone = icalendar.Timezone() timezone.add('TZID', tz) dst = { one[2]: 'DST' in two.__repr__() > for one, two in iter(tz._tzinfos.items()) # type: ignore } E AttributeError: 'zoneinfo.ZoneInfo' object has no attribute '_tzinfos' khal/khalendar/event.py:903: AttributeError _____________________________ test_transform_event _____________________________ def test_transform_event(): """test if transformation between different event types works""" event_d = _get_text('event_d') event = Event.fromString(event_d, **EVENT_KWARGS) assert isinstance(event, AllDayEvent) start = BERLIN.localize(dt.datetime(2014, 4, 9, 9, 30)) end = BERLIN.localize(dt.datetime(2014, 4, 9, 10, 30)) event.update_start_end(start, end) assert isinstance(event, LocalizedEvent) assert event.format(LIST_FORMAT, dt.date(2014, 4, 9)) == '09:30-10:30 An Event\x1b[0m' assert event.format(SEARCH_FORMAT, dt.date(2014, 4, 9)) == \ '09.04.2014 09:30-10:30 An Event\x1b[0m' analog_event = Event.fromString(_get_text('event_dt_simple'), **EVENT_KWARGS) > assert normalize_component(event.raw) == normalize_component(analog_event.raw) tests/event_test.py:184: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ khal/khalendar/event.py:385: in raw timezone = create_timezone(tzinfo, self.start) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tz = zoneinfo.ZoneInfo(key='Europe/Berlin') first_date = datetime.datetime(2014, 4, 9, 7, 30) last_date = datetime.datetime(2014, 4, 10, 7, 30) def create_timezone( tz: pytz.BaseTzInfo, first_date: Optional[dt.datetime]=None, last_date: Optional[dt.datetime]=None ) -> icalendar.Timezone: """ create an icalendar vtimezone from a pytz.tzinfo object :param tz: the timezone :param first_date: the very first datetime that needs to be included in the transition times, typically the DTSTART value of the (first recurring) event :param last_date: the last datetime that needs to included, typically the end of the (very last) event (of a recursion set) :returns: timezone information we currently have a problem here: pytz.timezones only carry the absolute dates of time zone transitions, not their RRULEs. This will a) make for rather bloated VTIMEZONE components, especially for long recurring events, b) we'll need to specify for which time range this VTIMEZONE should be generated and c) will not be valid for recurring events that go into eternity. Possible Solutions: As this information is not provided by pytz at all, there is no easy solution, we'd really need to ship another version of the OLSON DB. """ if isinstance(tz, StaticTzInfo): return _create_timezone_static(tz) # TODO last_date = None, recurring to infinity first_date = dt.datetime.today() if not first_date else to_naive_utc(first_date) last_date = first_date + dt.timedelta(days=1) if not last_date else to_naive_utc(last_date) timezone = icalendar.Timezone() timezone.add('TZID', tz) dst = { one[2]: 'DST' in two.__repr__() > for one, two in iter(tz._tzinfos.items()) # type: ignore } E AttributeError: 'zoneinfo.ZoneInfo' object has no attribute '_tzinfos' khal/khalendar/event.py:903: AttributeError ________________________________ test_dt_two_tz ________________________________ def test_dt_two_tz(): event_dt_two_tz = _get_text('event_dt_two_tz') cal_dt_two_tz = _get_text('cal_dt_two_tz') event = Event.fromString(event_dt_two_tz, **EVENT_KWARGS) with freeze_time('2016-02-16 12:00:00'): > assert normalize_component(cal_dt_two_tz) == normalize_component(event.raw) tests/event_test.py:222: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ khal/khalendar/event.py:385: in raw timezone = create_timezone(tzinfo, self.start) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tz = zoneinfo.ZoneInfo(key='Europe/Berlin') first_date = datetime.datetime(2014, 4, 9, 7, 30) last_date = datetime.datetime(2014, 4, 10, 7, 30) def create_timezone( tz: pytz.BaseTzInfo, first_date: Optional[dt.datetime]=None, last_date: Optional[dt.datetime]=None ) -> icalendar.Timezone: """ create an icalendar vtimezone from a pytz.tzinfo object :param tz: the timezone :param first_date: the very first datetime that needs to be included in the transition times, typically the DTSTART value of the (first recurring) event :param last_date: the last datetime that needs to included, typically the end of the (very last) event (of a recursion set) :returns: timezone information we currently have a problem here: pytz.timezones only carry the absolute dates of time zone transitions, not their RRULEs. This will a) make for rather bloated VTIMEZONE components, especially for long recurring events, b) we'll need to specify for which time range this VTIMEZONE should be generated and c) will not be valid for recurring events that go into eternity. Possible Solutions: As this information is not provided by pytz at all, there is no easy solution, we'd really need to ship another version of the OLSON DB. """ if isinstance(tz, StaticTzInfo): return _create_timezone_static(tz) # TODO last_date = None, recurring to infinity first_date = dt.datetime.today() if not first_date else to_naive_utc(first_date) last_date = first_date + dt.timedelta(days=1) if not last_date else to_naive_utc(last_date) timezone = icalendar.Timezone() timezone.add('TZID', tz) dst = { one[2]: 'DST' in two.__repr__() > for one, two in iter(tz._tzinfos.items()) # type: ignore } E AttributeError: 'zoneinfo.ZoneInfo' object has no attribute '_tzinfos' khal/khalendar/event.py:903: AttributeError ______________________________ test_event_no_dst _______________________________ def test_event_no_dst(): """test the creation of a corect VTIMEZONE for timezones with no dst""" event_no_dst = _get_text('event_no_dst') cal_no_dst = _get_text('cal_no_dst') event = Event.fromString(event_no_dst, calendar='foobar', locale=LOCALE_BOGOTA) if version.parse(pytz.__version__) > version.Version('2017.1'): if version.parse(pytz.__version__) < version.Version('2022.7'): cal_no_dst = cal_no_dst.replace( 'TZNAME:COT', 'RDATE:20380118T221407\r\nTZNAME:-05' ) else: cal_no_dst = cal_no_dst.replace( 'TZNAME:COT', 'TZNAME:-05' ) > assert normalize_component(event.raw) == normalize_component(cal_no_dst) tests/event_test.py:370: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ khal/khalendar/event.py:385: in raw timezone = create_timezone(tzinfo, self.start) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tz = zoneinfo.ZoneInfo(key='America/Bogota') first_date = datetime.datetime(2014, 4, 9, 14, 30) last_date = datetime.datetime(2014, 4, 10, 14, 30) def create_timezone( tz: pytz.BaseTzInfo, first_date: Optional[dt.datetime]=None, last_date: Optional[dt.datetime]=None ) -> icalendar.Timezone: """ create an icalendar vtimezone from a pytz.tzinfo object :param tz: the timezone :param first_date: the very first datetime that needs to be included in the transition times, typically the DTSTART value of the (first recurring) event :param last_date: the last datetime that needs to included, typically the end of the (very last) event (of a recursion set) :returns: timezone information we currently have a problem here: pytz.timezones only carry the absolute dates of time zone transitions, not their RRULEs. This will a) make for rather bloated VTIMEZONE components, especially for long recurring events, b) we'll need to specify for which time range this VTIMEZONE should be generated and c) will not be valid for recurring events that go into eternity. Possible Solutions: As this information is not provided by pytz at all, there is no easy solution, we'd really need to ship another version of the OLSON DB. """ if isinstance(tz, StaticTzInfo): return _create_timezone_static(tz) # TODO last_date = None, recurring to infinity first_date = dt.datetime.today() if not first_date else to_naive_utc(first_date) last_date = first_date + dt.timedelta(days=1) if not last_date else to_naive_utc(last_date) timezone = icalendar.Timezone() timezone.add('TZID', tz) dst = { one[2]: 'DST' in two.__repr__() > for one, two in iter(tz._tzinfos.items()) # type: ignore } E AttributeError: 'zoneinfo.ZoneInfo' object has no attribute '_tzinfos' khal/khalendar/event.py:903: AttributeError ______________________________ test_event_raw_UTC ______________________________ def test_event_raw_UTC(): """test .raw() on events which are localized in UTC""" event_utc = _get_text('event_dt_simple_zulu') event = Event.fromString(event_utc, **EVENT_KWARGS) assert event.raw == '\r\n'.join([ '''BEGIN:VCALENDAR''', '''VERSION:2.0''', '''PRODID:-//PIMUTILS.ORG//NONSGML khal / icalendar //EN''', '''BEGIN:VEVENT''', '''SUMMARY:An Event''', '''DTSTART:20140409T093000Z''', '''DTEND:20140409T103000Z''', '''DTSTAMP:20140401T234817Z''', '''UID:V042MJ8B3SJNFXQOJL6P53OFMHJE8Z3VZWOU''', '''END:VEVENT''', > '''END:VCALENDAR\r\n''']) tests/event_test.py:390: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ khal/khalendar/event.py:385: in raw timezone = create_timezone(tzinfo, self.start) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tz = zoneinfo.ZoneInfo(key='UTC') first_date = datetime.datetime(2014, 4, 9, 9, 30) last_date = datetime.datetime(2014, 4, 10, 9, 30) def create_timezone( tz: pytz.BaseTzInfo, first_date: Optional[dt.datetime]=None, last_date: Optional[dt.datetime]=None ) -> icalendar.Timezone: """ create an icalendar vtimezone from a pytz.tzinfo object :param tz: the timezone :param first_date: the very first datetime that needs to be included in the transition times, typically the DTSTART value of the (first recurring) event :param last_date: the last datetime that needs to included, typically the end of the (very last) event (of a recursion set) :returns: timezone information we currently have a problem here: pytz.timezones only carry the absolute dates of time zone transitions, not their RRULEs. This will a) make for rather bloated VTIMEZONE components, especially for long recurring events, b) we'll need to specify for which time range this VTIMEZONE should be generated and c) will not be valid for recurring events that go into eternity. Possible Solutions: As this information is not provided by pytz at all, there is no easy solution, we'd really need to ship another version of the OLSON DB. """ if isinstance(tz, StaticTzInfo): return _create_timezone_static(tz) # TODO last_date = None, recurring to infinity first_date = dt.datetime.today() if not first_date else to_naive_utc(first_date) last_date = first_date + dt.timedelta(days=1) if not last_date else to_naive_utc(last_date) timezone = icalendar.Timezone() timezone.add('TZID', tz) dst = { one[2]: 'DST' in two.__repr__() > for one, two in iter(tz._tzinfos.items()) # type: ignore } E AttributeError: 'zoneinfo.ZoneInfo' object has no attribute '_tzinfos' khal/khalendar/event.py:903: AttributeError ________________________________ test_multi_uid ________________________________ def test_multi_uid(): """test for support for events with consist of several sub events with the same uid""" orig_event_str = _get_text('event_rrule_recuid') event = Event.fromString(orig_event_str, **EVENT_KWARGS) for line in orig_event_str.split('\n'): > assert line in event.raw.split('\r\n') tests/event_test.py:412: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ khal/khalendar/event.py:385: in raw timezone = create_timezone(tzinfo, self.start) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tz = zoneinfo.ZoneInfo(key='Europe/Berlin') first_date = datetime.datetime(2014, 6, 30, 5, 0) last_date = datetime.datetime(2014, 7, 1, 5, 0) def create_timezone( tz: pytz.BaseTzInfo, first_date: Optional[dt.datetime]=None, last_date: Optional[dt.datetime]=None ) -> icalendar.Timezone: """ create an icalendar vtimezone from a pytz.tzinfo object :param tz: the timezone :param first_date: the very first datetime that needs to be included in the transition times, typically the DTSTART value of the (first recurring) event :param last_date: the last datetime that needs to included, typically the end of the (very last) event (of a recursion set) :returns: timezone information we currently have a problem here: pytz.timezones only carry the absolute dates of time zone transitions, not their RRULEs. This will a) make for rather bloated VTIMEZONE components, especially for long recurring events, b) we'll need to specify for which time range this VTIMEZONE should be generated and c) will not be valid for recurring events that go into eternity. Possible Solutions: As this information is not provided by pytz at all, there is no easy solution, we'd really need to ship another version of the OLSON DB. """ if isinstance(tz, StaticTzInfo): return _create_timezone_static(tz) # TODO last_date = None, recurring to infinity first_date = dt.datetime.today() if not first_date else to_naive_utc(first_date) last_date = first_date + dt.timedelta(days=1) if not last_date else to_naive_utc(last_date) timezone = icalendar.Timezone() timezone.add('TZID', tz) dst = { one[2]: 'DST' in two.__repr__() > for one, two in iter(tz._tzinfos.items()) # type: ignore } E AttributeError: 'zoneinfo.ZoneInfo' object has no attribute '_tzinfos' khal/khalendar/event.py:903: AttributeError _______________________ test_remove_instance_from_recuid _______________________ def test_remove_instance_from_recuid(): """remove an istance from an event which is specified via an additional VEVENT with the same UID (which we call `recuid` here""" event = Event.fromString(_get_text('event_rrule_recuid'), **EVENT_KWARGS) > assert event.raw.split('\r\n').count('UID:event_rrule_recurrence_id') == 2 tests/event_test.py:475: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ khal/khalendar/event.py:385: in raw timezone = create_timezone(tzinfo, self.start) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tz = zoneinfo.ZoneInfo(key='Europe/Berlin') first_date = datetime.datetime(2014, 6, 30, 5, 0) last_date = datetime.datetime(2014, 7, 1, 5, 0) def create_timezone( tz: pytz.BaseTzInfo, first_date: Optional[dt.datetime]=None, last_date: Optional[dt.datetime]=None ) -> icalendar.Timezone: """ create an icalendar vtimezone from a pytz.tzinfo object :param tz: the timezone :param first_date: the very first datetime that needs to be included in the transition times, typically the DTSTART value of the (first recurring) event :param last_date: the last datetime that needs to included, typically the end of the (very last) event (of a recursion set) :returns: timezone information we currently have a problem here: pytz.timezones only carry the absolute dates of time zone transitions, not their RRULEs. This will a) make for rather bloated VTIMEZONE components, especially for long recurring events, b) we'll need to specify for which time range this VTIMEZONE should be generated and c) will not be valid for recurring events that go into eternity. Possible Solutions: As this information is not provided by pytz at all, there is no easy solution, we'd really need to ship another version of the OLSON DB. """ if isinstance(tz, StaticTzInfo): return _create_timezone_static(tz) # TODO last_date = None, recurring to infinity first_date = dt.datetime.today() if not first_date else to_naive_utc(first_date) last_date = first_date + dt.timedelta(days=1) if not last_date else to_naive_utc(last_date) timezone = icalendar.Timezone() timezone.add('TZID', tz) dst = { one[2]: 'DST' in two.__repr__() > for one, two in iter(tz._tzinfos.items()) # type: ignore } E AttributeError: 'zoneinfo.ZoneInfo' object has no attribute '_tzinfos' khal/khalendar/event.py:903: AttributeError ________________________________ test_split_ics ________________________________ def test_split_ics(): cal = _get_text('cal_lots_of_timezones') > vevents = split_ics(cal) tests/icalendar_test.py:55: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ics = 'BEGIN:VCALENDAR\nVERSION:2.0\nPRODID:-//PIMUTILS.ORG//NONSGML khal / icalendar //EN\nBEGIN:VTIMEZONE\nTZID:IndianReun...nDTSTAMP:20140401T234817Z\nUID:abcde\nRECURRENCE-ID;TZID=Europe_Amsterdam:20140707T070000\nEND:VEVENT\nEND:VCALENDAR\n' random_uid = False, default_timezone = None def split_ics(ics: str, random_uid: bool=False, default_timezone=None): """split an ics string into several according to VEVENT's UIDs and sort the right VTIMEZONEs accordingly ignores all other ics components :param random_uid: assign random uids to all events :rtype list: """ cal = cal_from_ics(ics) tzs = {} events_grouped = defaultdict(list) for item in cal.walk(): # Since some events could have a Windows format timezone (e.g. 'New Zealand # Standard Time' for 'Pacific/Auckland' in Olson format), we convert any # Windows format timezones to Olson. if item.name == 'VTIMEZONE': > if item['TZID'] in icalendar.windows_to_olson.WINDOWS_TO_OLSON: E AttributeError: module 'icalendar' has no attribute 'windows_to_olson' khal/icalendar.py:59: AttributeError __________________________ test_split_ics_random_uid ___________________________ def test_split_ics_random_uid(): random.seed(123) cal = _get_text('cal_lots_of_timezones') > vevents = split_ics(cal, random_uid=True) tests/icalendar_test.py:73: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ics = 'BEGIN:VCALENDAR\nVERSION:2.0\nPRODID:-//PIMUTILS.ORG//NONSGML khal / icalendar //EN\nBEGIN:VTIMEZONE\nTZID:IndianReun...nDTSTAMP:20140401T234817Z\nUID:abcde\nRECURRENCE-ID;TZID=Europe_Amsterdam:20140707T070000\nEND:VEVENT\nEND:VCALENDAR\n' random_uid = True, default_timezone = None def split_ics(ics: str, random_uid: bool=False, default_timezone=None): """split an ics string into several according to VEVENT's UIDs and sort the right VTIMEZONEs accordingly ignores all other ics components :param random_uid: assign random uids to all events :rtype list: """ cal = cal_from_ics(ics) tzs = {} events_grouped = defaultdict(list) for item in cal.walk(): # Since some events could have a Windows format timezone (e.g. 'New Zealand # Standard Time' for 'Pacific/Auckland' in Olson format), we convert any # Windows format timezones to Olson. if item.name == 'VTIMEZONE': > if item['TZID'] in icalendar.windows_to_olson.WINDOWS_TO_OLSON: E AttributeError: module 'icalendar' has no attribute 'windows_to_olson' khal/icalendar.py:59: AttributeError ____________________________ test_windows_timezone _____________________________ caplog = <_pytest.logging.LogCaptureFixture object at 0xf48ee288> def test_windows_timezone(caplog): """Test if a windows tz format works""" cal = _get_text("tz_windows_format") > split_ics(cal) tests/icalendar_test.py:105: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ics = 'BEGIN:VCALENDAR\nVERSION:2.0\nPRODID:-//PIMUTILS.ORG//NONSGML khal / icalendar //EN\nBEGIN:VTIMEZONE\nTZID:New Zealan...DTSTAMP;VALUE=DATE-TIME:20191105T094904Z\nUID:PERSOYPOYGVR55JMICVAFVDWWBIKPC9PTAG6SN4B2YT\nEND:VEVENT\nEND:VCALENDAR\n' random_uid = False, default_timezone = None def split_ics(ics: str, random_uid: bool=False, default_timezone=None): """split an ics string into several according to VEVENT's UIDs and sort the right VTIMEZONEs accordingly ignores all other ics components :param random_uid: assign random uids to all events :rtype list: """ cal = cal_from_ics(ics) tzs = {} events_grouped = defaultdict(list) for item in cal.walk(): # Since some events could have a Windows format timezone (e.g. 'New Zealand # Standard Time' for 'Pacific/Auckland' in Olson format), we convert any # Windows format timezones to Olson. if item.name == 'VTIMEZONE': > if item['TZID'] in icalendar.windows_to_olson.WINDOWS_TO_OLSON: E AttributeError: module 'icalendar' has no attribute 'windows_to_olson' khal/icalendar.py:59: AttributeError __________________________ TestCollection.test_insert __________________________ self = coll_vdirs = (, {"Dad's calendar": , 'private': }) def test_insert(self, coll_vdirs): """insert a localized event""" coll, vdirs = coll_vdirs > coll.insert( Event.fromString(_get_text('event_dt_simple'), calendar=cal1, locale=LOCALE_BERLIN), cal1) tests/khalendar_test.py:171: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ khal/khalendar/khalendar.py:224: in insert event.href, event.etag = self._storages[calendar].upload(event) khal/khalendar/vdir.py:210: in upload if not isinstance(item.raw, str): khal/khalendar/event.py:385: in raw timezone = create_timezone(tzinfo, self.start) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tz = zoneinfo.ZoneInfo(key='Europe/Berlin') first_date = datetime.datetime(2014, 4, 9, 7, 30) last_date = datetime.datetime(2014, 4, 10, 7, 30) def create_timezone( tz: pytz.BaseTzInfo, first_date: Optional[dt.datetime]=None, last_date: Optional[dt.datetime]=None ) -> icalendar.Timezone: """ create an icalendar vtimezone from a pytz.tzinfo object :param tz: the timezone :param first_date: the very first datetime that needs to be included in the transition times, typically the DTSTART value of the (first recurring) event :param last_date: the last datetime that needs to included, typically the end of the (very last) event (of a recursion set) :returns: timezone information we currently have a problem here: pytz.timezones only carry the absolute dates of time zone transitions, not their RRULEs. This will a) make for rather bloated VTIMEZONE components, especially for long recurring events, b) we'll need to specify for which time range this VTIMEZONE should be generated and c) will not be valid for recurring events that go into eternity. Possible Solutions: As this information is not provided by pytz at all, there is no easy solution, we'd really need to ship another version of the OLSON DB. """ if isinstance(tz, StaticTzInfo): return _create_timezone_static(tz) # TODO last_date = None, recurring to infinity first_date = dt.datetime.today() if not first_date else to_naive_utc(first_date) last_date = first_date + dt.timedelta(days=1) if not last_date else to_naive_utc(last_date) timezone = icalendar.Timezone() timezone.add('TZID', tz) dst = { one[2]: 'DST' in two.__repr__() > for one, two in iter(tz._tzinfos.items()) # type: ignore } E AttributeError: 'zoneinfo.ZoneInfo' object has no attribute '_tzinfos' khal/khalendar/event.py:903: AttributeError ___________________________ TestCollection.test_get ____________________________ self = coll_vdirs = (, {"Dad's calendar": , 'private': }) def test_get(self, coll_vdirs): """test getting an event by its href""" coll, vdirs = coll_vdirs event = Event.fromString( _get_text('event_dt_simple'), href='xyz.ics', calendar=cal1, locale=LOCALE_BERLIN, ) > coll.insert(event, cal1) tests/khalendar_test.py:224: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ khal/khalendar/khalendar.py:224: in insert event.href, event.etag = self._storages[calendar].upload(event) khal/khalendar/vdir.py:210: in upload if not isinstance(item.raw, str): khal/khalendar/event.py:385: in raw timezone = create_timezone(tzinfo, self.start) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tz = zoneinfo.ZoneInfo(key='Europe/Berlin') first_date = datetime.datetime(2014, 4, 9, 7, 30) last_date = datetime.datetime(2014, 4, 10, 7, 30) def create_timezone( tz: pytz.BaseTzInfo, first_date: Optional[dt.datetime]=None, last_date: Optional[dt.datetime]=None ) -> icalendar.Timezone: """ create an icalendar vtimezone from a pytz.tzinfo object :param tz: the timezone :param first_date: the very first datetime that needs to be included in the transition times, typically the DTSTART value of the (first recurring) event :param last_date: the last datetime that needs to included, typically the end of the (very last) event (of a recursion set) :returns: timezone information we currently have a problem here: pytz.timezones only carry the absolute dates of time zone transitions, not their RRULEs. This will a) make for rather bloated VTIMEZONE components, especially for long recurring events, b) we'll need to specify for which time range this VTIMEZONE should be generated and c) will not be valid for recurring events that go into eternity. Possible Solutions: As this information is not provided by pytz at all, there is no easy solution, we'd really need to ship another version of the OLSON DB. """ if isinstance(tz, StaticTzInfo): return _create_timezone_static(tz) # TODO last_date = None, recurring to infinity first_date = dt.datetime.today() if not first_date else to_naive_utc(first_date) last_date = first_date + dt.timedelta(days=1) if not last_date else to_naive_utc(last_date) timezone = icalendar.Timezone() timezone.add('TZID', tz) dst = { one[2]: 'DST' in two.__repr__() > for one, two in iter(tz._tzinfos.items()) # type: ignore } E AttributeError: 'zoneinfo.ZoneInfo' object has no attribute '_tzinfos' khal/khalendar/event.py:903: AttributeError __________________________ TestCollection.test_change __________________________ self = coll_vdirs = (, {"Dad's calendar": , 'private': }) def test_change(self, coll_vdirs): """moving an event from one calendar to another""" coll, vdirs = coll_vdirs event = Event.fromString(_get_text('event_dt_simple'), calendar=cal1, locale=LOCALE_BERLIN) > coll.insert(event, cal1) tests/khalendar_test.py:235: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ khal/khalendar/khalendar.py:224: in insert event.href, event.etag = self._storages[calendar].upload(event) khal/khalendar/vdir.py:210: in upload if not isinstance(item.raw, str): khal/khalendar/event.py:385: in raw timezone = create_timezone(tzinfo, self.start) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tz = zoneinfo.ZoneInfo(key='Europe/Berlin') first_date = datetime.datetime(2014, 4, 9, 7, 30) last_date = datetime.datetime(2014, 4, 10, 7, 30) def create_timezone( tz: pytz.BaseTzInfo, first_date: Optional[dt.datetime]=None, last_date: Optional[dt.datetime]=None ) -> icalendar.Timezone: """ create an icalendar vtimezone from a pytz.tzinfo object :param tz: the timezone :param first_date: the very first datetime that needs to be included in the transition times, typically the DTSTART value of the (first recurring) event :param last_date: the last datetime that needs to included, typically the end of the (very last) event (of a recursion set) :returns: timezone information we currently have a problem here: pytz.timezones only carry the absolute dates of time zone transitions, not their RRULEs. This will a) make for rather bloated VTIMEZONE components, especially for long recurring events, b) we'll need to specify for which time range this VTIMEZONE should be generated and c) will not be valid for recurring events that go into eternity. Possible Solutions: As this information is not provided by pytz at all, there is no easy solution, we'd really need to ship another version of the OLSON DB. """ if isinstance(tz, StaticTzInfo): return _create_timezone_static(tz) # TODO last_date = None, recurring to infinity first_date = dt.datetime.today() if not first_date else to_naive_utc(first_date) last_date = first_date + dt.timedelta(days=1) if not last_date else to_naive_utc(last_date) timezone = icalendar.Timezone() timezone.add('TZID', tz) dst = { one[2]: 'DST' in two.__repr__() > for one, two in iter(tz._tzinfos.items()) # type: ignore } E AttributeError: 'zoneinfo.ZoneInfo' object has no attribute '_tzinfos' khal/khalendar/event.py:903: AttributeError _______________________ TestCollection.test_update_event _______________________ self = coll_vdirs = (, {"Dad's calendar": , 'private': }) def test_update_event(self, coll_vdirs): """updating one event""" coll, vdirs = coll_vdirs event = Event.fromString( _get_text('event_dt_simple'), calendar=cal1, locale=LOCALE_BERLIN) > coll.insert(event, cal1) tests/khalendar_test.py:249: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ khal/khalendar/khalendar.py:224: in insert event.href, event.etag = self._storages[calendar].upload(event) khal/khalendar/vdir.py:210: in upload if not isinstance(item.raw, str): khal/khalendar/event.py:385: in raw timezone = create_timezone(tzinfo, self.start) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tz = zoneinfo.ZoneInfo(key='Europe/Berlin') first_date = datetime.datetime(2014, 4, 9, 7, 30) last_date = datetime.datetime(2014, 4, 10, 7, 30) def create_timezone( tz: pytz.BaseTzInfo, first_date: Optional[dt.datetime]=None, last_date: Optional[dt.datetime]=None ) -> icalendar.Timezone: """ create an icalendar vtimezone from a pytz.tzinfo object :param tz: the timezone :param first_date: the very first datetime that needs to be included in the transition times, typically the DTSTART value of the (first recurring) event :param last_date: the last datetime that needs to included, typically the end of the (very last) event (of a recursion set) :returns: timezone information we currently have a problem here: pytz.timezones only carry the absolute dates of time zone transitions, not their RRULEs. This will a) make for rather bloated VTIMEZONE components, especially for long recurring events, b) we'll need to specify for which time range this VTIMEZONE should be generated and c) will not be valid for recurring events that go into eternity. Possible Solutions: As this information is not provided by pytz at all, there is no easy solution, we'd really need to ship another version of the OLSON DB. """ if isinstance(tz, StaticTzInfo): return _create_timezone_static(tz) # TODO last_date = None, recurring to infinity first_date = dt.datetime.today() if not first_date else to_naive_utc(first_date) last_date = first_date + dt.timedelta(days=1) if not last_date else to_naive_utc(last_date) timezone = icalendar.Timezone() timezone.add('TZID', tz) dst = { one[2]: 'DST' in two.__repr__() > for one, two in iter(tz._tzinfos.items()) # type: ignore } E AttributeError: 'zoneinfo.ZoneInfo' object has no attribute '_tzinfos' khal/khalendar/event.py:903: AttributeError __________________________ TestCollection.test_search __________________________ self = coll_vdirs = (, {"Dad's calendar": , 'private': }) def test_search(self, coll_vdirs): coll, vdirs = coll_vdirs assert len(list(coll.search('Event'))) == 0 event = Event.fromString( _get_text('event_dt_simple'), calendar=cal1, locale=LOCALE_BERLIN) > coll.insert(event, cal1) tests/khalendar_test.py:289: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ khal/khalendar/khalendar.py:224: in insert event.href, event.etag = self._storages[calendar].upload(event) khal/khalendar/vdir.py:210: in upload if not isinstance(item.raw, str): khal/khalendar/event.py:385: in raw timezone = create_timezone(tzinfo, self.start) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tz = zoneinfo.ZoneInfo(key='Europe/Berlin') first_date = datetime.datetime(2014, 4, 9, 7, 30) last_date = datetime.datetime(2014, 4, 10, 7, 30) def create_timezone( tz: pytz.BaseTzInfo, first_date: Optional[dt.datetime]=None, last_date: Optional[dt.datetime]=None ) -> icalendar.Timezone: """ create an icalendar vtimezone from a pytz.tzinfo object :param tz: the timezone :param first_date: the very first datetime that needs to be included in the transition times, typically the DTSTART value of the (first recurring) event :param last_date: the last datetime that needs to included, typically the end of the (very last) event (of a recursion set) :returns: timezone information we currently have a problem here: pytz.timezones only carry the absolute dates of time zone transitions, not their RRULEs. This will a) make for rather bloated VTIMEZONE components, especially for long recurring events, b) we'll need to specify for which time range this VTIMEZONE should be generated and c) will not be valid for recurring events that go into eternity. Possible Solutions: As this information is not provided by pytz at all, there is no easy solution, we'd really need to ship another version of the OLSON DB. """ if isinstance(tz, StaticTzInfo): return _create_timezone_static(tz) # TODO last_date = None, recurring to infinity first_date = dt.datetime.today() if not first_date else to_naive_utc(first_date) last_date = first_date + dt.timedelta(days=1) if not last_date else to_naive_utc(last_date) timezone = icalendar.Timezone() timezone.add('TZID', tz) dst = { one[2]: 'DST' in two.__repr__() > for one, two in iter(tz._tzinfos.items()) # type: ignore } E AttributeError: 'zoneinfo.ZoneInfo' object has no attribute '_tzinfos' khal/khalendar/event.py:903: AttributeError ____________________ TestCollection.test_delete_two_events _____________________ self = coll_vdirs = (, {"Dad's calendar": , 'private': }) sleep_time = 0.011000000000000001 def test_delete_two_events(self, coll_vdirs, sleep_time): """testing if we can delete any of two events in two different calendars with the same filename""" coll, vdirs = coll_vdirs event1 = Event.fromString( _get_text('event_dt_simple'), calendar=cal1, locale=LOCALE_BERLIN) event2 = Event.fromString( _get_text('event_dt_simple'), calendar=cal2, locale=LOCALE_BERLIN) > coll.insert(event1, cal1) tests/khalendar_test.py:330: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ khal/khalendar/khalendar.py:224: in insert event.href, event.etag = self._storages[calendar].upload(event) khal/khalendar/vdir.py:210: in upload if not isinstance(item.raw, str): khal/khalendar/event.py:385: in raw timezone = create_timezone(tzinfo, self.start) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tz = zoneinfo.ZoneInfo(key='Europe/Berlin') first_date = datetime.datetime(2014, 4, 9, 7, 30) last_date = datetime.datetime(2014, 4, 10, 7, 30) def create_timezone( tz: pytz.BaseTzInfo, first_date: Optional[dt.datetime]=None, last_date: Optional[dt.datetime]=None ) -> icalendar.Timezone: """ create an icalendar vtimezone from a pytz.tzinfo object :param tz: the timezone :param first_date: the very first datetime that needs to be included in the transition times, typically the DTSTART value of the (first recurring) event :param last_date: the last datetime that needs to included, typically the end of the (very last) event (of a recursion set) :returns: timezone information we currently have a problem here: pytz.timezones only carry the absolute dates of time zone transitions, not their RRULEs. This will a) make for rather bloated VTIMEZONE components, especially for long recurring events, b) we'll need to specify for which time range this VTIMEZONE should be generated and c) will not be valid for recurring events that go into eternity. Possible Solutions: As this information is not provided by pytz at all, there is no easy solution, we'd really need to ship another version of the OLSON DB. """ if isinstance(tz, StaticTzInfo): return _create_timezone_static(tz) # TODO last_date = None, recurring to infinity first_date = dt.datetime.today() if not first_date else to_naive_utc(first_date) last_date = first_date + dt.timedelta(days=1) if not last_date else to_naive_utc(last_date) timezone = icalendar.Timezone() timezone.add('TZID', tz) dst = { one[2]: 'DST' in two.__repr__() > for one, two in iter(tz._tzinfos.items()) # type: ignore } E AttributeError: 'zoneinfo.ZoneInfo' object has no attribute '_tzinfos' khal/khalendar/event.py:903: AttributeError ______________________ TestCollection.test_delete_recuid _______________________ self = coll_vdirs = (, {"Dad's calendar": , 'private': }) def test_delete_recuid(self, coll_vdirs: CollVdirType): """Testing if we can delete a recuid (add it to exdate)""" coll, _ = coll_vdirs event_str = _get_text('event_rrule_recuid') event = Event.fromString(event_str, calendar=cal1, locale=LOCALE_BERLIN) > coll.insert(event, cal1) tests/khalendar_test.py:349: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ khal/khalendar/khalendar.py:224: in insert event.href, event.etag = self._storages[calendar].upload(event) khal/khalendar/vdir.py:210: in upload if not isinstance(item.raw, str): khal/khalendar/event.py:385: in raw timezone = create_timezone(tzinfo, self.start) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tz = zoneinfo.ZoneInfo(key='Europe/Berlin') first_date = datetime.datetime(2014, 6, 30, 5, 0) last_date = datetime.datetime(2014, 7, 1, 5, 0) def create_timezone( tz: pytz.BaseTzInfo, first_date: Optional[dt.datetime]=None, last_date: Optional[dt.datetime]=None ) -> icalendar.Timezone: """ create an icalendar vtimezone from a pytz.tzinfo object :param tz: the timezone :param first_date: the very first datetime that needs to be included in the transition times, typically the DTSTART value of the (first recurring) event :param last_date: the last datetime that needs to included, typically the end of the (very last) event (of a recursion set) :returns: timezone information we currently have a problem here: pytz.timezones only carry the absolute dates of time zone transitions, not their RRULEs. This will a) make for rather bloated VTIMEZONE components, especially for long recurring events, b) we'll need to specify for which time range this VTIMEZONE should be generated and c) will not be valid for recurring events that go into eternity. Possible Solutions: As this information is not provided by pytz at all, there is no easy solution, we'd really need to ship another version of the OLSON DB. """ if isinstance(tz, StaticTzInfo): return _create_timezone_static(tz) # TODO last_date = None, recurring to infinity first_date = dt.datetime.today() if not first_date else to_naive_utc(first_date) last_date = first_date + dt.timedelta(days=1) if not last_date else to_naive_utc(last_date) timezone = icalendar.Timezone() timezone.add('TZID', tz) dst = { one[2]: 'DST' in two.__repr__() > for one, two in iter(tz._tzinfos.items()) # type: ignore } E AttributeError: 'zoneinfo.ZoneInfo' object has no attribute '_tzinfos' khal/khalendar/event.py:903: AttributeError ____________________ TestCollection.test_invalid_timezones _____________________ self = coll_vdirs = (, {"Dad's calendar": , 'private': }) def test_invalid_timezones(self, coll_vdirs): """testing if we can delete any of two events in two different calendars with the same filename""" coll, vdirs = coll_vdirs event = Event.fromString( _get_text('invalid_tzoffset'), calendar=cal1, locale=LOCALE_BERLIN) > coll.insert(event, cal1) tests/khalendar_test.py:374: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ khal/khalendar/khalendar.py:224: in insert event.href, event.etag = self._storages[calendar].upload(event) khal/khalendar/vdir.py:210: in upload if not isinstance(item.raw, str): khal/khalendar/event.py:385: in raw timezone = create_timezone(tzinfo, self.start) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tz = zoneinfo.ZoneInfo(key='Europe/Berlin') first_date = datetime.datetime(2012, 12, 2, 7, 0) last_date = datetime.datetime(2012, 12, 3, 7, 0) def create_timezone( tz: pytz.BaseTzInfo, first_date: Optional[dt.datetime]=None, last_date: Optional[dt.datetime]=None ) -> icalendar.Timezone: """ create an icalendar vtimezone from a pytz.tzinfo object :param tz: the timezone :param first_date: the very first datetime that needs to be included in the transition times, typically the DTSTART value of the (first recurring) event :param last_date: the last datetime that needs to included, typically the end of the (very last) event (of a recursion set) :returns: timezone information we currently have a problem here: pytz.timezones only carry the absolute dates of time zone transitions, not their RRULEs. This will a) make for rather bloated VTIMEZONE components, especially for long recurring events, b) we'll need to specify for which time range this VTIMEZONE should be generated and c) will not be valid for recurring events that go into eternity. Possible Solutions: As this information is not provided by pytz at all, there is no easy solution, we'd really need to ship another version of the OLSON DB. """ if isinstance(tz, StaticTzInfo): return _create_timezone_static(tz) # TODO last_date = None, recurring to infinity first_date = dt.datetime.today() if not first_date else to_naive_utc(first_date) last_date = first_date + dt.timedelta(days=1) if not last_date else to_naive_utc(last_date) timezone = icalendar.Timezone() timezone.add('TZID', tz) dst = { one[2]: 'DST' in two.__repr__() > for one, two in iter(tz._tzinfos.items()) # type: ignore } E AttributeError: 'zoneinfo.ZoneInfo' object has no attribute '_tzinfos' khal/khalendar/event.py:903: AttributeError ----------------------------- Captured stderr call ----------------------------- warning: Invalid timezone offset encountered, timezone information may be wrong: Offset must be less than 24 hours, was +5328 __________________________ TestExpand.test_expand_dt ___________________________ self = def test_expand_dt(self): vevent = _get_vevent(event_dt) > dtstart = icalendar_helpers.expand(vevent, berlin) tests/khalendar_utils_test.py:316: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ khal/icalendar.py:315: in expand dtstartl = set(rrule) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ date = datetime.datetime(2013, 3, 1, 14, 0) def sanitize_datetime(date): if allday and isinstance(date, dt.datetime): date = date.date() if events_tz is not None: > date = events_tz.localize(date) E AttributeError: 'zoneinfo.ZoneInfo' object has no attribute 'localize' khal/icalendar.py:256: AttributeError __________________________ TestExpand.test_expand_dtb __________________________ self = def test_expand_dtb(self): vevent = _get_vevent(event_dtb) > dtstart = icalendar_helpers.expand(vevent, berlin) tests/khalendar_utils_test.py:324: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ khal/icalendar.py:315: in expand dtstartl = set(rrule) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ date = datetime.datetime(2013, 3, 1, 14, 0) def sanitize_datetime(date): if allday and isinstance(date, dt.datetime): date = date.date() if events_tz is not None: > date = events_tz.localize(date) E AttributeError: '_tzicalvtz' object has no attribute 'localize' khal/icalendar.py:256: AttributeError _________________________ TestExpand.test_expand_dttz __________________________ self = def test_expand_dttz(self): vevent = _get_vevent(event_dttz) > dtstart = icalendar_helpers.expand(vevent, berlin) tests/khalendar_utils_test.py:332: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ khal/icalendar.py:315: in expand dtstartl = set(rrule) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ date = datetime.datetime(2013, 3, 1, 14, 0) def sanitize_datetime(date): if allday and isinstance(date, dt.datetime): date = date.date() if events_tz is not None: > date = events_tz.localize(date) E AttributeError: 'zoneinfo.ZoneInfo' object has no attribute 'localize' khal/icalendar.py:256: AttributeError ____________________ TestExpand.test_expand_invalid_exdate _____________________ self = def test_expand_invalid_exdate(self): """testing if we can expand an event with EXDATEs that do not much its RRULE""" vevent = _get_vevent_file('event_invalid_exdate') > dtstartl = icalendar_helpers.expand(vevent, berlin) tests/khalendar_utils_test.py:363: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ khal/icalendar.py:315: in expand dtstartl = set(rrule) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ date = datetime.datetime(2011, 11, 12, 15, 50) def sanitize_datetime(date): if allday and isinstance(date, dt.datetime): date = date.date() if events_tz is not None: > date = events_tz.localize(date) E AttributeError: 'zoneinfo.ZoneInfo' object has no attribute 'localize' khal/icalendar.py:256: AttributeError ____________________ TestExpandNoRR.test_expand_dtr_exdatez ____________________ self = def test_expand_dtr_exdatez(self): """a recurring event with an EXDATE in Zulu time while DTSTART is localized""" vevent = _get_vevent_file('event_dtr_exdatez') > dtstart = icalendar_helpers.expand(vevent, berlin) tests/khalendar_utils_test.py:442: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ khal/icalendar.py:315: in expand dtstartl = set(rrule) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ date = datetime.datetime(2014, 6, 30, 7, 30) def sanitize_datetime(date): if allday and isinstance(date, dt.datetime): date = date.date() if events_tz is not None: > date = events_tz.localize(date) E AttributeError: 'zoneinfo.ZoneInfo' object has no attribute 'localize' khal/icalendar.py:256: AttributeError _________________________ TestSpecial.test_until_notz __________________________ self = def test_until_notz(self): vevent = _get_vevent(vevent_until_notz) > dtstart = icalendar_helpers.expand(vevent, berlin) tests/khalendar_utils_test.py:593: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ khal/icalendar.py:315: in expand dtstartl = set(rrule) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ date = datetime.datetime(2014, 2, 3, 7, 0) def sanitize_datetime(date): if allday and isinstance(date, dt.datetime): date = date.date() if events_tz is not None: > date = events_tz.localize(date) E AttributeError: 'zoneinfo.ZoneInfo' object has no attribute 'localize' khal/icalendar.py:256: AttributeError _______________________ TestSpecial.test_event_exdate_dt _______________________ self = def test_event_exdate_dt(self): """recurring event, one date excluded via EXCLUDE""" vevent = _get_vevent(event_exdate_dt) > dtstart = icalendar_helpers.expand(vevent, berlin) tests/khalendar_utils_test.py:625: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ khal/icalendar.py:315: in expand dtstartl = set(rrule) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ date = datetime.datetime(2014, 7, 2, 19, 0) def sanitize_datetime(date): if allday and isinstance(date, dt.datetime): date = date.date() if events_tz is not None: > date = events_tz.localize(date) E AttributeError: 'zoneinfo.ZoneInfo' object has no attribute 'localize' khal/icalendar.py:256: AttributeError ______________________ TestSpecial.test_event_exdates_dt _______________________ self = def test_event_exdates_dt(self): """recurring event, two dates excluded via EXCLUDE""" vevent = _get_vevent(event_exdates_dt) > dtstart = icalendar_helpers.expand(vevent, berlin) tests/khalendar_utils_test.py:635: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ khal/icalendar.py:315: in expand dtstartl = set(rrule) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ date = datetime.datetime(2014, 7, 2, 19, 0) def sanitize_datetime(date): if allday and isinstance(date, dt.datetime): date = date.date() if events_tz is not None: > date = events_tz.localize(date) E AttributeError: 'zoneinfo.ZoneInfo' object has no attribute 'localize' khal/icalendar.py:256: AttributeError ______________________ TestSpecial.test_event_exdatesl_dt ______________________ self = def test_event_exdatesl_dt(self): """recurring event, three dates exclude via two EXCLUDEs""" vevent = _get_vevent(event_exdatesl_dt) > dtstart = icalendar_helpers.expand(vevent, berlin) tests/khalendar_utils_test.py:645: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ khal/icalendar.py:315: in expand dtstartl = set(rrule) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ date = datetime.datetime(2014, 7, 2, 19, 0) def sanitize_datetime(date): if allday and isinstance(date, dt.datetime): date = date.date() if events_tz is not None: > date = events_tz.localize(date) E AttributeError: 'zoneinfo.ZoneInfo' object has no attribute 'localize' khal/icalendar.py:256: AttributeError ____________________ TestSpecial.test_event_exdates_remove _____________________ self = def test_event_exdates_remove(self): """check if we can remove one more instance""" vevent = _get_vevent(event_exdatesl_dt) > dtstart = icalendar_helpers.expand(vevent, berlin) tests/khalendar_utils_test.py:655: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ khal/icalendar.py:315: in expand dtstartl = set(rrule) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ date = datetime.datetime(2014, 7, 2, 19, 0) def sanitize_datetime(date): if allday and isinstance(date, dt.datetime): date = date.date() if events_tz is not None: > date = events_tz.localize(date) E AttributeError: 'zoneinfo.ZoneInfo' object has no attribute 'localize' khal/icalendar.py:256: AttributeError ________________ TestSpecial.test_event_dt_rrule_invalid_until2 ________________ self = def test_event_dt_rrule_invalid_until2(self): """same as above, but now dtstart is of type date and until is datetime """ vevent = _get_vevent(_get_text('event_dt_rrule_invalid_until2')) > dtstart = icalendar_helpers.expand(vevent, berlin) tests/khalendar_utils_test.py:681: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ khal/icalendar.py:315: in expand dtstartl = set(rrule) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ date = datetime.datetime(2014, 4, 9, 9, 30) def sanitize_datetime(date): if allday and isinstance(date, dt.datetime): date = date.date() if events_tz is not None: > date = events_tz.localize(date) E AttributeError: 'zoneinfo.ZoneInfo' object has no attribute 'localize' khal/icalendar.py:256: AttributeError _________________________ TestRDate.test_simple_rdate __________________________ self = def test_simple_rdate(self): vevent = _get_vevent(simple_rdate) > dtstart = icalendar_helpers.expand(vevent, berlin) tests/khalendar_utils_test.py:727: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ khal/icalendar.py:335: in expand dtstartl.update(get_dates(vevent, 'RDATE') or ()) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ date = datetime.datetime(2013, 12, 13, 19, 0) def sanitize_datetime(date): if allday and isinstance(date, dt.datetime): date = date.date() if events_tz is not None: > date = events_tz.localize(date) E AttributeError: 'zoneinfo.ZoneInfo' object has no attribute 'localize' khal/icalendar.py:256: AttributeError ________________________ TestRDate.test_rrule_and_rdate ________________________ self = def test_rrule_and_rdate(self): vevent = _get_vevent(rrule_and_rdate) > dtstart = icalendar_helpers.expand(vevent, berlin) tests/khalendar_utils_test.py:732: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ khal/icalendar.py:315: in expand dtstartl = set(rrule) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ date = datetime.datetime(2013, 3, 1, 14, 0) def sanitize_datetime(date): if allday and isinstance(date, dt.datetime): date = date.date() if events_tz is not None: > date = events_tz.localize(date) E AttributeError: 'zoneinfo.ZoneInfo' object has no attribute 'localize' khal/icalendar.py:256: AttributeError =============================== warnings summary =============================== tests/backend_test.py:5 /home/buildozer/aports/community/khal/src/khal-0.11.3/tests/backend_test.py:5: DeprecationWarning: pkg_resources is deprecated as an API. See https://setuptools.pypa.io/en/latest/pkg_resources.html import pkg_resources ../../../../../../../usr/lib/python3.12/site-packages/pkg_resources/__init__.py:3117 ../../../../../../../usr/lib/python3.12/site-packages/pkg_resources/__init__.py:3117 /usr/lib/python3.12/site-packages/pkg_resources/__init__.py:3117: DeprecationWarning: Deprecated call to `pkg_resources.declare_namespace('sphinxcontrib')`. Implementing implicit namespace packages (as specified in PEP 420) is preferred to `pkg_resources.declare_namespace`. See https://setuptools.pypa.io/en/latest/references/keywords.html#keyword-namespace-packages declare_namespace(pkg) tests/backend_test.py::test_event_rrule_recurrence_id /usr/lib/python3.12/inspect.py:1007: DeprecationWarning: urwid.lcd_display is moved to urwid.display.lcd if ismodule(module) and hasattr(module, '__file__'): tests/backend_test.py::test_event_rrule_recurrence_id /usr/lib/python3.12/inspect.py:1008: DeprecationWarning: urwid.lcd_display is moved to urwid.display.lcd f = module.__file__ tests/backend_test.py::test_event_rrule_recurrence_id /usr/lib/python3.12/inspect.py:914: DeprecationWarning: urwid.lcd_display is moved to urwid.display.lcd if getattr(object, '__file__', None): tests/backend_test.py::test_event_rrule_recurrence_id /usr/lib/python3.12/inspect.py:915: DeprecationWarning: urwid.lcd_display is moved to urwid.display.lcd return object.__file__ tests/backend_test.py::test_event_rrule_recurrence_id /usr/lib/python3.12/inspect.py:1007: DeprecationWarning: urwid.html_fragment is moved to urwid.display.html_fragment if ismodule(module) and hasattr(module, '__file__'): tests/backend_test.py::test_event_rrule_recurrence_id /usr/lib/python3.12/inspect.py:1008: DeprecationWarning: urwid.html_fragment is moved to urwid.display.html_fragment f = module.__file__ tests/backend_test.py::test_event_rrule_recurrence_id /usr/lib/python3.12/inspect.py:914: DeprecationWarning: urwid.html_fragment is moved to urwid.display.html_fragment if getattr(object, '__file__', None): tests/backend_test.py::test_event_rrule_recurrence_id /usr/lib/python3.12/inspect.py:915: DeprecationWarning: urwid.html_fragment is moved to urwid.display.html_fragment return object.__file__ tests/backend_test.py::test_event_rrule_recurrence_id /usr/lib/python3.12/inspect.py:1007: DeprecationWarning: urwid.web_display is moved to urwid.display.web if ismodule(module) and hasattr(module, '__file__'): tests/backend_test.py::test_event_rrule_recurrence_id /usr/lib/python3.12/inspect.py:1008: DeprecationWarning: urwid.web_display is moved to urwid.display.web f = module.__file__ tests/backend_test.py::test_event_rrule_recurrence_id /usr/lib/python3.12/inspect.py:914: DeprecationWarning: urwid.web_display is moved to urwid.display.web if getattr(object, '__file__', None): tests/backend_test.py::test_event_rrule_recurrence_id /usr/lib/python3.12/inspect.py:915: DeprecationWarning: urwid.web_display is moved to urwid.display.web return object.__file__ tests/backend_test.py::test_event_rrule_recurrence_id /usr/lib/python3.12/inspect.py:1007: DeprecationWarning: urwid.monitored_list is moved to urwid.widget.monitored_list if ismodule(module) and hasattr(module, '__file__'): tests/backend_test.py::test_event_rrule_recurrence_id /usr/lib/python3.12/inspect.py:1008: DeprecationWarning: urwid.monitored_list is moved to urwid.widget.monitored_list f = module.__file__ tests/backend_test.py::test_event_rrule_recurrence_id /usr/lib/python3.12/inspect.py:914: DeprecationWarning: urwid.monitored_list is moved to urwid.widget.monitored_list if getattr(object, '__file__', None): tests/backend_test.py::test_event_rrule_recurrence_id /usr/lib/python3.12/inspect.py:915: DeprecationWarning: urwid.monitored_list is moved to urwid.widget.monitored_list return object.__file__ tests/backend_test.py::test_event_rrule_recurrence_id /usr/lib/python3.12/inspect.py:1007: DeprecationWarning: urwid.listbox is moved to urwid.widget.listbox if ismodule(module) and hasattr(module, '__file__'): tests/backend_test.py::test_event_rrule_recurrence_id /usr/lib/python3.12/inspect.py:1008: DeprecationWarning: urwid.listbox is moved to urwid.widget.listbox f = module.__file__ tests/backend_test.py::test_event_rrule_recurrence_id /usr/lib/python3.12/inspect.py:914: DeprecationWarning: urwid.listbox is moved to urwid.widget.listbox if getattr(object, '__file__', None): tests/backend_test.py::test_event_rrule_recurrence_id /usr/lib/python3.12/inspect.py:915: DeprecationWarning: urwid.listbox is moved to urwid.widget.listbox return object.__file__ tests/backend_test.py::test_event_rrule_recurrence_id /usr/lib/python3.12/inspect.py:1007: DeprecationWarning: urwid.treetools is moved to urwid.widget.treetools if ismodule(module) and hasattr(module, '__file__'): tests/backend_test.py::test_event_rrule_recurrence_id /usr/lib/python3.12/inspect.py:1008: DeprecationWarning: urwid.treetools is moved to urwid.widget.treetools f = module.__file__ tests/backend_test.py::test_event_rrule_recurrence_id /usr/lib/python3.12/inspect.py:914: DeprecationWarning: urwid.treetools is moved to urwid.widget.treetools if getattr(object, '__file__', None): tests/backend_test.py::test_event_rrule_recurrence_id /usr/lib/python3.12/inspect.py:915: DeprecationWarning: urwid.treetools is moved to urwid.widget.treetools return object.__file__ tests/backend_test.py: 8 warnings tests/cli_test.py: 1 warning tests/khalendar_test.py: 3 warnings /home/buildozer/aports/community/khal/src/khal-0.11.3/khal/khalendar/backend.py:517: DeprecationWarning: datetime.datetime.utcfromtimestamp() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.fromtimestamp(timestamp, datetime.UTC). start = pytz.UTC.localize(dt.datetime.utcfromtimestamp(start_timestamp)) tests/backend_test.py: 8 warnings tests/cli_test.py: 1 warning tests/khalendar_test.py: 3 warnings /home/buildozer/aports/community/khal/src/khal-0.11.3/khal/khalendar/backend.py:518: DeprecationWarning: datetime.datetime.utcfromtimestamp() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.fromtimestamp(timestamp, datetime.UTC). end = pytz.UTC.localize(dt.datetime.utcfromtimestamp(end_timestamp)) tests/backend_test.py: 34 warnings tests/cli_test.py: 2 warnings tests/controller_test.py: 3 warnings tests/khalendar_test.py: 15 warnings /home/buildozer/aports/community/khal/src/khal-0.11.3/khal/khalendar/backend.py:563: DeprecationWarning: datetime.datetime.utcfromtimestamp() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.fromtimestamp(timestamp, datetime.UTC). start_dt = dt.datetime.utcfromtimestamp(start_s) tests/backend_test.py: 34 warnings tests/cli_test.py: 2 warnings tests/controller_test.py: 3 warnings tests/khalendar_test.py: 15 warnings /home/buildozer/aports/community/khal/src/khal-0.11.3/khal/khalendar/backend.py:564: DeprecationWarning: datetime.datetime.utcfromtimestamp() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.fromtimestamp(timestamp, datetime.UTC). end_dt = dt.datetime.utcfromtimestamp(end_s) tests/backend_test.py::test_event_recuid_rrule_no_master tests/backend_test.py::test_event_recuid_rrule_no_master tests/cli_test.py::test_import_proper tests/cli_test.py::test_import_invalid_choice_and_prefix tests/cli_test.py::test_edit tests/khalendar_test.py::TestCollection::test_search_recurrence_id_only tests/khalendar_test.py::TestCollection::test_search_recurrence_id_only_multi tests/khalendar_test.py::TestCollection::test_search_recurrence_id_only_multi /home/buildozer/aports/community/khal/src/khal-0.11.3/khal/khalendar/backend.py:614: DeprecationWarning: datetime.datetime.utcfromtimestamp() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.fromtimestamp(timestamp, datetime.UTC). start = dt.datetime.utcfromtimestamp(start) tests/backend_test.py::test_event_recuid_rrule_no_master tests/backend_test.py::test_event_recuid_rrule_no_master tests/cli_test.py::test_import_proper tests/cli_test.py::test_import_invalid_choice_and_prefix tests/cli_test.py::test_edit tests/khalendar_test.py::TestCollection::test_search_recurrence_id_only tests/khalendar_test.py::TestCollection::test_search_recurrence_id_only_multi tests/khalendar_test.py::TestCollection::test_search_recurrence_id_only_multi /home/buildozer/aports/community/khal/src/khal-0.11.3/khal/khalendar/backend.py:615: DeprecationWarning: datetime.datetime.utcfromtimestamp() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.fromtimestamp(timestamp, datetime.UTC). end = dt.datetime.utcfromtimestamp(end) tests/cli_test.py::test_edit /home/buildozer/aports/community/khal/src/khal-0.11.3/khal/khalendar/backend.py:597: DeprecationWarning: datetime.datetime.utcfromtimestamp() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.fromtimestamp(timestamp, datetime.UTC). start = pytz.UTC.localize(dt.datetime.utcfromtimestamp(start)) tests/cli_test.py::test_edit /home/buildozer/aports/community/khal/src/khal-0.11.3/khal/khalendar/backend.py:598: DeprecationWarning: datetime.datetime.utcfromtimestamp() is deprecated and scheduled for removal in a future version. Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.fromtimestamp(timestamp, datetime.UTC). end = pytz.UTC.localize(dt.datetime.utcfromtimestamp(end)) tests/cli_test.py::test_list_now /usr/lib/python3.12/site-packages/tzlocal/unix.py:193: UserWarning: Can not find any timezone configuration, defaulting to UTC. warnings.warn("Can not find any timezone configuration, defaulting to UTC.") tests/controller_test.py::TestImport::test_mix_datetime_types tests/controller_test.py::TestImport::test_mix_datetime_types /home/buildozer/aports/community/khal/src/khal-0.11.3/khal/icalendar.py:81: DeprecationWarning: The 'warn' method is deprecated, use 'warning' instead logger.warn(f'Error when trying to import the event {uid}') -- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html =========================== short test summary info ============================ FAILED tests/backend_test.py::test_event_rrule_recurrence_id - AttributeError... FAILED tests/backend_test.py::test_event_rrule_recurrence_id_reverse - Attrib... FAILED tests/backend_test.py::test_event_rrule_recurrence_id_update_with_exclude FAILED tests/backend_test.py::test_event_delete - AttributeError: 'zoneinfo.Z... FAILED tests/backend_test.py::test_this_and_prior - AttributeError: 'zoneinfo... FAILED tests/backend_test.py::test_event_rrule_this_and_future - AttributeErr... FAILED tests/backend_test.py::test_event_rrule_this_and_future_multi_day_shift FAILED tests/backend_test.py::test_two_calendars_same_uid - AttributeError: '... FAILED tests/cli_test.py::test_simple - assert not AttributeError("'zoneinfo.... FAILED tests/cli_test.py::test_simple_color - assert not AttributeError("'zon... FAILED tests/cli_test.py::test_days - assert not AttributeError("'zoneinfo.Zo... FAILED tests/cli_test.py::test_notstarted - assert not AttributeError("'zonei... FAILED tests/cli_test.py::test_invalid_calendar - assert not AttributeError("... FAILED tests/cli_test.py::test_list - AssertionError: assert False FAILED tests/cli_test.py::test_search - AssertionError: assert False FAILED tests/cli_test.py::test_import_proper_invalid_timezone - assert not Sy... FAILED tests/cli_test.py::test_edit - assert not AttributeError("'zoneinfo.Zo... FAILED tests/cli_test.py::test_new_interactive - assert not AttributeError("'... FAILED tests/cli_test.py::test_new_interactive_extensive - assert not Attribu... FAILED tests/cli_test.py::test_issue_1056 - assert not AttributeError("'zonei... FAILED tests/controller_test.py::TestImport::test_import - AttributeError: 'z... FAILED tests/controller_test.py::TestImport::test_mix_datetime_types - khal.e... FAILED tests/event_test.py::test_raw_dt - AttributeError: 'zoneinfo.ZoneInfo'... FAILED tests/event_test.py::test_update_simple - AttributeError: 'zoneinfo.Zo... FAILED tests/event_test.py::test_add_url - AttributeError: 'zoneinfo.ZoneInfo... FAILED tests/event_test.py::test_do_not_save_empty_location - AttributeError:... FAILED tests/event_test.py::test_do_not_save_empty_description - AttributeErr... FAILED tests/event_test.py::test_do_not_save_empty_url - AttributeError: 'zon... FAILED tests/event_test.py::test_remove_existing_location_if_set_to_empty - A... FAILED tests/event_test.py::test_remove_existing_description_if_set_to_empty FAILED tests/event_test.py::test_remove_existing_url_if_set_to_empty - Attrib... FAILED tests/event_test.py::test_update_remove_categories - AttributeError: '... FAILED tests/event_test.py::test_transform_event - AttributeError: 'zoneinfo.... FAILED tests/event_test.py::test_dt_two_tz - AttributeError: 'zoneinfo.ZoneIn... FAILED tests/event_test.py::test_event_no_dst - AttributeError: 'zoneinfo.Zon... FAILED tests/event_test.py::test_event_raw_UTC - AttributeError: 'zoneinfo.Zo... FAILED tests/event_test.py::test_multi_uid - AttributeError: 'zoneinfo.ZoneIn... FAILED tests/event_test.py::test_remove_instance_from_recuid - AttributeError... FAILED tests/icalendar_test.py::test_split_ics - AttributeError: module 'ical... FAILED tests/icalendar_test.py::test_split_ics_random_uid - AttributeError: m... FAILED tests/icalendar_test.py::test_windows_timezone - AttributeError: modul... FAILED tests/khalendar_test.py::TestCollection::test_insert - AttributeError:... FAILED tests/khalendar_test.py::TestCollection::test_get - AttributeError: 'z... FAILED tests/khalendar_test.py::TestCollection::test_change - AttributeError:... FAILED tests/khalendar_test.py::TestCollection::test_update_event - Attribute... FAILED tests/khalendar_test.py::TestCollection::test_search - AttributeError:... FAILED tests/khalendar_test.py::TestCollection::test_delete_two_events - Attr... FAILED tests/khalendar_test.py::TestCollection::test_delete_recuid - Attribut... FAILED tests/khalendar_test.py::TestCollection::test_invalid_timezones - Attr... FAILED tests/khalendar_utils_test.py::TestExpand::test_expand_dt - AttributeE... FAILED tests/khalendar_utils_test.py::TestExpand::test_expand_dtb - Attribute... FAILED tests/khalendar_utils_test.py::TestExpand::test_expand_dttz - Attribut... FAILED tests/khalendar_utils_test.py::TestExpand::test_expand_invalid_exdate FAILED tests/khalendar_utils_test.py::TestExpandNoRR::test_expand_dtr_exdatez FAILED tests/khalendar_utils_test.py::TestSpecial::test_until_notz - Attribut... FAILED tests/khalendar_utils_test.py::TestSpecial::test_event_exdate_dt - Att... FAILED tests/khalendar_utils_test.py::TestSpecial::test_event_exdates_dt - At... FAILED tests/khalendar_utils_test.py::TestSpecial::test_event_exdatesl_dt - A... FAILED tests/khalendar_utils_test.py::TestSpecial::test_event_exdates_remove FAILED tests/khalendar_utils_test.py::TestSpecial::test_event_dt_rrule_invalid_until2 FAILED tests/khalendar_utils_test.py::TestRDate::test_simple_rdate - Attribut... FAILED tests/khalendar_utils_test.py::TestRDate::test_rrule_and_rdate - Attri... = 62 failed, 246 passed, 4 deselected, 2 xfailed, 1 xpassed, 180 warnings in 7.76s = /usr/lib/python3.12/site-packages/_pytest/pathlib.py:91: PytestWarning: (rm_rf) error removing /tmp/pytest-of-buildozer/garbage-e762629e-e75f-4da8-a486-2cda1c4c82b5/popen-gw57/test_discovery_via_path_in_non0 : [Errno 39] Directory not empty: '/tmp/pytest-of-buildozer/garbage-e762629e-e75f-4da8-a486-2cda1c4c82b5/popen-gw57/test_discovery_via_path_in_non0' warnings.warn( /usr/lib/python3.12/site-packages/_pytest/pathlib.py:91: PytestWarning: (rm_rf) error removing /tmp/pytest-of-buildozer/garbage-e762629e-e75f-4da8-a486-2cda1c4c82b5/popen-gw57 : [Errno 39] Directory not empty: '/tmp/pytest-of-buildozer/garbage-e762629e-e75f-4da8-a486-2cda1c4c82b5/popen-gw57' warnings.warn( /usr/lib/python3.12/site-packages/_pytest/pathlib.py:91: PytestWarning: (rm_rf) error removing /tmp/pytest-of-buildozer/garbage-e762629e-e75f-4da8-a486-2cda1c4c82b5 : [Errno 39] Directory not empty: '/tmp/pytest-of-buildozer/garbage-e762629e-e75f-4da8-a486-2cda1c4c82b5' warnings.warn( >>> ERROR: khal: check failed >>> khal: Uninstalling dependencies... (1/138) Purging .makedepends-khal (20241106.091605) (2/138) Purging py3-configobj-pyc (5.0.9-r0) (3/138) Purging py3-configobj (5.0.9-r0) (4/138) Purging py3-icalendar-pyc (6.0.1-r0) (5/138) Purging py3-icalendar (6.0.1-r0) (6/138) Purging tzdata (2024b-r1) (7/138) Purging py3-tzlocal-pyc (5.2-r1) (8/138) Purging py3-tzlocal (5.2-r1) (9/138) Purging py3-tzdata-pyc (2024.2-r0) (10/138) Purging py3-tzdata (2024.2-r0) (11/138) Purging py3-urwid-pyc (2.6.13-r0) (12/138) Purging py3-urwid (2.6.13-r0) (13/138) Purging py3-wcwidth-pyc (0.2.13-r1) (14/138) Purging py3-wcwidth (0.2.13-r1) (15/138) Purging py3-xdg-pyc (0.28-r3) (16/138) Purging py3-xdg (0.28-r3) (17/138) Purging py3-gpep517-pyc (16-r0) (18/138) Purging py3-gpep517 (16-r0) (19/138) Purging py3-installer-pyc (0.7.0-r2) (20/138) Purging py3-installer (0.7.0-r2) (21/138) Purging py3-wheel-pyc (0.43.0-r0) (22/138) Purging py3-wheel (0.43.0-r0) (23/138) Purging py3-setuptools_scm-pyc (8.1.0-r0) (24/138) Purging py3-setuptools_scm (8.1.0-r0) (25/138) Purging py3-sphinxcontrib-newsfeed-pyc (0.1.4-r5) (26/138) Purging py3-sphinxcontrib-newsfeed (0.1.4-r5) (27/138) Purging py3-sphinx-pyc (8.1.3-r0) (28/138) Purging py3-sphinx (8.1.3-r0) (29/138) Purging py3-babel-pyc (2.14.0-r2) (30/138) Purging py3-babel (2.14.0-r2) (31/138) Purging py3-tz-pyc (2024.2-r0) (32/138) Purging py3-tz (2024.2-r0) (33/138) Purging py3-setuptools-pyc (70.3.0-r0) (34/138) Purging py3-setuptools (70.3.0-r0) (35/138) Purging py3-docutils-pyc (0.21.2-r0) (36/138) Purging py3-docutils (0.21.2-r0) (37/138) Purging py3-imagesize-pyc (1.4.1-r4) (38/138) Purging py3-imagesize (1.4.1-r4) (39/138) Purging py3-jinja2-pyc (3.1.4-r0) (40/138) Purging py3-jinja2 (3.1.4-r0) (41/138) Purging py3-markupsafe-pyc (3.0.2-r0) (42/138) Purging py3-markupsafe (3.0.2-r0) (43/138) Purging py3-pygments-pyc (2.18.0-r0) (44/138) Purging py3-pygments (2.18.0-r0) (45/138) Purging py3-snowballstemmer-pyc (2.2.0-r5) (46/138) Purging py3-snowballstemmer (2.2.0-r5) (47/138) Purging py3-alabaster-pyc (1.0.0-r0) (48/138) Purging py3-alabaster (1.0.0-r0) (49/138) Purging py3-sphinxcontrib-applehelp-pyc (1.0.4-r3) (50/138) Purging py3-sphinxcontrib-applehelp (1.0.4-r3) (51/138) Purging py3-sphinxcontrib-devhelp-pyc (1.0.5-r2) (52/138) Purging py3-sphinxcontrib-devhelp (1.0.5-r2) (53/138) Purging py3-sphinxcontrib-htmlhelp-pyc (2.0.1-r3) (54/138) Purging py3-sphinxcontrib-htmlhelp (2.0.1-r3) (55/138) Purging py3-sphinxcontrib-jsmath-pyc (1.0.1-r8) (56/138) Purging py3-sphinxcontrib-jsmath (1.0.1-r8) (57/138) Purging py3-sphinxcontrib-serializinghtml-pyc (1.1.9-r2) (58/138) Purging py3-sphinxcontrib-serializinghtml (1.1.9-r2) (59/138) Purging py3-sphinxcontrib-qthelp-pyc (1.0.6-r2) (60/138) Purging py3-sphinxcontrib-qthelp (1.0.6-r2) (61/138) Purging bash (5.2.37-r0) Executing bash-5.2.37-r0.pre-deinstall (62/138) Purging py3-pytest-pyc (8.3.3-r0) (63/138) Purging py3-pytest (8.3.3-r0) (64/138) Purging py3-iniconfig-pyc (2.0.0-r1) (65/138) Purging py3-iniconfig (2.0.0-r1) (66/138) Purging py3-packaging-pyc (24.1-r0) (67/138) Purging py3-packaging (24.1-r0) (68/138) Purging py3-parsing-pyc (3.1.4-r0) (69/138) Purging py3-parsing (3.1.4-r0) (70/138) Purging py3-pluggy-pyc (1.5.0-r0) (71/138) Purging py3-pluggy (1.5.0-r0) (72/138) Purging py3-py-pyc (1.11.0-r4) (73/138) Purging py3-py (1.11.0-r4) (74/138) Purging py3-freezegun-pyc (1.4.0-r1) (75/138) Purging py3-freezegun (1.4.0-r1) (76/138) Purging py3-dateutil-pyc (2.9.0-r1) (77/138) Purging py3-dateutil (2.9.0-r1) (78/138) Purging py3-six-pyc (1.16.0-r9) (79/138) Purging py3-six (1.16.0-r9) (80/138) Purging py3-hypothesis-pyc (6.116.0-r0) (81/138) Purging py3-hypothesis (6.116.0-r0) (82/138) Purging py3-sortedcontainers-pyc (2.4.0-r5) (83/138) Purging py3-sortedcontainers (2.4.0-r5) (84/138) Purging vdirsyncer-pyc (0.19.3-r1) (85/138) Purging vdirsyncer (0.19.3-r1) (86/138) Purging py3-aiohttp-pyc (3.10.9-r0) (87/138) Purging py3-aiohttp (3.10.9-r0) (88/138) Purging py3-aiohappyeyeballs-pyc (2.4.0-r0) (89/138) Purging py3-aiohappyeyeballs (2.4.0-r0) (90/138) Purging py3-aiosignal-pyc (1.3.1-r3) (91/138) Purging py3-aiosignal (1.3.1-r3) (92/138) Purging py3-frozenlist-pyc (1.4.1-r1) (93/138) Purging py3-frozenlist (1.4.1-r1) (94/138) Purging py3-async-timeout-pyc (4.0.3-r1) (95/138) Purging py3-async-timeout (4.0.3-r1) (96/138) Purging py3-attrs-pyc (24.2.0-r0) (97/138) Purging py3-attrs (24.2.0-r0) (98/138) Purging py3-brotli-pyc (1.1.0-r2) (99/138) Purging py3-brotli (1.1.0-r2) (100/138) Purging py3-idna-ssl-pyc (1.1.0-r9) (101/138) Purging py3-idna-ssl (1.1.0-r9) (102/138) Purging py3-yarl-pyc (1.13.1-r0) (103/138) Purging py3-yarl (1.13.1-r0) (104/138) Purging py3-multidict-pyc (6.0.5-r1) (105/138) Purging py3-multidict (6.0.5-r1) (106/138) Purging py3-aiostream-pyc (0.6.4-r0) (107/138) Purging py3-aiostream (0.6.4-r0) (108/138) Purging py3-typing-extensions-pyc (4.12.2-r0) (109/138) Purging py3-typing-extensions (4.12.2-r0) (110/138) Purging py3-atomicwrites-pyc (1.4.1-r3) (111/138) Purging py3-atomicwrites (1.4.1-r3) (112/138) Purging py3-click-log-pyc (0.4.0-r3) (113/138) Purging py3-click-log (0.4.0-r3) (114/138) Purging py3-click-pyc (8.1.7-r2) (115/138) Purging py3-click (8.1.7-r2) (116/138) Purging py3-requests-toolbelt-pyc (1.0.0-r1) (117/138) Purging py3-requests-toolbelt (1.0.0-r1) (118/138) Purging py3-requests-pyc (2.32.3-r0) (119/138) Purging py3-requests (2.32.3-r0) (120/138) Purging py3-certifi-pyc (2024.8.30-r0) (121/138) Purging py3-certifi (2024.8.30-r0) (122/138) Purging py3-charset-normalizer-pyc (3.4.0-r0) (123/138) Purging py3-charset-normalizer (3.4.0-r0) (124/138) Purging py3-idna-pyc (3.10-r0) (125/138) Purging py3-idna (3.10-r0) (126/138) Purging py3-urllib3-pyc (1.26.20-r0) (127/138) Purging py3-urllib3 (1.26.20-r0) (128/138) Purging python3-pyc (3.12.7-r1) (129/138) Purging python3-pycache-pyc0 (3.12.7-r1) (130/138) Purging pyc (3.12.7-r1) (131/138) Purging python3 (3.12.7-r1) (132/138) Purging gdbm (1.24-r0) (133/138) Purging libbz2 (1.0.8-r6) (134/138) Purging libffi (3.4.6-r0) (135/138) Purging libpanelw (6.5_p20241006-r2) (136/138) Purging mpdecimal (4.0.0-r0) (137/138) Purging sqlite-libs (3.47.0-r0) (138/138) Purging xz-libs (5.6.3-r0) Executing busybox-1.37.0-r6.trigger OK: 271 MiB in 101 packages