diff options
author | Marko Kreen | 2007-03-13 11:52:09 +0000 |
---|---|---|
committer | Marko Kreen | 2007-03-13 11:52:09 +0000 |
commit | 50abdba44a031ad40b1886f941479f203ca92039 (patch) | |
tree | 873e72d78cd48917b2907c4c63abf185649ebb54 /python/pgq/event.py |
final public releaseskytools_2_1
Diffstat (limited to 'python/pgq/event.py')
-rw-r--r-- | python/pgq/event.py | 60 |
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 + |