summaryrefslogtreecommitdiff
path: root/python/pgq/event.py
diff options
context:
space:
mode:
authorMarko Kreen2007-03-13 11:52:09 +0000
committerMarko Kreen2007-03-13 11:52:09 +0000
commit50abdba44a031ad40b1886f941479f203ca92039 (patch)
tree873e72d78cd48917b2907c4c63abf185649ebb54 /python/pgq/event.py
final public releaseskytools_2_1
Diffstat (limited to 'python/pgq/event.py')
-rw-r--r--python/pgq/event.py60
1 files changed, 60 insertions, 0 deletions
diff --git a/python/pgq/event.py b/python/pgq/event.py
new file mode 100644
index 00000000..d7b2d7ee
--- /dev/null
+++ b/python/pgq/event.py
@@ -0,0 +1,60 @@
+
+"""PgQ event container.
+"""
+
+__all__ = ('EV_RETRY', 'EV_DONE', 'EV_FAILED', 'Event')
+
+# Event status codes
+EV_RETRY = 0
+EV_DONE = 1
+EV_FAILED = 2
+
+_fldmap = {
+ 'ev_id': 'ev_id',
+ 'ev_txid': 'ev_txid',
+ 'ev_time': 'ev_time',
+ 'ev_type': 'ev_type',
+ 'ev_data': 'ev_data',
+ 'ev_extra1': 'ev_extra1',
+ 'ev_extra2': 'ev_extra2',
+ 'ev_extra3': 'ev_extra3',
+ 'ev_extra4': 'ev_extra4',
+
+ 'id': 'ev_id',
+ 'txid': 'ev_txid',
+ 'time': 'ev_time',
+ 'type': 'ev_type',
+ 'data': 'ev_data',
+ 'extra1': 'ev_extra1',
+ 'extra2': 'ev_extra2',
+ 'extra3': 'ev_extra3',
+ 'extra4': 'ev_extra4',
+}
+
+class Event(object):
+ """Event data for consumers.
+
+ Consumer is supposed to tag them after processing.
+ If not, events will stay in retry queue.
+ """
+ def __init__(self, queue_name, row):
+ self._event_row = row
+ self.status = EV_RETRY
+ self.retry_time = 60
+ self.fail_reason = "Buggy consumer"
+ self.queue_name = queue_name
+
+ def __getattr__(self, key):
+ return self._event_row[_fldmap[key]]
+
+ def tag_done(self):
+ self.status = EV_DONE
+
+ def tag_retry(self, retry_time = 60):
+ self.status = EV_RETRY
+ self.retry_time = retry_time
+
+ def tag_failed(self, reason):
+ self.status = EV_FAILED
+ self.fail_reason = reason
+