def stat_message(message, now): """Creates a stat document from the given message, relative to now.""" oid = message['_id'] created = oid_utc(oid) age = timeutils.delta_seconds(created, now) return { 'id': str(oid), 'age': int(age), 'created': timeutils.isotime(created), }
def first(self, queue, project=None, sort=1): if project is None: project = '' qid = utils.get_qid(self.driver, queue, project) sel = sa.sql.select([tables.Messages.c.id, tables.Messages.c.body, tables.Messages.c.ttl, tables.Messages.c.created], sa.and_( tables.Messages.c.ttl > sfunc.now() - tables.Messages.c.created, tables.Messages.c.qid == qid)) if sort not in (1, -1): raise ValueError(u'sort must be either 1 (ascending) ' u'or -1 (descending)') order = sa.asc if sort == -1: order = sa.desc sel = sel.order_by(order(tables.Messages.c.id)) try: id, body, ttl, created = self.driver.get(sel) except utils.NoResult: raise errors.QueueIsEmpty(queue, project) created_iso = timeutils.isotime(created) return { 'id': utils.msgid_encode(id), 'ttl': ttl, 'created': created_iso, 'age': int((timeutils.utcnow() - created).seconds), 'body': body, }