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 service_get_custom_actions(editable, revision, user): data = { 'revision': EditingRevisionSignedSchema().dump(revision), 'user': ServiceUserSchema(context={'editable': editable}).dump(user), } path = '/event/{}/editable/{}/{}/{}/actions'.format( _get_event_identifier(editable.event), editable.type.name, editable.contribution_id, revision.id ) try: resp = requests.post(_build_url(editable.event, path), headers=_get_headers(editable.event), json=data) resp.raise_for_status() return ServiceActionSchema(many=True).load(resp.json()) except (requests.RequestException, ValidationError) as exc: _log_service_error(exc, 'Calling listener for custom actions failed') raise ServiceRequestFailed(exc)
def service_handle_new_editable(editable, user): revision = editable.revisions[-1] data = { 'editable': EditableBasicSchema().dump(editable), 'revision': EditingRevisionSignedSchema().dump(revision), 'endpoints': _get_revision_endpoints(revision), 'user': ServiceUserSchema(context={'editable': editable}).dump(user), } try: path = '/event/{}/editable/{}/{}'.format( _get_event_identifier(editable.event), editable.type.name, editable.contribution_id, ) resp = requests.put(_build_url(editable.event, path), headers=_get_headers(editable.event), json=data) resp.raise_for_status() except requests.RequestException as exc: _log_service_error(exc, 'Calling listener for new editable failed') raise ServiceRequestFailed(exc)