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
Metadata
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)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| django_cal-0.4.2.tar.gz | 7.6 kB | Without provenance | Details for django_cal-0.4.2.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| django_cal-0.4.2-py3-none-any.whl | Python 3 | none | any | Details for django_cal-0.4.2-py3-none-any.whl |
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
|
Security for django-cal 0.4.2
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.