Plone/Zope time based event mechanism
Project description
collective.timedevents
Overview
collective.timedevents fires clock based Zope 3 events. They can make Zope application react to timers. This is useful for creating services where something must happen regurlarly or after a certain period has expired.
This is a developer level product. This product is indended to replace Products.TickingMachine with more robust Zope 3 codebase.
There are two different styles of using it:
- Using the ITickEvent and calculating if action needs to be done in the event subscriber. This will also take care of timing over zope restarts by keeping event timing persistent.
- Subscribing to any of the cron-style IIntervalTicks*-events, not worrying about the timing client side. For the longer ticks (weekly, montly) a cron-job as trigger makes most sense, in case of zope restarts.
Tested by Travis:
Installation
Add collective.timedevents to your buildout by adding the egg to your buildout.cfg:
eggs = ... collective.timedevents
Trigger
Can either be cron-jobs or zope clock-server.
Add clock server to tick timedevents subscribers - use your Plone instance name:
[instance] ... zope-conf-additional = <clock-server> method /mysite/@@tick period 90 user clockserver-user password password host localhost </clock-server>
Or for the cron-like interval-based events, here 900 seconds for the 15-minute event:
<clock-server> method /mysite/@@tick_fifteen period 900 user clockserver-user password password host localhost </clock-server>
Now you should start to see ticks in the zope event log.
Usage
Subscribe to the events/ticks you need.
- Using the ITickEvent method:
Add collective.timedevents.interfaces.ITickEvent subscribers to your product ZCML declarations:
<configure xmlns="http://namespaces.zope.org/zope" xmlns:browser="http://namespaces.zope.org/browser" i18n_domain="harvinaiset.app"> <subscriber handler="myproduct.tickers.on_tick" for="collective.timedevents.intefaces.ITickEvent" /> </configure>Configure your event handler to react after certain period has expired:
from zope.app.component.hooks import getSite def on_tick(event): """ Do something after one hour has elapsed """ interval_in_days = 1.0 / 24.0 # One hour, floating point context = site.my_magic_context # Persistent object which stores our timing data if event.last_tick > context.last_action + interval_in_days: # Check whether enough time has elaped do_stuff() context.last_action = event.last_tick # Store when we last time did something
- Using the IIntervalTicks*-events:
Add collective.timedevents.interfaces.IIntervalTicks* subscribers to your module ZCML declarations:
<configure xmlns="http://namespaces.zope.org/zope" xmlns:browser="http://namespaces.zope.org/browser" i18n_domain="mymodule"> <subscriber handler="myproduct.tickers.on_tick_fifteen" for="collective.timedevents.intefaces.IIntervalTicks15Event" /> </configure>
Other
All ticking code is executed under admin privileges.
ITickEvent tick period is 300 seconds by default. This can be controlled in views.py.
Ticks for ITickEvent are logged by events.tick_logger defined in configure.zcml.
Quality assurance
This product fills the following quality criteria:
- Unit tests provided
- Good documentation provided
- Commented code
- PyPi eggs provided
Changelog
1.0.4 (2017-04-07)
- Add missing configure.zcml to egg distribution [tomgross]
1.0.3 (2016-02-01)
- One final attempt to include HISTORY.txt into egg [tomgross]
1.0.2 (2016-02-01)
- Fix brown bag release part 2 [tomgross]
1.0.1 (2016-02-01)
- Fix brown bag release [tomgross]
1.0 (2016-01-30)
- Plone 5 compatibility [karalics, tomgross]
0.3 (2013-12-14)
- Travis CI integration [hvelarde]
- Added cron-style tick events, to be triggered by cron or clockserver, with no internal calculation of interval. Updated readme and tests. [sunew]
0.2.1 (2012-04-24)
- Added logging level option for tick_logger [vmaksymiv]
- Bugfix: data storage
0.2
- Added Plone 4 compatibility [kroman0]
0.1.1 (2008-11-04)
- PyPi egg fixes
0.1
- 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.
Filename, size | File type | Python version | Upload date | Hashes |
---|---|---|---|---|
Filename, size collective.timedevents-1.0.4.zip (18.0 kB) | File type Source | Python version None | Upload date | Hashes View |
Hashes for collective.timedevents-1.0.4.zip
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0700929eb5ef1379cc09c7c1aa0b99f10da2bf5b1c3ab334e1791a2c4f4f7d7c |
|
MD5 | 7fd7c0bb3d3eb7270309203c37071550 |
|
BLAKE2-256 | 424282a6cacfe7e91c28d5377537bb6a01b7fc0f6ff3d25aa3ef4fe09eda7526 |