Example #1
0
    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
Example #2
0
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
Example #3
0
    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