Skip to main content

Provides functionality to subscribe to an object

Project description


horae.subscription provides generic subscription functionality for the Horae resource planning system.


Objects marked with the horae.subscription.interfaces.ISubscribeable interfaces receive the functionality of being subscribed to. Which means a viewlet is displayed rendering all subscribers and a button to subscribe and unsubscribe if an adapter implementing horae.subscription.interfaces.ISubscriber and adapting the request is available.

The subscribers of an horae.subscription.interfaces.ISubscribeable may be notified by using the horae.subscription.interfaces.ISubscription adapter. First some basic implementations are required:

import grok

from horae.subscription import interfaces

class Subscriber(object):

    def __init__(self, id, name, url=None): = id = name
        self.url = url

    def notify(self, message, subject):
        """ Sends the message to the subscriber
        print + ': (' + subject + ') ' + subject

    def available(self, context):
        """ Whether this subscriber is currently available or not
        return True

class Message(object):

    def __init__(self, subject, message):
        self._subject = subject
        self._message = message

    def subject(self):
        """ Returns the subject of the notification to be sent
        return self._subject

    def message(self, html=False):
        """ Returns the notification message to be sent
        return self._message

class Subscribeable(grok.Model):

With those implementations in place some subscriptions may be made and a message may be sent to them.

First we create a subscribeable object:

>>> subscribeable = Subscribeable()

Now we create two subscribers and subscribe them to the subscribeable:

>>> subscriber1 = Subscriber('jsmith', 'John Smith')
>>> subscriber2 = Subscriber('jdoe', 'John Doe')
>>> subscription = interfaces.ISubscription(subscribeable)
>>> subscription.subscribe(subscriber1)
>>> subscription.subscribe(subscriber2)

And send out a message:

>>> message = Message('Test subject', 'Test message')
>>> sent, failed = subscription.notify(message)
John Smith: (Test subject) Test message
John Doe: (Test subject) Test message
>>> sent
>>> failed

Unsubscription is also done using the subscription adapter:

>>> subscription.unsubscribe(
>>> sent, failed = subscription.notify(message)
John Smith: (Test subject) Test message
>>> sent
>>> failed



Third party


1.0a1 (2012-01-16)

  • Initial release

Project details

Download files

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

Source Distribution

horae.subscription-1.0a1.tar.gz (5.6 kB view hashes)

Uploaded source

Supported by

AWS AWS Cloud computing Datadog Datadog Monitoring Facebook / Instagram Facebook / Instagram PSF Sponsor Fastly Fastly CDN Google Google Object Storage and Download Analytics Huawei Huawei PSF Sponsor Microsoft Microsoft PSF Sponsor NVIDIA NVIDIA PSF Sponsor Pingdom Pingdom Monitoring Salesforce Salesforce PSF Sponsor Sentry Sentry Error logging StatusPage StatusPage Status page