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
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