Example #1
0
File: request.py Project: siq/flux
    def update(self, request, response, subject, data):
        if not data:
            return subject

        session = self.schema.session
        message = data.get('message')

        new_status = subject.update(session, self.docket_entity, **data)
        session.flush()

        if message:
            Message.create(session, subject.id, **message)

        session.commit()

        if new_status:
            Event.create(topic='request:changed', aspects={'id': subject.id})

        if new_status == 'pending':
            ScheduledTask.queue_http_task('initiate-request',
                self.flux.prepare('flux/1.0/request', 'task', None,
                {'task': 'initiate-request', 'id': subject.id}))
        elif new_status == 'completed':
            try:
                Event.create(topic='request:completed', aspects={'id': subject.id})
            except Exception:
                log('exception', 'failed to fire request:completed event')
        elif new_status == 'canceled':
            ScheduledTask.queue_http_task('cancel-request',
                self.flux.prepare('flux/1.0/request', 'task', None,
                {'task': 'cancel-request', 'id': subject.id}))
            try:
                Event.create(topic='request:completed', aspects={'id': subject.id})
            except Exception:
                log('exception', 'failed to fire request:completed event')

        elif new_status == 'declined':
            ScheduledTask.queue_http_task('decline-request',
                self.flux.prepare('flux/1.0/request', 'task', None,
                {'task': 'decline-request', 'id': subject.id}))
            try:
                Event.create(topic='request:completed', aspects={'id': subject.id})
            except Exception:
                log('exception', 'failed to fire request:completed event')

        return subject
Example #2
0
File: request.py Project: siq/flux
    def create(self, request, response, subject, data):
        session = self.schema.session
        message = data.pop('message', None)

        subject = self.model.create(session, **data)
        try:
            session.flush()
        except IntegrityError:
            raise OperationError(token='duplicate-request-name')

        if message:
            Message.create(session, subject.id, **message)

        session.commit()

        if subject.status == 'pending':
            ScheduledTask.queue_http_task('initiate-request',
                self.flux.prepare('flux/1.0/request', 'task', None,
                {'task': 'initiate-request', 'id': subject.id}))

        return subject