Radicale is a really small piece of software, but understanding it is not as easy as it seems. But don't worry, reading this short section is enough to understand what a CalDAV/CardDAV server is, and how Radicale's code is organized.
Protocol overview
Here is a simple overview of the global architecture for reaching a calendar or an address book through network:
Part |
Layer |
Protocol or Format |
Server |
Calendar/Contact Storage |
iCal/vCard |
Calendar/Contact Server |
CalDAV/CardDAV Server |
Transfer |
Network |
CalDAV/CardDAV (HTTP + TLS) |
Client |
Calendar/Contact Client |
CalDAV/CardDAV Client |
GUI |
Terminal, GTK, Web interface, etc. |
Radicale is only the server part of this architecture.
Please note that:
- CalDAV and CardDAV are superset protocols of WebDAV,
- WebDAV is a superset protocol of HTTP.
Radicale being a CalDAV/CardDAV server, it also can be seen as a special WebDAV and HTTP server.
Radicale is not the client part of this architecture. It means that Radicale never draws calendars, address books, events and contacts on the screen. It only stores them and give the possibility to share them online with other people.
If you want to see or edit your events and your contacts, you have to use another software called a client, that can be a "normal" applications with icons and buttons, a terminal or another web application.
Code Architecture
The radicale
package offers the following modules.
__init__
: Contains the entry point for WSGI.
__main__
: Provides the entry point for the radicale
executable and includes the command line parser. It loads configuration files from the default (or specified) paths and starts the internal server.
app
: This is the core part of Radicale, with the code for the CalDAV/CardDAV server. The code managing the different HTTP requests according to the CalDAV/CardDAV specification can be found here.
auth
: Used for authenticating users based on username and password, mapping usernames to internal users and optionally retrieving credentials from the environment.
config
: Contains the code for managing configuration and loading settings from files.
ìtem
: Internal represenation of address book and calendar entries. Based on VObject.
log
: The logger for Radicale based on the default Python logging module.
rights
: This module is used by Radicale to manage access rights to collections, address books and calendars.
server
: The integrated HTTP server for standalone use.
storage
: This module contains the classes representing collections in Radicale and the code for storing and loading them in the filesystem.
web
: This module contains the web interface.
utils
: Contains general helper functions.
httputils
: Contains helper functions for working with HTTP.
pathutils
: Helper functions for working with paths and the filesystem.
xmlutils
: Helper functions for working with the XML part of CalDAV/CardDAV requests and responses. It's based on the ElementTree XML API.