Author: Daniel Nouri, Thomas Clement Mogensen and contributors




Singing is a Zope 3 library for sending notifications and newsletters.

You can find the development version of collective.singing in the
`Subversion repository


0.7.1 (2010-12-03)

- Added ``keep_sent_messages`` flag on channels which, if set to
  ``False`` (the default), suppresses the behavior which would
  otherwise put sent messages into a persistent queue.

  If sent messages are dropped (as per this flag), an entry is instead
  written to the log to keep a minimal record of events.

0.7.0 (2010-11-04)

- Moved z3c widget template registration for radio buttons and checkboxes 
  from ``browser/configure.zcml`` into ``widgets.zcml`` because every version 
  of z3c.form after 2.3.3 includes these template registrations and double 
  registration raises ConfigurationConflictError.  [saily] 

0.6.15 (2010-08-01)

- import; this helps for Plone 4

- strange issue with equality of scheduler objects adressed.
  This seems to only be an issue in python 2.6.
  This should probably be released soon since it fixes a lot
  of bugs in the ForPloneFour branch of dancing.
- Norwegian translation. [regebro]

Version 0.6.14 - 2010-04-07

- Update Dutch translation.

- Update French translation

Version 0.6.13 - 2009-10-19

- API change! Added boolean "subscribeable" to IChannel.

- Added Brazilian translation 

Version 0.6.12 - 2009-06-11

- Optimization for clearing a MessageQueue. We now simple create a fresh
  queue instead of pull()'ing all items (pulling is quite expensive with

- Subscription creation date is now used as que when the subscription has
  no real cue. I.e. the first time a new subscription is used.
  I was amazed to find this was not already the case.

- Triggering a periodic scheduler that has a delta now always updates
  trickered_last by a product of that delta. This means the periodic
  schedulers now no longer suffer from the time "drift" that resulted
  from always saving the precise triggering time to their triggered_last

- Added caching of item formatting via plone.memoize.request.
  This really(!) speeds up message generation, especially when
  sending 'full' items from 'send as newsletter'.

Version 0.6.11 - 2009-03-11

- Added optional keyword argument 'override_vars' to IComposer.render and
  MessageAssemble.__call__ methods. This is to facilitate overriding of
  composer_vars. For example from the sendnewsletter.html form in
  collective.dancing. Send-outs stored in TimedScheduler will now
  also include 'override_vars'.

- Removed version pinning of to <= 3.6.0.  This is
  handled through our external extends file now.  See

Version 0.6.10 - 2009-02-01

- Changed eventhandlers for subscriptions indexing to look for
  the Subscriptions object in 'channel._subscriptions' first.
  This allows for a property decorated 'subscriptions' function
  that keeps data in '_subscriptions'.

Version 0.6.9 - 2009-01-20

- Pinned version to pre 3.6.0 to avoid issue in

Version 0.6.8 - 2009-01-02

- MessageQueues are now collective.singing.queue.CompositeQueue - an
  optimized version of zc.queue.CompositeQueue. This offers a _much_
  faster __len__ and  faster access to last queue element.
  Tests are stolen from zc.