tasks.py 文件源码

python
阅读 27 收藏 0 点赞 0 评论 0

项目:invenio-github 作者: inveniosoftware 项目源码 文件源码
def process_release(release_id, verify_sender=False):
    """Process a received Release."""
    from invenio_db import db
    from invenio_rest.errors import RESTException

    from .errors import InvalidSenderError
    from .models import Release, ReleaseStatus
    from .proxies import current_github

    release_model = Release.query.filter(
        Release.release_id == release_id,
        Release.status.in_([ReleaseStatus.RECEIVED, ReleaseStatus.FAILED]),
    ).one()
    release_model.status = ReleaseStatus.PROCESSING
    db.session.commit()

    release = current_github.release_api_class(release_model)
    if verify_sender and not release.verify_sender():
        raise InvalidSenderError(
            u'Invalid sender for event {event} for user {user}'
            .format(event=release.event.id, user=release.event.user_id)
        )

    def _get_err_obj(msg):
        """Generate the error entry with a Sentry ID."""
        err = {'errors': msg}
        if hasattr(g, 'sentry_event_id'):
            err['error_id'] = str(g.sentry_event_id)
        return err

    try:
        release.publish()
        release.model.status = ReleaseStatus.PUBLISHED
    except RESTException as rest_ex:
        release.model.errors = json.loads(rest_ex.get_body())
        release.model.status = ReleaseStatus.FAILED
        current_app.logger.exception(
            u'Error while processing {release}'.format(release=release.model))
    # TODO: We may want to handle GitHub errors differently in the future
    # except GitHubError as github_ex:
    #     release.model.errors = {'error': str(e)}
    #     release.model.status = ReleaseStatus.FAILED
    #     current_app.logger.exception(
    #         'Error while processing {release}'
    #         .format(release=release.model))
    except CustomGitHubMetadataError as e:
        release.model.errors = _get_err_obj(str(e))
        release.model.status = ReleaseStatus.FAILED
        current_app.logger.exception(
            u'Error while processing {release}'.format(release=release.model))
    except Exception:
        release.model.errors = _get_err_obj('Unknown error occured.')
        release.model.status = ReleaseStatus.FAILED
        current_app.logger.exception(
            u'Error while processing {release}'.format(release=release.model))
    finally:
        db.session.commit()
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号