def _process(self, action, comment): argmap = {'tags': EditingTagsField(self.event, missing=set())} if action in (EditingReviewAction.update, EditingReviewAction.update_accept): argmap['files'] = EditingFilesField(self.event, self.contrib, self.editable_type, allow_claimed_files=True, required=True) args = parser.parse(argmap, unknown=EXCLUDE) service_url = editing_settings.get(self.event, 'service_url') new_revision = review_editable_revision(self.revision, session.user, action, comment, args['tags'], args.get('files')) publish = True if service_url: try: resp = service_handle_review_editable(self.editable, session.user, action, self.revision, new_revision) publish = resp.get('publish', True) except ServiceRequestFailed: raise ServiceUnavailable( _('Failed processing review, please try again later.')) if publish and action in (EditingReviewAction.accept, EditingReviewAction.update_accept): publish_editable_revision(new_revision or self.revision) return '', 204
def service_handle_custom_action(editable, revision, user, action): data = { 'revision': EditingRevisionSignedSchema().dump(revision), 'action': action, 'user': ServiceUserSchema(context={'editable': editable}).dump(user), } try: path = '/event/{}/editable/{}/{}/{}/action'.format( _get_event_identifier(editable.event), editable.type.name, editable.contribution_id, revision.id ) resp = requests.post(_build_url(editable.event, path), headers=_get_headers(editable.event), json=data) resp.raise_for_status() resp = ServiceActionResultSchema().load(resp.json()) except (requests.RequestException, ValidationError) as exc: _log_service_error(exc, 'Calling listener for triggering custom action failed') raise ServiceRequestFailed(exc) if revision.final_state == FinalRevisionState.accepted: publish = resp.get('publish') if publish: publish_editable_revision(revision) elif publish is False: revision.editable.published_revision = None if 'tags' in resp: revision.tags = {tag for tag in editable.event.editing_tags if tag.id in map(int, resp['tags'])} for comment in resp.get('comments', []): create_revision_comment(revision, User.get_system_user(), comment['text'], internal=comment['internal']) db.session.flush() return resp
def _process(self, action, comment): confirm_editable_changes(self.revision, session.user, action, comment) service_url = editing_settings.get(self.event, 'service_url') publish = True if service_url: try: resp = service_handle_review_editable(self.editable, session.user, action, self.revision) publish = resp.get('publish', True) except ServiceRequestFailed: raise ServiceUnavailable(_('Failed processing review, please try again later.')) if publish and action == EditingConfirmationAction.accept: publish_editable_revision(self.revision) return '', 204