Skip to content

Commit

Permalink
addressed issues 105 and 106
Browse files Browse the repository at this point in the history
  • Loading branch information
golnazads committed Jul 7, 2020
1 parent 061acdf commit a6c42b3
Show file tree
Hide file tree
Showing 2 changed files with 135 additions and 3 deletions.
69 changes: 69 additions & 0 deletions tugboat/tests/tests_unit/test_search_redirect.py
Expand Up @@ -108,6 +108,7 @@ def test_object(self):
req.prepare()
req.args = MultiDict()
req.mimetype = None

req.args = MultiDict([('object', urllib.quote('M31'))])
req.args.update(self.append_defaults())
view = ClassicSearchRedirectView()
Expand All @@ -131,6 +132,13 @@ def test_object(self):
'&sort=' + urllib.quote('date desc, bibcode desc') + '&format=SHORT' + '/',
search) # object, semicolor separator

req.args = MultiDict([('object', urllib.quote('GX 1+4'))])
req.args.update(self.append_defaults())
view = ClassicSearchRedirectView()
search = view.translate(req)
self.assertEqual('q=' + urllib.quote('object:') + '(' + urllib.quote('"GX 1+4"') + ')' +
'&sort=' + urllib.quote('date desc, bibcode desc') + '&format=SHORT' + '/', search)

def test_title(self):
"""title field"""
req = Request('get', 'http://test.test?')
Expand Down Expand Up @@ -1010,6 +1018,13 @@ def test_ref_stems(self):
'-bibstem:(' + urllib.quote('"CLic2"') + ' OR ' + urllib.quote('"JPhy4"') + ')' +
'&sort=' + urllib.quote('date desc, bibcode desc') + '&format=SHORT' + '/', search)

req.args = MultiDict([('ref_stems', 'A&A....33')])
req.args.update(self.append_defaults())
view = ClassicSearchRedirectView()
search = view.translate(req)
self.assertEqual('q=bibstem:(' + urllib.quote('"A&A....33"') + ')' +
'&sort=' + urllib.quote('date desc, bibcode desc') + '&format=SHORT' + '/', search)

def test_myads_query(self):
"""test query_type"""
req = Request('get', 'http://test.test?')
Expand Down Expand Up @@ -1260,5 +1275,59 @@ def test_translate_bibcode(self):
self.assertEqual('q=' + urllib.quote('bibcode:') + '(' + urllib.quote('2???ivoa.spec* OR 2???ivoa.rept*') + ')' +
'&sort=' + urllib.quote('date desc, bibcode desc') + '&format=SHORT/', search)

def test_translate_search_docs(self):
req = Request('get', 'http://test.test?')
req.prepare()
req.mimetype = None

req.args = MultiDict([('bibstem', 'Ap&SS')])
req.args.update(self.append_defaults())
view = ClassicSearchRedirectView()
search = view.translate(req)
self.assertEqual('q=' + urllib.quote('bibstem:("Ap&SS")') +
'&sort=' + urllib.quote('date desc, bibcode desc') + '&format=SHORT/', search)

req.args = MultiDict([('bibstem', 'ApJ,AJ')])
req.args.update(self.append_defaults())
view = ClassicSearchRedirectView()
search = view.translate(req)
self.assertEqual('q=' + urllib.quote_plus('bibstem:("ApJ" OR "AJ")') +
'&sort=' + urllib.quote('date desc, bibcode desc') + '&format=SHORT/', search)

req.args = MultiDict([('year', '2019-2020')])
req.args.update(self.append_defaults())
view = ClassicSearchRedirectView()
search = view.translate(req)
self.assertEqual('q=' + urllib.quote_plus('year:[2019 TO 2020]') +
'&sort=' + urllib.quote('date desc, bibcode desc') + '&format=SHORT/', search)

req.args = MultiDict([('year', '2020')])
req.args.update(self.append_defaults())
view = ClassicSearchRedirectView()
search = view.translate(req)
self.assertEqual('q=' + urllib.quote('year:2020') +
'&sort=' + urllib.quote('date desc, bibcode desc') + '&format=SHORT/', search)

req.args = MultiDict([('volume', '12')])
req.args.update(self.append_defaults())
view = ClassicSearchRedirectView()
search = view.translate(req)
self.assertEqual('q=' + urllib.quote('volume:"12"') +
'&sort=' + urllib.quote('date desc, bibcode desc') + '&format=SHORT/', search)

req.args = MultiDict([('page', '211')])
req.args.update(self.append_defaults())
view = ClassicSearchRedirectView()
search = view.translate(req)
self.assertEqual('q=' + urllib.quote('page:"211"') +
'&sort=' + urllib.quote('date desc, bibcode desc') + '&format=SHORT/', search)

req.args = MultiDict([('bibstem', 'Ap&SS'), ('year', '1987'), ('page', '211')])
req.args.update(self.append_defaults())
view = ClassicSearchRedirectView()
search = view.translate(req)
self.assertEqual('q=' + urllib.quote_plus('bibstem:("Ap&SS") AND year:1987 AND page:"211"') +
'&sort=' + urllib.quote('date desc, bibcode desc') + '&format=SHORT/', search)

if __name__ == '__main__':
unittest.main(verbosity=2)
69 changes: 66 additions & 3 deletions tugboat/views.py
Expand Up @@ -203,7 +203,14 @@ def __init__(self):
'bibcode': fields.Str(required=False),

# 12/10 support secondary db
'db_key2': fields.Str(required=False)
'db_key2': fields.Str(required=False),

# 6/22/2020 support bibstem, volume and page
'bibstem': fields.Str(required=False),
'year': fields.Str(required=False),
'volume': fields.Str(required=False),
'page': fields.Str(required=False),

}


Expand Down Expand Up @@ -269,7 +276,7 @@ def translate(self, request):
self.translate_jou_pick, self.translate_group_sel,
self.translate_sort, self.translate_to_ignore,
self.translate_weights, self.translate_arxiv_sel,
self.translate_ref_stems]
self.translate_ref_stems, self.translate_search_docs]
for f in funcs:
f(args) # each may contribute to self.translation singleton

Expand Down Expand Up @@ -1290,7 +1297,8 @@ def translate_ref_stems(self, args):
ref_stems = ''
if len(value) > 0:
# there is A&A, GCN1, CLic2, JPhy3, JPhy4
match = re.findall('([-+]*[A-Za-z&1-4]{2,5})', value)
# or it could be something like A&A....33
match = re.findall('([-+]*[A-Za-z&.1-4]{2,9})', value)
# yes
if match:
ref_stems_positive = ''
Expand All @@ -1314,6 +1322,61 @@ def translate_ref_stems(self, args):
elif len(ref_stems_negative) > 0:
self.translation.search.append('-bibstem:(' + ref_stems_negative + ')')

def translate_search_docs(self, args):
"""
translate four params bibstem, year, volume, and page
BBB: bibstem:(ApJ.. OR AJ..); classic: bibstem="ApJ..,AJ..."
BBB: year:[2019 TO 2020]; classic: year="2019-2020" OR
BBB: year:2019; classic: year=2019
"""
search = ''
value = args.pop('bibstem', None)
if value:
if len(value) > 0:
# there is A&A, GCN1, CLic2, JPhy3, JPhy4
# or it could be something like A&A....33
match = re.findall('([A-Za-z&.1-4]{2,9})', value)
# yes
if match:
bibstem = ''
for b in match:
if len(bibstem) > 0:
bibstem += ' OR '
bibstem += '"' + b + '"'
if len(bibstem) > 0:
search += 'bibstem:(' + bibstem + ')'
else:
self.translation.error_message.append('UNRECOGNIZABLE_VALUE')
self.translation.unprocessed_fields.append(value)

value = args.pop('year', None)
if value:
if len(value) > 0:
match = re.search('^([12][089]\d\d-[12][089]\d\d|[12][089]\d\d)$', value)
if match:
value = value.split('-')
if len(value) == 2:
year = '[' + value[0] + ' TO ' + value[1] + ']'
else:
year = value[0]
search += (' AND ' if len(search)>0 else '') + 'year:' + year
else:
self.translation.error_message.append('UNRECOGNIZABLE_VALUE')
self.translation.unprocessed_fields.append(value)

value = args.pop('page', None)
if value:
if len(value) > 0:
search += (' AND ' if len(search)>0 else '') + 'page:"' + value + '"'

value = args.pop('volume', None)
if value:
if len(value) > 0:
search += (' AND ' if len(search)>0 else '') + 'volume:"' + value + '"'

if len(search) > 0:
self.translation.search.append(urllib.quote_plus(search))

@staticmethod
def classic_field_to_array(value):
""" convert authors/objects/title/abstract search words from classic to list"""
Expand Down

0 comments on commit a6c42b3

Please sign in to comment.