============
Introduction
============
About Swingtime
===============
Swingtime is a `Django `_ application similar to
stripped down version of
`iCal for Mac OS X `_ or
`Google Calendar `_.
Swingtime provides an :class:`~models.Event` model that act as metadata container
for one or more :class:`~models.Occurrence` objects, which describe specific
start and end times.
Swingtime relies heavily upon both the ``datetime`` standard library package and
the ``dateutil`` package, featuring direct support for the ``dateutil.rrule``
interface to create occurrences.
A fairly simple example::
>>> from datetime import *
>>> from swingtime import models as swingtime
>>> et = swingtime.EventType.objects.create(abbr='work', label='Work Related Events')
>>> evt = swingtime.Event.objects.create(
... title='New TPS Cover Sheet',
... description='Kiss off, Lumbergh!',
... event_type=et
... )
>>> evt.add_occurrences(datetime(2008,12,1,16), datetime(2008,12,1,16,15), count=5)
>>> for o in evt.occurrence_set.all():
... print o
...
TPM Report: 2008-12-01T16:00:00
TPM Report: 2008-12-02T16:00:00
TPM Report: 2008-12-03T16:00:00
TPM Report: 2008-12-04T16:00:00
TPM Report: 2008-12-05T16:00:00
A bit more elaborate example, using the the convenience function :func:`models.create_event`::
>>> # pay day is the last Friday of the month at 5pm
>>> evt = swingtime.create_event(
... 'Pay day',
... ('pay', 'Payroll'), # alternate means to add EventType on the fly
... freq=rrule.MONTHLY,
... byweekday=rrule.FR(-1),
... until=datetime(2009,4,1),
... start_time=datetime(2008,12,25,17)
... )
>>> for o in evt.occurrence_set.all():
... print o
...
Pay day: 2008-12-26T17:00:00
Pay day: 2009-01-30T17:00:00
Pay day: 2009-02-27T17:00:00
Pay day: 2009-03-27T17:00:00
Features
--------
* Support for adding complex event occurrences via ``dateutil``
* Ready-made :class:`~forms.MultipleOccurrenceForm` for handling complex input
* Daily, monthly, and annual view functions
* Grid-based daily view generator, complete with alternating or sequential
:class:`~models.EventType` CSS-class handling
* Slightly better than average documentation, a few test cases, and commented code
* Active support (I have to eat my own dogfood)
* Built-in demo project / application
Requirements
------------
* `Django 1.0+ `_
* Python 2.5+ (yeah, sorry, Swingtime won't work with 2.3 or 2.4, but I use
2.5+ exclusively; however, should anyone like to contribute the necessary
backward compatible patches that don't hamstring any of 2.5+ features, I
more than willing to include them).
* The ``dateutil`` `package `_.
Get Swingtime
-------------
Options:
* `Swingtime source code `_
* `Gzipped tarball `_
Settings
--------
Swingtime has it's settings module (:file:`conf/swingtime_settings.py`) that
simulates how each Django project's :file:`setting.py` file functions. You can
overwrite any or all of the configuration parameters described in
:mod:`swingtime_settings` by creating a file in your own project and referencing
that file in your project settings using the name :data:`SWINGTIME_SETTINGS_MODULE`.
For example, from the demo's configuration::
SWINGTIME_SETTINGS_MODULE = 'demo.swingtime_settings'
Demo
====
Swingtime comes with its own demo project and application. The demo is themed as
a Karate studio's website and allows you see and interact with the Swingtime
application.
A live demo can be found at http://swingtime.gorgeofeternalperil.com or run
locally using the `built-in Django development server `_.
Templates
---------
Currently, Swingtime does not include any templates of its own. The demo project
provides some sample templates to use as a guide or starting point.
Sample data
-----------
Within the Swingtime demo is an app named ``karate``, which defines the custom
management command ``loaddemo``. This command will pre-populate your
initial database with some events and occurrences based upon the current date and
time.
Running the demo
----------------
If you've checked out from directly from the trunk directory or exploded the
latest version tarball, you run the demo from anywhere by changing to the
``demo`` directory and running::
$ python manage.py loaddemo
$ python manage.py runserver
Todo List
=========
* Add i18n support
* Include a setup installer (I'm not doing ``easy_install``!)
* Add weekly view
* Import and export .ics files
* Add :class:`~models.Note` support to demo
* Add more tests
* Port over to github