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 service_handle_review_editable(editable, user, action, parent_revision, revision=None): new_revision = revision or parent_revision data = { 'action': action.name, 'revision': EditingRevisionSignedSchema().dump(new_revision), 'endpoints': _get_revision_endpoints(new_revision), 'user': ServiceUserSchema(context={'editable': editable}).dump(user), } try: path = '/event/{}/editable/{}/{}/{}'.format( _get_event_identifier(editable.event), editable.type.name, editable.contribution_id, new_revision.id ) resp = requests.post(_build_url(editable.event, path), headers=_get_headers(editable.event), json=data) resp.raise_for_status() resp = ServiceReviewEditableSchema().load(resp.json()) if 'comment' in resp: parent_revision.comment = resp['comment'] if 'tags' in resp: parent_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(new_revision, User.get_system_user(), comment['text'], internal=comment['internal']) db.session.flush() return resp except (requests.RequestException, ValidationError) as exc: _log_service_error(exc, 'Calling listener for editable revision failed') raise ServiceRequestFailed(exc)
def _process(self, text, internal): user = session.user if self.is_service_call: user = User.get_system_user() elif internal and not self.editable.can_use_internal_comments(session.user): internal = False create_revision_comment(self.revision, user, text, internal) return '', 201
def _process(self, text, internal): if internal and not self.editable.can_use_internal_comments( session.user): internal = False create_revision_comment(self.revision, session.user, text, internal) return '', 201
def _process(self, text, internal): if internal and not self._user_is_authorized_editor(): internal = False create_revision_comment(self.revision, session.user, text, internal) return '', 201