Source code for hepdata.modules.records.subscribers.rest

from flask import Blueprint, jsonify
from flask_login import login_required, current_user
from invenio_db import db

from hepdata.modules.dashboard.api import get_dashboard_current_user
from hepdata.modules.records.subscribers.api import get_users_subscribed_to_record, \
    get_records_subscribed_by_user
from hepdata.modules.records.utils.common import get_or_create
from .models import Subscribers

blueprint = Blueprint(
    'subscribers',
    __name__,
    url_prefix='/subscriptions'
)


[docs] @blueprint.route('/list/record/<int:recid>', methods=['GET']) @login_required def list_subscribers_to_record(recid): subscribers = get_users_subscribed_to_record(recid) return jsonify(subscribers)
[docs] @blueprint.route('/list/', methods=['GET']) @login_required def list_subscriptions_for_user(): user = get_dashboard_current_user(current_user) subscribers = get_records_subscribed_by_user(user) return jsonify({ 'disable_button': user != current_user, 'records': subscribers })
[docs] @blueprint.route('/subscribe/<int:recid>', methods=['POST']) @login_required def subscribe(recid): record_subscribers = get_or_create(db.session, Subscribers, publication_recid=recid) try: if not current_user in record_subscribers.subscribers: record_subscribers.subscribers.append(current_user) db.session.add(record_subscribers) db.session.commit() return jsonify({"success": True}) except: db.session.rollback() return jsonify({"success": False, "status_code": 500})
[docs] @blueprint.route('/unsubscribe/<int:recid>', methods=['POST']) @login_required def unsubscribe(recid): record_subscribers = get_or_create(db.session, Subscribers, publication_recid=recid) try: if current_user in record_subscribers.subscribers: record_subscribers.subscribers.remove(current_user) db.session.add(record_subscribers) db.session.commit() return jsonify({"success": True}) except: db.session.rollback() return jsonify({"success": False, "status_code": 500})