Skip to content

Commit

Permalink
Merge pull request #830 from HEPData/smodels-bulk-subscription
Browse files Browse the repository at this point in the history
Add SModelS analyses and bulk subscription feature
  • Loading branch information
GraemeWatt authored Oct 31, 2024
2 parents 8dcf0c0 + 1a2e920 commit 563a9a6
Show file tree
Hide file tree
Showing 11 changed files with 63 additions and 15 deletions.
4 changes: 2 additions & 2 deletions hepdata/cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -223,9 +223,9 @@ def do_unload(records_to_unload):

@utils.command()
@with_appcontext
@click.option('--endpoint', '-e', type=str, help='Specific endpoint to update (e.g. "rivet" or "MadAnalysis"). Omit for all.')
@click.option('--endpoint', '-e', type=str, help='Specific endpoint to update (e.g. "rivet" or "MadAnalysis" or "SModelS"). Omit for all.')
def find_and_add_record_analyses(endpoint):
"""Finds analyses such as Rivet and MadAnalysis 5 and adds them to records."""
"""Finds analyses such as Rivet, MadAnalysis 5 and SModelS and adds them to records."""
update_analyses(endpoint)


Expand Down
5 changes: 5 additions & 0 deletions hepdata/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -327,6 +327,11 @@ def _(x):
'endpoint_url': 'https://madanalysis.irmp.ucl.ac.be/raw-attachment/wiki/MA5SandBox/analyses.json',
'url_template': 'https://doi.org/{0}'
},
'SModelS': {
'endpoint_url': 'https://zenodo.org/records/13952092/files/smodels-analyses.hepdata.json?download=1',
'url_template': '{0}',
'subscribe_user_id': 7766
}
#'ufo': {},
#'xfitter': {},
#'applgrid': {},
Expand Down
2 changes: 1 addition & 1 deletion hepdata/ext/opensearch/document_enhancers.py
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ def add_shortened_authors(doc):

def add_analyses(doc):
"""
Add analyses links such as Rivet, MadAnalysis 5, HistFactory and NUISANCE to the index.
Add analyses links such as Rivet, MadAnalysis 5, SModelS, HistFactory and NUISANCE to the index.
:param doc:
:return:
Expand Down
1 change: 1 addition & 0 deletions hepdata/modules/records/assets/js/hepdata_common.js
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ HEPDATA.file_type_to_details = {
"fastnlo": {"icon": "area-chart", "description": "fastNLO Analysis"},
"rivet": {"icon": "area-chart", "description": "Rivet Analysis"},
"madanalysis": {"icon": "area-chart", "description": "MadAnalysis 5 Analysis"},
"smodels": {"icon": "area-chart", "description": "SModelS Analysis"},
"xfitter": {"icon": "area-chart", "description": "xFitter Analysis"},
"applgrid": {"icon": "area-chart", "description": "APPLgrid Analysis"},
"ufo": {"icon": "rocket", "description": "Universal Feynrules Output (UFO)"},
Expand Down
10 changes: 6 additions & 4 deletions hepdata/modules/records/subscribers/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,12 +31,14 @@
from .models import Subscribers


def is_current_user_subscribed_to_record(recid):
if not current_user.is_authenticated:
return False
def is_current_user_subscribed_to_record(recid, user=None):
if not user:
user = current_user
if not current_user.is_authenticated:
return False

return Subscribers.query.filter(Subscribers.publication_recid == recid,
Subscribers.subscribers.contains(current_user)).count() > 0
Subscribers.subscribers.contains(user)).count() > 0


def get_users_subscribed_to_record(recid):
Expand Down
12 changes: 8 additions & 4 deletions hepdata/modules/records/subscribers/rest.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,13 +34,17 @@ def list_subscriptions_for_user():


@blueprint.route('/subscribe/<int:recid>', methods=['POST'])
@login_required
def subscribe(recid):
def subscribe(recid, user=None):
if not user:
user = current_user
if not current_user.is_authenticated:
return jsonify({"success": False, "status_code": 500})

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)
if not user in record_subscribers.subscribers:
record_subscribers.subscribers.append(user)

db.session.add(record_subscribers)
db.session.commit()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ <h4>Add Resource for <span id="selected_resource_item">Submission</span></h4>
<option disabled>Analyses</option>
<option value="applgrid">APPLgrid</option>
<option value="MadAnalysis">MadAnalysis 5</option>
<option value="SModelS">SModelS</option>
<option value="rivet">Rivet</option>
<option value="fastnlo">fastNLO</option>
<option value="ufo">Universal Feynrules Output (UFO)</option>
Expand Down
17 changes: 15 additions & 2 deletions hepdata/modules/records/utils/analyses.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,9 @@
from hepdata.ext.opensearch.api import index_record_ids
from hepdata.modules.submission.api import get_latest_hepsubmission, is_resource_added_to_submission
from hepdata.modules.submission.models import DataResource, HEPSubmission, data_reference_link
from hepdata.utils.users import get_user_from_id
from hepdata.modules.records.subscribers.rest import subscribe
from hepdata.modules.records.subscribers.api import is_current_user_subscribed_to_record

logging.basicConfig()
log = logging.getLogger(__name__)
Expand All @@ -40,9 +43,10 @@
@shared_task
def update_analyses(endpoint=None):
"""
Update (Rivet and MadAnalysis 5) analyses and remove outdated resources.
Update (Rivet, MadAnalysis 5 and SModelS) analyses and remove outdated resources.
Allow bulk subscription to record update notifications if "subscribe_user_id" in endpoint.
:param endpoint: either "Rivet" or "MadAnalysis" or None (default) for both
:param endpoint: either "rivet" or "MadAnalysis" or "SModelS" or None (default) for both
"""
endpoints = current_app.config["ANALYSES_ENDPOINTS"]
for analysis_endpoint in endpoints:
Expand Down Expand Up @@ -137,5 +141,14 @@ def update_analyses(endpoint=None):
db.session.rollback()
log.error(e)

# Allow bulk subscription to record update notifications.
if "subscribe_user_id" in endpoints[analysis_endpoint]:
user = get_user_from_id(endpoints[analysis_endpoint]["subscribe_user_id"])
if user:
for record in analyses:
submission = get_latest_hepsubmission(inspire_id=record, overall_status='finished')
if submission and not is_current_user_subscribed_to_record(submission.publication_recid, user):
subscribe(submission.publication_recid, user)

else:
log.debug("No endpoint url configured for {0}".format(analysis_endpoint))
Original file line number Diff line number Diff line change
Expand Up @@ -236,6 +236,13 @@ <h4>Other useful searches</h4>
(MadAnalysis 5 analysis)
</span>
</li>
<li>
<a href='/search?q=analysis:SModelS&sort_by=latest'
target="_new">analysis:SModelS</a>
<span class="text-muted">
(SModelS analysis)
</span>
</li>
<li>
<a href='/search?q=analysis:HistFactory&sort_by=latest'
target="_new">analysis:HistFactory</a>
Expand Down
2 changes: 1 addition & 1 deletion hepdata/version.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,4 +28,4 @@
and parsed by ``setup.py``.
"""

__version__ = "0.9.4dev20241003"
__version__ = "0.9.4dev20241031"
17 changes: 16 additions & 1 deletion tests/records_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@
get_inspire_records_updated_on, update_record_info, RECORDS_PER_PAGE
from hepdata.modules.inspire_api.views import get_inspire_record_information
from hepdata.config import CFG_TMPDIR
from hepdata.modules.records.subscribers.api import is_current_user_subscribed_to_record


def test_record_creation(app):
Expand Down Expand Up @@ -1030,7 +1031,7 @@ def test_create_breadcrumb_text():


def test_update_analyses(app):
""" Test update of Rivet analyses """
""" Test update of Rivet, MadAnalyses 5 and SModelS analyses """

# Import a record that already has a Rivet analysis attached (but with '#' in the URL)
import_records(['ins1203852'], synchronous=True)
Expand Down Expand Up @@ -1059,6 +1060,20 @@ def test_update_analyses(app):
assert len(analysis_resources) == 1
assert analysis_resources[0].file_location == 'https://doi.org/10.14428/DVN/I2CZWU'

# Import a record that has an associated SModelS analysis
import_records(['ins1847779'], synchronous=True)
analysis_resources = DataResource.query.filter_by(file_type='SModelS').all()
assert len(analysis_resources) == 0
user = User(email='[email protected]', password='hello1', active=True, id=7766)
db.session.add(user)
db.session.commit()
update_analyses('SModelS')
analysis_resources = DataResource.query.filter_by(file_type='SModelS').all()
assert len(analysis_resources) == 1
assert analysis_resources[0].file_location == 'https://smodels.github.io/docs/ListOfAnalyses#ATLAS-EXOT-2018-06'
submission = get_latest_hepsubmission(inspire_id='1847779', overall_status='finished')
assert is_current_user_subscribed_to_record(submission.publication_recid, user)


def test_generate_license_data_by_id(app):
"""
Expand Down

0 comments on commit 563a9a6

Please sign in to comment.