pimutils / pimutils/vdirsyncer

Sync fails randomly with Nextcloud's "Contact birthdays" calendar.

Open
#1,109 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
Python
Stars
1.9k
Forks
185
Avg merge
11h 49m
Merged PRs (30d)
1

Description

I have syncing of calendars set up with Nextcloud that generates a "Contact birthdays" calendar in the collection automatically. Sometimes syncing this calendar fails, and then everything remains unsynced. If I do a vdirsyncer sync calendars/other_calendar, that will work properly. Not with the contact birthdays, unfortunately.

vdirsyncer discover manages to find the calendar, and vdirsyncer metasync successfuly syncs metadata.

I tried syncing again, changing conflict resolution so that "b wins", but that did not help.

Might be related to #832.

  • Your vdirsyncer version
    • 0.19.2-1
  • If applicable, which server software (and which version) you're using
    • Nextcloud hub
  • Your Python version
    • Python 3.11.6
  • Your operating system
    • Arch Linux
  • Your config file
[pair calendars]
a = "local_cal"
b = "cal"
collections = ["from a", "from b"]
metadata = ["color"]
conflict_resolution = ["command", "nvim", "-d"]

[storage local_cal]
type = "filesystem"
path = "~/.local/share/calendars/nextcloud"
fileext = ".ics"

[storage cal]
type = "caldav"
url = "https://xxxxxxxxxxxxxxxxxxxxxxx/remote.php/dav"
username = "xxxxxxxxxx"
password.fetch = ["command", "secret-tool", "lookup", "server", "nextcloud", "username", "xxxxxxxxxx", "app", "vdirsyncer"]
  • Use vdirsyncer -vdebug for debug output. The output is sensitive, but
    please attach at least the last few lines before the error (if applicable),
    censored as necessary. This is almost always the most useful information.
error: Unknown error occurred for calendars/contact_birthdays: Not Found
error: Use `-vdebug` to see the full traceback.
debug:   File "/usr/lib/python3.11/site-packages/vdirsyncer/cli/utils.py", line 70, in handle_cli_error
debug:     raise e
debug:   File "/usr/lib/python3.11/site-packages/vdirsyncer/sync/__init__.py", line 160, in sync
debug:     await action.run(a_info, b_info, conflict_resolution, partial_sync)
debug:   File "/usr/lib/python3.11/site-packages/vdirsyncer/sync/__init__.py", line 183, in run
debug:     await self._run_impl(a, b)
debug:   File "/usr/lib/python3.11/site-packages/vdirsyncer/sync/__init__.py", line 234, in _run_impl
debug:     meta.etag = await self.dest.storage.update(meta.href, self.item, meta.etag)
debug:                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
debug:   File "/usr/lib/python3.11/site-packages/vdirsyncer/storage/base.py", line 22, in inner
debug:     return await f(self, *args, **kwargs)
debug:            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
debug:   File "/usr/lib/python3.11/site-packages/vdirsyncer/storage/base.py", line 22, in inner
debug:     return await f(self, *args, **kwargs)
debug:            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
debug:   File "/usr/lib/python3.11/site-packages/vdirsyncer/storage/dav.py", line 596, in update
debug:     href, etag = await self._put(self._normalize_href(href), item, etag)
debug:                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
debug:   File "/usr/lib/python3.11/site-packages/vdirsyncer/storage/dav.py", line 569, in _put
debug:     response = await self.session.request(
debug:                ^^^^^^^^^^^^^^^^^^^^^^^^^^^
debug:   File "/usr/lib/python3.11/site-packages/vdirsyncer/storage/dav.py", line 416, in request
debug:     return await http.request(method, url, session=session, **more)
debug:            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
debug:   File "/usr/lib/python3.11/site-packages/vdirsyncer/http.py", line 155, in request
debug:     raise exceptions.NotFoundError(response.reason)

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with the traceback in vdirsyncer/sync/init.py and follow the update path into vdirsyncer/storage/dav.py, especially update, _put, and request. Reproduce the failure against Nextcloud’s “Contact birthdays” calendar with vdirsyncer -vdebug, comparing it with a calendar that syncs. Done means the affected calendar syncs successfully without the Not Found error.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
backend, cli
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.