Skip to main content

django-cal

Django app to enable exporting of events to iCalendar files. Imitates behavior of django.contrib.syndication and is based upon vobject. Heavy inspiration came from Christian Joergensen and Derek Willis.

This project is loosely maintained and contributions will be happily accepted, but no feature developments are planned. New maintainers are welcome.

django-cal requires at least Django 3.2 and Python 3.8.

Documentation

Overview

Please see Django's syndication feed framework documentation, django_cal imitates its behavior: https://docs.djangoproject.com/en/dev/ref/contrib/syndication/.

Installation

pip install django-cal

Setting it up

Define a custom Events class, and then wire it up directly in your urls.py.

    from testapp.events import Testevents

    urlpatterns = patterns(
    "",
    (r"^ical$", Testevents()),
    )

Defining event properties

The following parameters work analogous to how they're implemented in django.contrib.syndication. That means, the framework checks in the following order: self.$param(obj), self.$param(), self.$param; obj being the object returned by self.get_object.

items           Returns the list of events.
                Must be set.
filename        Filename of the file returned in the view.
                Optional, defaults to 'events.ics'.
cal_name        Name of the calendar.
                Optional, defaults to None.
cal_desc        Description of the calendar.
                Optional, defaults to None.

item_summary    The "title" of the item.
                Optional, defaults to unicode representation of item.

item_end        Duration or end time of item.
item_duration   Optional, defaults to None. Must not define both.

item_rruleset   Optional, defaults to None.
                Should return dateutil.rruleset instance
                for recurrent events.

item_url        Optional, default calls item.get_absolute_url()
                Should return a URL with the fully-qualified domain and
                protocol (e.g. 'http://www.example.com/blog/') or an
                absolute path (e.g. '/events/'). If only a path is
                present, the 'django.contrib.sites' app will be used
                to insert the domain of the current site.
                Note: To find the current site, 'django.contrib.sites'
                      must be in your settings.INSTALLED_APPS (it is
                      there by default)

item_uid        All correspond to their vEvent equivalents.
item_start      All optional, all default to None.
item_description
item_categories
item_comment
item_location
item_last_modified
item_created

Duration of events

django-cal imitates vobject behavior regarding start and end of events. In short: Use Date objects for all-day events, DateTime for more granular control. Define either duration or end time, never both.

Timezones

If you need timezone support, use pytz.timezone to create an "aware" datetime object for item_start and item_end and set it to UTC. A user reported that Gmail, Outlook, Apple Mail, etc. are properly displaying it in the user's local timezone upon receipt.

Example::

from pytz import timezone

# dt is a naive datetime object known to represent US/Eastern time
loc_dt = timezone('US/Eastern').localize(dt)
utc = timezone('UTC')
aware_datetime = loc_dt.astimezone(utc)

Complex behavior

self.get_object can be overridden to allow for more complex events, as is possible for syndication feeds.

Contributor notes

Set up dev environment

In a virtual env:

$ pip install .[tests]
$ pre-commit install

Upload a new version

Uploading a new wheel happens with hatchling and twine:

First, update version number in pyproject.toml.

$ bumpver update --patch
$ python3 -m pip install --upgrade build twine
$ rm dist/* && python3 -m build
$ python3 -m twine upload dist/*
$ git push --tags

Release files for django-cal 0.4.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for django-cal 0.4.2
File Size Uploaded
django_cal-0.4.2.tar.gz 7.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for django-cal 0.4.2
File Interpreter ABI Platform
django_cal-0.4.2-py3-none-any.whl Python 3 none any Details

Total release size: 14.7 kB

Release files / django_cal-0.4.2.tar.gz

Download URL django_cal-0.4.2.tar.gz
Size 7.6 kB
Tags Source
SHA-256 checksum
How to use checksums
07f00f351d62572ef933d70d11d9329907eb55032f9bd6f336d30f3f4d41e38c
BLAKE2b-256 checksum
How to use checksums
a44577f9d6f51d91e35509c18eeb6e10776d19093c189540602060857f47f268
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.1 CPython/3.8.10

Release files / django_cal-0.4.2-py3-none-any.whl

Download URL django_cal-0.4.2-py3-none-any.whl
Size 7.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
fb77ae1fe4f96daa4e1c3fa4705b1121cb6c31c87351366ef8f66b43fc1ef008
BLAKE2b-256 checksum
How to use checksums
aab7fb9cbd7a078920bd689f8d3d2e61f45b0861e06c1682fb6b1df37f77c3cd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.1 CPython/3.8.10

Release history Release notifications | RSS feed

This release

0.4.2 This release

2 release files

0.4.1

2 release files

0.4.0

2 release files

0.3.0

2 release files

0.2.3

1 release file

0.2.2

2 release files

0.2.1

1 release file

0.2

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page