From 530b7740d1664231dec94ba47b257ba56a73f90f Mon Sep 17 00:00:00 2001 From: femalves Date: Tue, 15 Jul 2025 17:31:17 -0400 Subject: [PATCH 1/6] fixing bug in notifications --- vault_service/tests/test_user.py | 31 +++++++++++++++++++++++++++++++ vault_service/views/user.py | 18 +++++++++--------- 2 files changed, 40 insertions(+), 9 deletions(-) diff --git a/vault_service/tests/test_user.py b/vault_service/tests/test_user.py index 0736cdf..8938a00 100644 --- a/vault_service/tests/test_user.py +++ b/vault_service/tests/test_user.py @@ -974,5 +974,36 @@ def test_scixplorer_referrer_updates_all_notifications(self): self.assertTrue(notification2.scix_ui) self.assertTrue(notification3.scix_ui) + # Create a fourth notification WITHOUT Scixplorer Host (query type) + r = self.client.post( + url_for('user.myads_notifications'), + data=json.dumps({ + 'name': 'Scixplorer Query', + 'qid': qid, + 'stateful': True, + 'frequency': 'daily', + 'type': 'query' + }), + content_type='application/json', + headers={ + 'Authorization': 'secret', + 'X-api-uid': '42', + } + ) + self.assertStatus(r, 200) + self.assertTrue(r.json['name'] == 'Scixplorer Query') + fourth_notification_id = r.json['id'] + + # Verify ALL notifications now have scix_ui=True + with self.app.session_scope() as session: + notification1 = session.query(MyADS).filter_by(id=first_notification_id).first() + notification2 = session.query(MyADS).filter_by(id=second_notification_id).first() + notification3 = session.query(MyADS).filter_by(id=third_notification_id).first() + notification4 = session.query(MyADS).filter_by(id=fourth_notification_id).first() + self.assertTrue(notification1.scix_ui) + self.assertTrue(notification2.scix_ui) + self.assertTrue(notification3.scix_ui) + self.assertTrue(notification4.scix_ui) + if __name__ == '__main__': unittest.main() diff --git a/vault_service/views/user.py b/vault_service/views/user.py index cc8d2e7..6b80644 100644 --- a/vault_service/views/user.py +++ b/vault_service/views/user.py @@ -407,15 +407,15 @@ def _create_myads_notification(payload=None, headers=None, user_id=None): # qid is an int in the myADS table myads_id = setup.id - # If user is coming from scixplorer but existing notifications don't have scix_ui set to True, update them - if scix_ui_header: - # Check if there are any of user's notifications with scix_ui=False - existing_notifications = session.query(MyADS).filter_by(user_id=user_id).filter_by(scix_ui=False).all() - current_app.logger.info(f'Total notifications to update: {len(existing_notifications)}') - if existing_notifications: - for notification in existing_notifications: - current_app.logger.info(f'Updating notification: {notification.id} for user: {user_id}') - notification.scix_ui = True + # If scix_ui_header is True or any of the notifications have scix_ui=True, update all notifications to scix_ui=True + existing_notifications = session.query(MyADS).filter_by(user_id=user_id).all() + notifications_scix_ui_is_false = [notification for notification in existing_notifications if notification.scix_ui == False] + if scix_ui_header or (len(notifications_scix_ui_is_false) < len(existing_notifications)): + current_app.logger.info(f'Total notifications to update: {len(notifications_scix_ui_is_false)}') + + for notification in notifications_scix_ui_is_false: + current_app.logger.info(f'Updating notification: {notification.id} for user: {user_id}') + notification.scix_ui = True session.commit() except exc.StatementError as e: From 5aa746af977aee7b84a2af1b2b2a794ed3d0c2e5 Mon Sep 17 00:00:00 2001 From: femalves Date: Tue, 15 Jul 2025 17:40:16 -0400 Subject: [PATCH 2/6] adding referrer --- vault_service/tests/test_user.py | 2 +- vault_service/views/user.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/vault_service/tests/test_user.py b/vault_service/tests/test_user.py index 8938a00..c53772f 100644 --- a/vault_service/tests/test_user.py +++ b/vault_service/tests/test_user.py @@ -959,7 +959,7 @@ def test_scixplorer_referrer_updates_all_notifications(self): 'Authorization': 'secret', 'X-api-uid': '42', }, - environ_overrides={'HTTP_HOST': self.app.config['SCIXPLORER_HOST']} + environ_overrides={'HTTP_HOST': self.app.config['SCIXPLORER_HOSTS']} ) self.assertStatus(r, 200) self.assertTrue(r.json['name'] == 'Scixplorer Query') diff --git a/vault_service/views/user.py b/vault_service/views/user.py index 6b80644..0d813fb 100644 --- a/vault_service/views/user.py +++ b/vault_service/views/user.py @@ -294,7 +294,7 @@ def _create_myads_notification(payload=None, headers=None, user_id=None): except KeyError: return json.dumps({'msg': 'No notification type passed'}), 400 - scix_ui_header = current_app.config['SCIXPLORER_HOST'] in request.headers.get('Host', '') + scix_ui_header = any(host in request.headers.get('Host', '') for host in current_app.config['SCIXPLORER_HOSTS']) with current_app.session_scope() as session: try: From 0784f773b0bbd66f0c612ff97d7bd64bcdf29f3f Mon Sep 17 00:00:00 2001 From: femalves Date: Tue, 15 Jul 2025 17:42:26 -0400 Subject: [PATCH 3/6] adding config --- config.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config.py b/config.py index e52b75d..4de72e5 100644 --- a/config.py +++ b/config.py @@ -38,7 +38,7 @@ MYADS_WEEKLY_TIME_RANGE = 6 # days # scixplorer host -SCIXPLORER_HOST = 'scixplorer.org' +SCIXPLORER_HOSTS = ['scixplorer.org', 'nectar'] # arXiv categories and sub-categories ALLOWED_ARXIV_CLASSES = ['astro-ph', From 1c5a701700336edb34d476bfd1e57a7f2df334ab Mon Sep 17 00:00:00 2001 From: femalves Date: Thu, 17 Jul 2025 12:40:31 -0400 Subject: [PATCH 4/6] config.py --- vault_service/tests/test_user.py | 8 ++++---- vault_service/views/user.py | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/vault_service/tests/test_user.py b/vault_service/tests/test_user.py index c53772f..61b87f7 100644 --- a/vault_service/tests/test_user.py +++ b/vault_service/tests/test_user.py @@ -944,7 +944,7 @@ def test_scixplorer_referrer_updates_all_notifications(self): self.assertFalse(notification1.scix_ui) self.assertFalse(notification2.scix_ui) - # Create a third notification WITH Scixplorer Host (query type) + # Create a third notification WITH Scixplorer Referrer (query type) r = self.client.post( url_for('user.myads_notifications'), data=json.dumps({ @@ -957,9 +957,9 @@ def test_scixplorer_referrer_updates_all_notifications(self): content_type='application/json', headers={ 'Authorization': 'secret', - 'X-api-uid': '42', - }, - environ_overrides={'HTTP_HOST': self.app.config['SCIXPLORER_HOSTS']} + 'X-api-uid': '42', + 'Referer': 'https://dev.scixplorer.org/search' + } ) self.assertStatus(r, 200) self.assertTrue(r.json['name'] == 'Scixplorer Query') diff --git a/vault_service/views/user.py b/vault_service/views/user.py index 0d813fb..b0ac6f2 100644 --- a/vault_service/views/user.py +++ b/vault_service/views/user.py @@ -294,7 +294,7 @@ def _create_myads_notification(payload=None, headers=None, user_id=None): except KeyError: return json.dumps({'msg': 'No notification type passed'}), 400 - scix_ui_header = any(host in request.headers.get('Host', '') for host in current_app.config['SCIXPLORER_HOSTS']) + scix_ui_header = urlparse.urlparse(request.referrer).netloc in current_app.config.get("NECTAR_REFERRERS", ["dev.scixplorer.org"]) with current_app.session_scope() as session: try: From c1d3d977ada3b5f4cfabea6fe50554ee68bc2aca Mon Sep 17 00:00:00 2001 From: femalves Date: Thu, 17 Jul 2025 12:42:27 -0400 Subject: [PATCH 5/6] updating config --- config.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/config.py b/config.py index 4de72e5..3cb3a7e 100644 --- a/config.py +++ b/config.py @@ -37,9 +37,6 @@ MYADS_DAILY_TIME_RANGE = 2 # days MYADS_WEEKLY_TIME_RANGE = 6 # days -# scixplorer host -SCIXPLORER_HOSTS = ['scixplorer.org', 'nectar'] - # arXiv categories and sub-categories ALLOWED_ARXIV_CLASSES = ['astro-ph', 'astro-ph.GA', 'astro-ph.CO', 'astro-ph.EP', 'astro-ph.HE', 'astro-ph.IM', 'astro-ph.SR', From 7df7b05517c660cd7cc175cebe29e0d1a0cb6353 Mon Sep 17 00:00:00 2001 From: femalves Date: Thu, 17 Jul 2025 13:51:00 -0400 Subject: [PATCH 6/6] adding nectar referrers --- config.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/config.py b/config.py index 3cb3a7e..f672974 100644 --- a/config.py +++ b/config.py @@ -32,6 +32,8 @@ # user_id for anonymous users - fix in deployment config BOOTSTRAP_USER_ID = 0 +NECTAR_REFERRERS = ["dev.scixplorer.org"] + # import endpoints HARBOUR_MYADS_IMPORT_ENDPOINT = 'https://api.adsabs.harvard.edu/v1/harbour/myads/classic/%s' MYADS_DAILY_TIME_RANGE = 2 # days