commit 08ba8809453d29704026a59b086881cdb7a6bc4b9ad3b577cacbfea7a5438598 Author: Steve Kowalik Date: Tue Dec 16 04:26:43 2025 +0000 - Update to 0.20.0: * Remove dependency on abandoned atomicwrites library. * Implement filter_hook for the HTTP storage. * Drop support for Python 3.7. * Add support for Python 3.12 and Python 3.13. * Properly close the status database after using. This especially affects tests, where we were leaking a large amount of file descriptors. * Extend supported versions of aiostream to include 0.7.x. - Drop patch support-new-pytest-asyncio.patch, no longer required. OBS-URL: https://build.opensuse.org/package/show/devel:languages:python/python-vdirsyncer?expand=0&rev=49 diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..9b03811 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,23 @@ +## Default LFS +*.7z filter=lfs diff=lfs merge=lfs -text +*.bsp filter=lfs diff=lfs merge=lfs -text +*.bz2 filter=lfs diff=lfs merge=lfs -text +*.gem filter=lfs diff=lfs merge=lfs -text +*.gz filter=lfs diff=lfs merge=lfs -text +*.jar filter=lfs diff=lfs merge=lfs -text +*.lz filter=lfs diff=lfs merge=lfs -text +*.lzma filter=lfs diff=lfs merge=lfs -text +*.obscpio filter=lfs diff=lfs merge=lfs -text +*.oxt filter=lfs diff=lfs merge=lfs -text +*.pdf filter=lfs diff=lfs merge=lfs -text +*.png filter=lfs diff=lfs merge=lfs -text +*.rpm filter=lfs diff=lfs merge=lfs -text +*.tbz filter=lfs diff=lfs merge=lfs -text +*.tbz2 filter=lfs diff=lfs merge=lfs -text +*.tgz filter=lfs diff=lfs merge=lfs -text +*.ttf filter=lfs diff=lfs merge=lfs -text +*.txz filter=lfs diff=lfs merge=lfs -text +*.whl filter=lfs diff=lfs merge=lfs -text +*.xz filter=lfs diff=lfs merge=lfs -text +*.zip filter=lfs diff=lfs merge=lfs -text +*.zst filter=lfs diff=lfs merge=lfs -text diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..57affb6 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.osc diff --git a/python-vdirsyncer.changes b/python-vdirsyncer.changes new file mode 100644 index 0000000..5eb9faa --- /dev/null +++ b/python-vdirsyncer.changes @@ -0,0 +1,322 @@ +------------------------------------------------------------------- +Tue Dec 16 04:25:20 UTC 2025 - Steve Kowalik + +- Update to 0.20.0: + * Remove dependency on abandoned atomicwrites library. + * Implement filter_hook for the HTTP storage. + * Drop support for Python 3.7. + * Add support for Python 3.12 and Python 3.13. + * Properly close the status database after using. This especially affects + tests, where we were leaking a large amount of file descriptors. + * Extend supported versions of aiostream to include 0.7.x. +- Drop patch support-new-pytest-asyncio.patch, no longer required. + +------------------------------------------------------------------- +Tue Jul 22 04:29:15 UTC 2025 - Steve Kowalik + +- Add patch support-new-pytest-asyncio.patch: + * Support changes required by pytest-asyncio 1.0. + +------------------------------------------------------------------- +Tue Dec 17 00:59:32 UTC 2024 - Steve Kowalik + +- Update to 0.19.3: + * Added a no_delete option to the storage configuration. :gh:`1090` + * Fix crash when running vdirsyncer repair on a collection. :gh:`1019` + * Add an option to request vCard v4.0. :gh:`1066` + * Require matching BEGIN and END lines in vobjects. :gh:`1103` + * Implement digest auth. :gh:`1137` + * Add filter_hook parameter to :storage:`http`. :gh:`1136` +- Drop patch 3eb9ce5ae4320d52e6c876874511ff96a8a45f51.patch, included. +- Switch to pyproject macros. +- Stop skipping so many tests. + +------------------------------------------------------------------- +Fri Dec 8 16:14:31 UTC 2023 - Dirk Müller + +- update to 0.19.2: + * Improve the performance of ``SingleFileStorage``. :gh:`818` + * Properly document some caveats of the Google Contacts + storage. + * Fix crash when using auth certs. :gh:`1033` + * The ``filesystem`` storage can be specified with ``type = + * "filesystem/icalendar"`` or ``type = "filesystem/vcard"``. + This has not functional impact, and is merely for forward + compatibility with the Rust implementation of vdirsyncer. + * Python 3.10 and 3.11 are officially supported. + * Instructions for integrating with Google CalDav/CardDav have + changed. + * Applications now need to be registered as "Desktop + applications". Using "Web application" no longer works due + to changes on Google's side. + * Fixed crash when operating on Google Contacts. :gh:`994` + * The ``HTTP_PROXY`` and ``HTTPS_PROXY`` are now respected. + * Instructions for integrating with Google CalDav/CardDav have + changed. + * Applications now need to be registered as "Web Application". + * Various documentation updates. + +------------------------------------------------------------------- +Thu Jul 27 14:34:41 UTC 2023 - Matej Cepl + +- Add missing dependency + +------------------------------------------------------------------- +Thu May 4 23:56:08 UTC 2023 - Dirk Müller + +- fix and reenable tests + +------------------------------------------------------------------- +Sun Dec 18 22:01:01 UTC 2022 - Matej Cepl + +- Update to 0.19.0: + + - Add "shell" password fetch strategy to pass command string to + a shell. + - Add "description" and "order" as metadata. + These fetch the CalDAV: calendar-description, + ``CardDAV:addressbook-description`` and + ``apple-ns:calendar-order`` properties respectively. + - Add a new ``showconfig`` status. This prints *some* + configuration values as JSON. This is intended to be used by + external tools and helpers that interact with ``vdirsyncer``, + and considered experimental. + - Update TLS-related tests that were failing due to weak MDs. + - ``pytest-httpserver`` and ``trustme`` are now required for + tests. + - ``pytest-localserver`` is no longer required for tests. + - Multithreaded support has been dropped. The + ``"--max-workers`` has been removed. + - A new ``asyncio`` backend is now used. So far, this shows + substantial speed improvements in ``discovery`` and + ``metasync``, but little change in `sync`. This will likely + continue improving over time. :gh:`906` + - The ``google`` storage types no longer + require ``requests-oauthlib``, but require + ``python-aiohttp-oauthlib`` instead. + - Vdirsyncer no longer includes experimental support for + `EteSync `_. The existing + integration had not been supported for a long time and + no longer worked. Support for external storages may be + added if anyone is interested in maintaining an EteSync + plugin. EteSync users should consider using `etesync-dav`_. + - The ``plist`` for macOS has been dropped. It was broken and + homebrew generates their own based on package metadata. macOS + users are encouraged to use that as a reference. + - Changes to SSL configuration: + - Support for ``md5`` and ``sha1`` certificate fingerprints + has been dropped. If you're validating certificate + fingerprints, use ``sha256`` instead. + - When using a custom ``verify_fingerprint``, CA validation + is always disabled. + - If ``verify_fingerprint`` is unset, CA verification is + always active. Disabling both features is insecure and no + longer supported. + - The ``verify`` parameter no longer takes boolean values, it + is now optional and only takes a string to a custom CA for + verification. + - The ``verify`` and ``verify_fingerprint`` will likely be + merged into a single parameter in future. + +------------------------------------------------------------------- +Sat Jul 10 11:56:11 UTC 2021 - Matej Cepl + +- Update to 0.18.0: + This release is a maintenance-focused one and mostly addresses + compatibility with newer Python versions and newer dependencies. + + Note: Version 0.17 has some alpha releases but ultimately was never finalised. + 0.18 actually continues where 0.16 left off. + + - Support for Python 3.5 and 3.6 has been dropped. This release mostly focuses + on keeping vdirsyncer compatible with newer environments. + - Python 3.9 is now supported. + - click 8 and click-threading 0.5.0 are now required. + - For those using `pipsi`, we now recommend using `pipx`, it's successor. + - Our Debian/Ubuntu build scripts have been updated. New versions should be + pushed to those repositories soon. +- Remove obsolete patches: + - python-vdirsyncer-shift-deadline.patch + - deprecated_getiterator.patch +- Temporarily switch off tests (gh#pimutils/vdirsyncer#654). + +------------------------------------------------------------------- +Mon May 31 15:07:46 UTC 2021 - Matej Cepl + +- Add deprecated_getiterator.patch (.getiterator() in + etree.Element is obsolete, use just plain iter()) + gh#pimutils/vdirsyncer#880 + +------------------------------------------------------------------- +Tue Apr 12 06:56:05 UTC 2021 - Steve Kowalik + +- Remove ifpython3 macro guarding the Provides/Obsoletes + +------------------------------------------------------------------- +Fri Mar 12 19:57:06 UTC 2021 - Matej Cepl + +- Set up update-alternatives for systemd unit files. + +------------------------------------------------------------------- +Sun Feb 28 22:24:56 UTC 2021 - Hans-Peter Jansen + +- Fix source references + +------------------------------------------------------------------- +Tue Sep 1 15:11:22 UTC 2020 - Michal Hrusecky + +-fix compatibility with latest click - patch taken directly from upstream git + * 3eb9ce5ae4320d52e6c876874511ff96a8a45f51.patch + +------------------------------------------------------------------- +Thu Jul 23 09:16:29 UTC 2020 - Marketa Calabkova + +- Update to 0.16.8 + * Support Python 3.7 and 3.8. + * Vdirsyncer will now warn if there's a string without quotes in your config. +- Drop python-vdirsyncer-fix-tests.patch + +------------------------------------------------------------------- +Sun Jun 7 21:35:23 UTC 2020 - Matej Cepl + +- Add missing BR python-atomicwrites + +------------------------------------------------------------------- +Mon May 18 09:10:46 UTC 2020 - Petr Gajdos + +- %python3_only -> %python_alternative + +------------------------------------------------------------------- +Wed Apr 29 12:51:49 UTC 2020 - Tomáš Chvátal + +- Skip failing test due to changed quoting in click: + * test_verbosity + +------------------------------------------------------------------- +Mon Feb 3 15:57:42 UTC 2020 - Dominique Leuenberger + +- BuildRequire pkgconfig(systemd) instead of systemd: allow OBS to + shortcut through the -mini flavors. + +------------------------------------------------------------------- +Wed Jun 5 07:15:52 UTC 2019 - Tomáš Chvátal + +- Make the deadline for tests even larger, on slow obs bots + it takes 1300: + * python-vdirsyncer-shift-deadline.patch + +------------------------------------------------------------------- +Thu May 16 22:35:41 UTC 2019 - ranand@suse.com + +- Skip flaky test test_legacy_status + +------------------------------------------------------------------- +Tue May 7 05:47:52 UTC 2019 - pgajdos@suse.com + +- added patches + default deadline (200ms) is too short for obs + + python-vdirsyncer-shift-deadline.patch + +------------------------------------------------------------------- +Mon May 6 13:36:29 UTC 2019 - pgajdos@suse.com + +- fix tests again https://github.com/pimutils/vdirsyncer/issues/793 +- modified patches + % python-vdirsyncer-fix-tests.patch (extended) + +------------------------------------------------------------------- +Sat Apr 6 22:18:22 UTC 2019 - Jan Engelhardt + +- Use noun phrase in summary. Wrap description. + +------------------------------------------------------------------- +Fri Mar 29 13:31:30 UTC 2019 - pgajdos@suse.com + +- version update to 0.16.7 + Fixes for Python 3.7 +- added patches + https://github.com/pimutils/vdirsyncer/pull/779 + + python-vdirsyncer-fix-tests.patch + +------------------------------------------------------------------- +Wed Jul 18 08:05:01 UTC 2018 - mimi.vx@gmail.com + +- fix vdirsyncer.timer service + +------------------------------------------------------------------- +Wed Jul 4 06:23:48 UTC 2018 - dmacvicar@suse.de + +- Add systemd unit and timer from upstream git +- Make package python3 only +- Update to version 0.16.6 + * Documentation building no longer needs a working installation + of vdirsyncer. +- Changes from version 0.16.5 + * click-log 0.3 is required. + * All output will now happen on stderr (because of the upgrade of ``click-log``). +- Changes from version 0.16.4 + * Fix tests for new Hypothesis version. (Literally no other change included) +- Changes from version 0.16.3 + * First version with custom Debian and Ubuntu packages. See :gh:`663`. + * Remove invalid ASCII control characters from server responses. See :gh:`626`. + * Python 3.3 is no longer supported. See :ghpr:`674`. +- Changes from version 0.16.2 + * Fix crash when using daterange or item_type filters in + :storage:`google_calendar`, see :gh:`657`. + * Fixes for new version ``0.2.0`` of ``click-log``. The version + requirements for the dependency ``click-log`` changed. +- Changes from version 0.16.1 + * Removed remoteStorage support, see :gh:`647`. + * Fixed test failures caused by latest requests version, see :gh:`660`. + +------------------------------------------------------------------- +Tue Jul 4 12:30:14 UTC 2017 - aloisio@gmx.com + +- Update to version 0.16.0 + * Strip METHOD:PUBLISH added by some calendar providers, see + :gh:`502`. + * Fix crash of Google storages when saving token file. + * Make DAV discovery more RFC-conformant, see :ghpr:`585`. + * Vdirsyncer is now tested against Xandikos, see :ghpr:`601`. + * Subfolders with a leading dot are now ignored during + discover for filesystem storage. This makes it easier to combine + it with version control. + * Statuses are now stored in a sqlite database. Old data is + automatically migrated. Users with really large datasets should + encounter performance improvements. This means that sqlite3 is + now a dependency of vdirsyncer. + * Vdirsyncer is now licensed under the 3-clause BSD license, + see :gh:`610`. + * Vdirsyncer now includes experimental support for EteSync, + see :ghpr:`614`. + * Vdirsyncer now uses more filesystem metadata for determining + whether an item changed. You will notice a possibly heavy CPU/IO + spike on the first sync after upgrading. + * Packagers: Reference systemd.service and systemd.timer unit + files are provided. It is recommended to install these as + documentation if your distribution is systemd-based. + +- Provides vdirsyncer only for python3. + +------------------------------------------------------------------- +Fri Jun 30 16:34:31 UTC 2017 - aloisio@gmx.com + +- Update to 0.15.0 (see changelog.rst) +- Renamed to python-vdirsyncer +- Converted to single-spec + +------------------------------------------------------------------- +Fri Feb 26 13:16:42 UTC 2016 - tbechtold@suse.com + +- Require python-python-dateutil. package was renamed + +------------------------------------------------------------------- +Wed Nov 5 09:40:34 UTC 2014 - seiler@b1-systems.de + +- added needed python-requests-toolbelt dependency + +------------------------------------------------------------------- +Tue Nov 4 14:24:36 UTC 2014 - seiler@b1-systems.de + +- initial commit + diff --git a/python-vdirsyncer.spec b/python-vdirsyncer.spec new file mode 100644 index 0000000..b3c99e8 --- /dev/null +++ b/python-vdirsyncer.spec @@ -0,0 +1,118 @@ +# +# spec file for package python-vdirsyncer +# +# Copyright (c) 2025 SUSE LLC and contributors +# +# All modifications and additions to the file contributed by third parties +# remain the property of their copyright owners, unless otherwise agreed +# upon. The license for this file, and modifications and additions to the +# file, is the same license as for the pristine package itself (unless the +# license for the pristine package is not an Open Source License, in which +# case the license is the MIT License). An "Open Source License" is a +# license that conforms to the Open Source Definition (Version 1.9) +# published by the Open Source Initiative. + +# Please submit bugfixes or comments via https://bugs.opensuse.org/ +# + + +Name: python-vdirsyncer +Version: 0.20.0 +Release: 0 +Summary: CalDAV and CardDAV synchronization module +License: BSD-3-Clause +URL: https://github.com/pimutils/vdirsyncer +Source0: https://files.pythonhosted.org/packages/source/v/vdirsyncer/vdirsyncer-%{version}.tar.gz +Source1: vdirsyncer.service +Source2: vdirsyncer.timer +BuildRequires: %{python_module base >= 3.8} +BuildRequires: %{python_module pip} +BuildRequires: %{python_module setuptools_scm} +BuildRequires: %{python_module wheel} +BuildRequires: fdupes +BuildRequires: pkgconfig +BuildRequires: python-rpm-macros +BuildRequires: systemd-rpm-macros +BuildRequires: pkgconfig(systemd) +Requires: python-aiohttp +Requires: python-aiostream +Requires: python-click >= 5.0 +Requires: python-click-log >= 0.3 +Requires: python-requests >= 2.20.0 +Requires(post): update-alternatives +Requires(postun): update-alternatives +Recommends: python-requests-oauthlib +BuildArch: noarch +# SECTION test requirements +BuildRequires: %{python_module aiohttp} +BuildRequires: %{python_module aioresponses} +BuildRequires: %{python_module aiostream} +BuildRequires: %{python_module click-log >= 0.3} +BuildRequires: %{python_module hypothesis >= 5.0.0} +BuildRequires: %{python_module pytest-asyncio} +BuildRequires: %{python_module pytest-cov} +BuildRequires: %{python_module pytest-localserver} +BuildRequires: %{python_module pytest} +BuildRequires: %{python_module requests >= 2.20.0} +BuildRequires: %{python_module trustme} +BuildRequires: %{python_module urllib3} +# /SECTION +Provides: vdirsyncer = %{version} +Obsoletes: vdirsyncer < %{version} +%python_subpackages + +%description +Vdirsyncer synchronizes calendars and addressbooks between two +storages. The supported storages are CalDAV, CardDAV, arbitrary HTTP +resources, vdir and some more. It aims to be for CalDAV and CardDAV +what OfflineIMAP is for IMAP. + +%prep +%autosetup -p1 -n vdirsyncer-%{version} + +rm -rf vdirsyncer.egg-info + +%build +%pyproject_wheel + +%install +%pyproject_install +%python_clone -a %{buildroot}%{_bindir}/vdirsyncer + +mkdir -p %{buildroot}%{_userunitdir} +%{python_expand \ +install -Dpm 0644 %{SOURCE1} %{buildroot}%{_userunitdir}/vdirsyncer-%{$python_bin_suffix}.service +install -Dpm 0644 %{SOURCE2} %{buildroot}%{_userunitdir}/vdirsyncer-%{$python_bin_suffix}.timer +%fdupes %{buildroot}/%{$python_sitelib} +} +%prepare_alternative -t %{_userunitdir}/vdirsyncer.service vdirsyncer.service +%prepare_alternative -t %{_userunitdir}/vdirsyncer.timer vdirsyncer.timer + +%check +export DETERMINISTIC_TESTS=true +# request_ssl - requires network +# TestVobjectMachine -- broken upstream +%pytest -k 'not (request_ssl or TestVobjectMachine)' + +%post +update-alternatives --install %{_bindir}/vdirsyncer vdirsyncer %{_bindir}/vdirsyncer-%{python_bin_suffix} %{python_version_nodots} \ + --slave %{_userunitdir}/vdirsyncer.service vdirsyncer.service %{_userunitdir}/vdirsyncer-%{python_bin_suffix}.service \ + --slave %{_userunitdir}/vdirsyncer.timer vdirsyncer.timer %{_userunitdir}/vdirsyncer-%{python_bin_suffix}.timer +update-alternatives --auto vdirsyncer + +%postun +%python_uninstall_alternative vdirsyncer + +%files %{python_files} +%doc README.rst +%license LICENSE +%python_alternative %{_bindir}/vdirsyncer +%{python_sitelib}/vdirsyncer-%{version}.dist-info +%{python_sitelib}/vdirsyncer +%{_userunitdir}/vdirsyncer-%{python_bin_suffix}.service +%{_userunitdir}/vdirsyncer-%{python_bin_suffix}.timer +%{_userunitdir}/vdirsyncer.service +%{_userunitdir}/vdirsyncer.timer +%ghost %{_sysconfdir}/alternatives/vdirsyncer* + +%changelog diff --git a/support-new-pytest-asyncio.patch b/support-new-pytest-asyncio.patch new file mode 100644 index 0000000..cb689df --- /dev/null +++ b/support-new-pytest-asyncio.patch @@ -0,0 +1,47 @@ +Index: vdirsyncer-0.19.3/tests/conftest.py +=================================================================== +--- vdirsyncer-0.19.3.orig/tests/conftest.py ++++ vdirsyncer-0.19.3/tests/conftest.py +@@ -59,12 +59,12 @@ else: + + + @pytest_asyncio.fixture +-async def aio_session(event_loop): ++async def aio_session(): + async with aiohttp.ClientSession() as session: + yield session + + + @pytest_asyncio.fixture +-async def aio_connector(event_loop): ++async def aio_connector(): + async with aiohttp.TCPConnector(limit_per_host=16) as conn: + yield conn +Index: vdirsyncer-0.19.3/tests/unit/test_metasync.py +=================================================================== +--- vdirsyncer-0.19.3.orig/tests/unit/test_metasync.py ++++ vdirsyncer-0.19.3/tests/unit/test_metasync.py +@@ -1,4 +1,5 @@ + from __future__ import annotations ++import asyncio + + import hypothesis.strategies as st + import pytest +@@ -57,7 +58,7 @@ async def test_basic(monkeypatch): + + @pytest_asyncio.fixture + @pytest.mark.asyncio +-async def conflict_state(request, event_loop): ++async def conflict_state(request): + a = MemoryStorage() + b = MemoryStorage() + status = {} +@@ -70,7 +71,7 @@ async def conflict_state(request, event_ + assert await b.get_meta("foo") == "baz" + assert not status + +- event_loop.run_until_complete(do_cleanup()) ++ asyncio.new_event_loop().run_until_complete(do_cleanup()) + + request.addfinalizer(cleanup) + diff --git a/vdirsyncer-0.19.3.tar.gz b/vdirsyncer-0.19.3.tar.gz new file mode 100644 index 0000000..6cc373a --- /dev/null +++ b/vdirsyncer-0.19.3.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e437851feb985dec3544654f8f9cf6dd109b0b03f7e19956086603092ffeb28f +size 125478 diff --git a/vdirsyncer-0.20.0.tar.gz b/vdirsyncer-0.20.0.tar.gz new file mode 100644 index 0000000..29a9b0a --- /dev/null +++ b/vdirsyncer-0.20.0.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:feb1a533500a95c14fd155733a1056fe359192553d82c07c6ba04fcbfc40b12d +size 126633 diff --git a/vdirsyncer.service b/vdirsyncer.service new file mode 100644 index 0000000..544f6f6 --- /dev/null +++ b/vdirsyncer.service @@ -0,0 +1,7 @@ +[Unit] +Description=Synchronize calendars and contacts +Documentation=https://vdirsyncer.readthedocs.org/ + +[Service] +ExecStart=/usr/bin/vdirsyncer sync +Type=oneshot diff --git a/vdirsyncer.timer b/vdirsyncer.timer new file mode 100644 index 0000000..72ce13b --- /dev/null +++ b/vdirsyncer.timer @@ -0,0 +1,10 @@ +[Unit] +Description=Synchronize vdirs + +[Timer] +OnBootSec=5m +OnUnitActiveSec=15m +AccuracySec=5m + +[Install] +WantedBy=timers.target