diff --git a/vault_service/tests/test_user.py b/vault_service/tests/test_user.py index 1dca569..c3bd698 100644 --- a/vault_service/tests/test_user.py +++ b/vault_service/tests/test_user.py @@ -498,5 +498,28 @@ def test_template_query(self): self.assertEquals(r.json[0]['name'], 'test query') self.assertEquals(r.json[1]['name'], 'Favorite Authors - Recent Papers') + # save an arXiv query without keywords + r = self.client.post(url_for('user.myads_notifications'), + headers={'Authorization': 'secret', 'X-Adsws-Uid': '4'}, + data=json.dumps({'type': 'template', + 'template': 'arxiv', + 'classes': ['cs']}), + content_type='application/json') + + self.assertStatus(r, 200) + self.assertEquals(r.json['data'], None) + + r = self.client.post(url_for('user.myads_notifications'), + headers={'Authorization': 'secret', 'X-Adsws-Uid': '4'}, + data=json.dumps({'type': 'template', + 'data': '', + 'template': 'arxiv', + 'classes': ['hep-ex']}), + content_type='application/json') + + self.assertStatus(r, 200) + self.assertEquals(r.json['data'], None) + + if __name__ == '__main__': unittest.main() diff --git a/vault_service/views/user.py b/vault_service/views/user.py index a669df5..ce67058 100644 --- a/vault_service/views/user.py +++ b/vault_service/views/user.py @@ -317,6 +317,11 @@ def _create_myads_notification(payload=None, headers=None, user_id=None): frequency=payload.get('frequency')) elif ntype == 'template': + # handles both None values and empty strings + if not payload.get('data'): + payload['old_data'] = payload.get('data', None) + payload['data'] = None + if 'template' not in payload: return json.dumps({'msg': 'Bad data passed'}), 400 @@ -329,11 +334,12 @@ def _create_myads_notification(payload=None, headers=None, user_id=None): if not set(payload.get('classes')).issubset(set(current_app.config['ALLOWED_ARXIV_CLASSES'])): return json.dumps({'msg': 'Bad data passed'}), 400 - # verify data/query - solrq = 'q=' + payload['data'] + '&wt=json' - r = make_solr_request(query=solrq, headers=headers) - if r.status_code != 200: - return json.dumps({'msg': 'Could not verify the query.', 'query': payload, 'reason': r.text}), 404 + if payload.get('data', None): + # verify data/query + solrq = 'q=' + payload.get('data') + '&wt=json' + r = make_solr_request(query=solrq, headers=headers) + if r.status_code != 200: + return json.dumps({'msg': 'Could not verify the query.', 'query': payload, 'reason': r.text}), 404 # add metadata if payload['template'] == 'arxiv': @@ -342,7 +348,10 @@ def _create_myads_notification(payload=None, headers=None, user_id=None): data = payload.get('data', None) stateful = False frequency = payload.get('frequency', 'daily') - name = '{0} - Recent Papers'.format(get_keyword_query_name(payload['data'])) + if payload.get('data', None): + name = '{0} - Recent Papers'.format(get_keyword_query_name(payload['data'])) + else: + name = 'Recent Papers' elif payload['template'] == 'citations': template = 'citations' classes = None @@ -435,6 +444,11 @@ def _edit_myads_notification(payload=None, headers=None, user_id=None, myads_id= :param myads_id: ID of a single notification :return: json, details of edited setup """ + # handles both None values and empty strings + if not payload.get('data'): + payload['old_data'] = payload.get('data', None) + payload['data'] = None + # verify data/query if payload.get('data', None): solrq = 'q=' + payload['data'] + '&wt=json'