Skip to main content

django-eventtools is a lightweight library designed to handle repeating and one-off event occurrences for display on a website.

Usage

Given the following models:

from django.db import models

from eventtools.models import BaseEvent, BaseOccurrence


class Event(BaseEvent):
    title = models.CharField(max_length=100)


class Occurrence(BaseOccurrence):
    event = models.ForeignKey(Event)

Create a sample event & occurrences

>>> from datetime import datetime
>>> from dateutil import rrule
>>> from myapp.models import Event
>>> event = Event.objects.create(title='Test event')
>>> once_off = Occurrence.objects.create(
        event=event,
        start=datetime(2016, 1, 1, 12, 0),
        end=datetime(2016, 1, 1, 2, 0))
>>> christmas = Occurrence.objects.create(
        event=event,
        start=datetime(2015, 12, 25, 7, 0),
        end=datetime(2015, 12, 25, 22, 0),
        repeat.rrule.YEARLY)
>>> daily = Occurrence.objects.create(
        event=event,
        start=datetime(2016, 1, 1, 7, 0),
        end=datetime(2016, 1, 1, 8, 0),
        repeat.rrule.DAILY)

For each event instance you can do the following to get occurrences, which are returned as pairs of datetimes - i.e. (start, end), or a python generator yielding occurrence pairs

>>> event.next_occurrence
>>> event.all_occurrences()
>>> event.all_occurrences(from_date=datetime(2015, 1, 1, 10, 0))
>>> event.all_occurrences(to_date=date(2016, 1, 1))
>>> event.all_occurrences(to_date=date(2016, 1, 1),
                          to_date=date(2016, 12, 31))

Querysets can also be filtered, but this is less efficient so you should work with occurrences where possible.

>>> Event.objects.for_period(from_date=date(2015, 1, 1),
                             to_date=date(2015, 12, 31))

All these methods work for occurrence

If you need more information about the occurrence than just a pair of dates, add an occurrence_data property to your BaseOccurrence subclass - i.e.

class Occurrence(BaseOccurrence):
    event = models.ForeignKey(Event)

    @property
    def occurrence_data(self):
        return {
            'event_title': self.event.title
        }

The result will be appended to the occurrence tuple, i.e. (start, end, data)

Running tests

Assuming virtualenvwrapper is installed:

> cd path-to/django-eventtools
> mkvirtualenv test
> ./setup.py install
> ./runtests.py

Todo

  • Handle from_date more efficiently in BaseOccurrence.all_occurrences

Download files

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

Source Distribution

django-eventtools-0.9.1.tar.gz (7.7 kB view details)

Uploaded Source

File details

Details for the file django-eventtools-0.9.1.tar.gz.

File metadata

File hashes

Hashes for django-eventtools-0.9.1.tar.gz
Algorithm Hash digest
SHA256 7aefec41f7b70efbb33929842ed0843c2fddea4fcc5d64212670fef1989f7433
MD5 fced4ff4a9927c6e9cc4a521afde43bd
BLAKE2b-256 916888d5d8e1d806218a4b6640f543183ff8082f5d57ea45ce1b198be4c8ad66

See more details on using hashes here.

Release history Release notifications | RSS feed

1.0.3

2 files

1.0.2

1 file

1.0.1

1 file

1.0.0

1 file

0.9.11

1 file

0.9.10

1 file

0.9.9

1 file

0.9.8

1 file

0.9.7

1 file

0.9.6

1 file

0.9.5

1 file

0.9.4

1 file

0.9.3

1 file

0.9.2

1 file

This release

0.9.1 This release

1 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