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.records.subscribers.api import get_users_subscribed_to_record, \
get_records_subscribed_by_current_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():
subscribers = get_records_subscribed_by_current_user()
return jsonify(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})