Skip to content

Commit

Permalink
Merge pull request #42 from kelockhart/myads-data-fix
Browse files Browse the repository at this point in the history
Bug fix on empty data, handle empty data strings
  • Loading branch information
kelockhart authored Dec 6, 2019
2 parents 2705004 + d60dc90 commit d2de909
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 6 deletions.
23 changes: 23 additions & 0 deletions vault_service/tests/test_user.py
Original file line number Diff line number Diff line change
Expand Up @@ -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()
26 changes: 20 additions & 6 deletions vault_service/views/user.py
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand All @@ -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':
Expand All @@ -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
Expand Down Expand Up @@ -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'
Expand Down

0 comments on commit d2de909

Please sign in to comment.