Welcome, guest | Sign In | My Account | Store | Cart

Notice! PyPM is being replaced with the ActiveState Platform, which enhances PyPM’s build and deploy capabilities. Create your free Platform account to download ActivePython or customize Python with the packages you require and get automatic updates.


horae.dashboard is unavailable in PyPM, because there aren't any builds for it in the package repositories. Click the linked icons to find out why.

 Python 2.7Python 3.2Python 3.3
Windows (32-bit)
Windows (64-bit)
Mac OS X (10.5+)
Linux (32-bit)
Linux (64-bit)


The horae.dashboard package provides user and group dashboards for the Horae resource planning system. Every user and groups has its own dashboard which may contain multiple widgets which may be individually positioned and resized.


There are several dashboard widgets already implemented:

Time tracking A widget to track time on tickets User tickets A widget listing the tickets the current user is responsible for Latest A widget listing the latest changed objects of the current user Notifications A widget listing the latest notifications for the current user. Only available if the optional horae.notification package is installed. Work time tracking A widget to track the work time of human resources. Only available if the optional horae.resources package is installed. Reports A widget displaying the results of a previously created report. Only available if the optional horae.reports package is installed.

Creating widgets

Creating custom dashboard widgets is possible through the pluggable architecture of the package. A widget consists of at least four parts:

Interface The interface defining the schema of the widget and extends the base schema provided by horae.dashboard.interfaces.IWidget Widget factory A named global utility implementing horae.dashboard.interfaces.IWidgetFactory Widget A persistent widget extending horae.dashboard.dashboard.Widget and implementing the Interface mentioned above View The view named index rendering the widget in the dashboard

A sample widget having one custom field which is later rendered on the widgets view would be implemented as followed:

System Message: WARNING/2 (<string>, line 51)

Literal block expected; none found.

import grok

from zope import schema from zope.schema.fieldproperty import FieldProperty

from horae.dashboard import dashboard, interfaces

class ISampleWidget(interfaces.IWidget):

content = schema.TextLine( title = u'Content', required = True )

class SampleWidgetFactory(grok.GlobalUtility): grok.name('sample') grok.implements(interfaces.IWidgetFactory)

name = u'Sample' schema = ISampleWidget

def __call__(self): return SampleWidget()

class SampleWidget(dashboard.Widget): grok.implements(ISampleWidget)

title = u'Sample' content = FieldProperty(ISampleWidget['content'])

class SampleWidgetIndex(grok.View): grok.name('index') grok.require('horae.View') grok.context(ISampleWidget)

def render(self): return self.context.content


1.0a1 (2012-01-16)
  • Initial release

Subscribe to package updates

What does the lock icon mean?

Builds marked with a lock icon are only available via PyPM to users with a current ActivePython Business Edition subscription.

Need custom builds or support?

ActivePython Enterprise Edition guarantees priority access to technical support, indemnification, expert consulting and quality-assured language builds.

Plan on re-distributing ActivePython?

Get re-distribution rights and eliminate legal risks with ActivePython OEM Edition.