Skip to main content

Push (or update) events to a CalDAV calendar

Project description

๐Ÿ“… CalDAV Event Pusher

This is a tool to automate bulk creation and updates of events on a CalDAV calendar server such as Radicale. You give it some JSON mapping an arbitrary unique ID to VEVENT keys and it'll update existing events on the server or create new events:

myevents.json:

{
  "myevent-1234": {
    "SUMMARY": "My Event 1234",
    "DTSTART": "20260216T104500Z",
    "DTEND": "20260216T121500Z"
  },
  "myevent-2345": {
    "SUMMARY": "My Event 2345",
    "LOCATION": "here and there",
    "DTSTART": "20260217T163000Z",
    "DTEND": "20260217T183000Z"
  }
}

credentials.sh:

export CALDAV_USER=myuser
export CALDAV_PASSWORD=mypassword
export CALDAV_SERVER=https://caldav.myserver.de
> source credentials.sh # source credentials environment variables (to not have password in shell history)
> caldav-event-pusher --calendar uas --eventsfile myevents.json --dry-run # first check changes, then remove the --dry-run
...
โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ โœจ New event 'myevent-1234' โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ
โ”‚  โž•                       UID    โ†’  b19c122d-eead-4de7-8f69-a3ac34450e14  โ”‚
โ”‚  โž•                   SUMMARY    โ†’  My Event 1234                         โ”‚
โ”‚  โž•                   DTSTART    โ†’  2026-02-16T10:45:00+00:00             โ”‚
โ”‚  โž•                     DTEND    โ†’  2026-02-16T12:15:00+00:00             โ”‚
โ”‚  โž•  X-CALDAV-EVENT-PUSHER-ID    โ†’  myevent-1234                          โ”‚
โ”‚  โž•             LAST-MODIFIED    โ†’  2026-02-16T14:50:35.214112+00:00      โ”‚
โ”‚  โž•                   DTSTAMP    โ†’  2026-02-16T14:50:35.214112+00:00      โ”‚
โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ
โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ โœจ New event 'myevent-2345' โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ
โ”‚  โž•                       UID    โ†’  9f29985c-7db1-47b2-bd21-0664349eba4b  โ”‚
โ”‚  โž•                   SUMMARY    โ†’  My Event 2345                         โ”‚
โ”‚  โž•                  LOCATION    โ†’  here and there                        โ”‚
โ”‚  โž•                   DTSTART    โ†’  2026-02-17T16:30:00+00:00             โ”‚
โ”‚  โž•                     DTEND    โ†’  2026-02-17T18:30:00+00:00             โ”‚
โ”‚  โž•  X-CALDAV-EVENT-PUSHER-ID    โ†’  myevent-2345                          โ”‚
โ”‚  โž•             LAST-MODIFIED    โ†’  2026-02-16T14:50:35.224139+00:00      โ”‚
โ”‚  โž•                   DTSTAMP    โ†’  2026-02-16T14:50:35.224139+00:00      โ”‚
โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ
...
# If you uploaded, then change myevents.json, and rerun:
> caldav-event-pusher --calendar uas --eventsfile myevents.json --dry-run # first check changes, then remove the --dry-run
โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ ๐Ÿ“ Changes to 'myevent-2345' โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ
โ”‚  ๐Ÿ“  LOCATION  here and there  โ†’  that location           โ”‚
โ”‚  ๐Ÿ“   SUMMARY  My Event 2345   โ†’  My specific Event 2345  โ”‚
โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ

โš ๏ธ Caveats

Make sure your CalDAV server supports arbitrary X-... fields. Radicale does, but Horde doesn't for example. When yours doesn't you can use --id-key DESCRIPTION for example to use the standard DESCRIPTION field for the ID. Not that you won't be able to push the event description then. Blame your server.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

caldav_event_pusher-0.2.0.tar.gz (61.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

caldav_event_pusher-0.2.0-py3-none-any.whl (22.1 kB view details)

Uploaded Python 3

File details

Details for the file caldav_event_pusher-0.2.0.tar.gz.

File metadata

  • Download URL: caldav_event_pusher-0.2.0.tar.gz
  • Upload date:
  • Size: 61.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.29 {"installer":{"name":"uv","version":"0.9.29","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"NixOS","version":"25.11","id":"xantusia","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for caldav_event_pusher-0.2.0.tar.gz
Algorithm Hash digest
SHA256 7902b0d6fa858dff491536d9397440e1544c306095a6bf14f1b9997f446751a0
MD5 f1fc5aac59294e0aac1335fa6b5b8853
BLAKE2b-256 088cfb8e01edda031063f9322951ad86fba5e58456294b33da081b0f194c71ab

See more details on using hashes here.

File details

Details for the file caldav_event_pusher-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: caldav_event_pusher-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 22.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.29 {"installer":{"name":"uv","version":"0.9.29","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"NixOS","version":"25.11","id":"xantusia","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for caldav_event_pusher-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 5e02b99b978582ddec510da79e312ee7c87d51ec3340e2004b364ef42597f6b9
MD5 880c64f304888675183dba8e4dbde3b4
BLAKE2b-256 67579fbec3ce96ce3adf39b6f43e3a1d0ae4ac431b685914bb64905c4702e273

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page