Joyous 1.2.0 release notes

What’s new


Extended cancellations apply to all occurrences of a recurring event from the cancelled_from_date until the optional cancelled_to_date. If the to date is not given, then the event is cancelled “until further notice”. Named ExtCancellation pages are listed just like named Cancellations.


A recurring event page can now have a closed for holidays page added to it. This indicates that event does not occur on holidays. All holidays or a specific list of holidays can apply. Named ClosedForHolidays pages are listed just like named Cancellations.


  • Joyous holidays can now be added together.
  • The setting that is parsed for Holidays can be changed from JOYOUS_HOLIDAYS.
  • Holidays can be passed to API functions and RecurringEvent to ensure everyone is using the same definition of holidays.


  • When an event is closed for extended cancellations or on holidays these are exported as EXDATES.
  • NOTE: Google Calendar will refuse to import an event with more than about 90 EXDATES. Investigation of this issue is still in progress.


  • Named ExtCancellation pages and named ClosedForHolidays pages are listed just like named Cancellations.

Other features

  • There is a new DateExceptionBase class that CancellationPage, PostponementPage and ExtraInfoPage inherit from.
  • There is a new CancellationBase class that CancellationPage, PostponementPage, ExtCancellationPage, and ClosedForHolidaysPage inherit from.
  • New getLocalTimeAtDate function.
  • RecurringEventPage._getMyFirstDatetimeTo() now takes an optional myFirstDt argument to save from calculating this again.

Bug fixes

  • When _getFromTime takes an atDate it is in the local time zone.
  • Fix _getToDt to add on num_days
  • Record no authority to update an exception as an iCal load failure
  • Fix ExceptionDateInput to take account of JOYOUS_FIRST_DAY_OF_WEEK

Source code restructure

models/ was getting too large so has been broken up. Users of Joyous should not notice any difference.