Radicale is a 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:
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 representation 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.