Skip to content

Commit

Permalink
Merge pull request #109 from golnazads/master
Browse files Browse the repository at this point in the history
single parsed bibstem function
  • Loading branch information
golnazads committed Jul 7, 2020
2 parents abdb23e + e3bc64b commit 5383fa5
Show file tree
Hide file tree
Showing 2 changed files with 50 additions and 51 deletions.
14 changes: 7 additions & 7 deletions tugboat/tests/tests_unit/test_search_redirect.py
Expand Up @@ -1284,49 +1284,49 @@ def test_translate_search_docs(self):
req.args.update(self.append_defaults())
view = ClassicSearchRedirectView()
search = view.translate(req)
self.assertEqual('q=' + urllib.quote('bibstem:("Ap&SS")') +
self.assertEqual('q=' + 'bibstem:(' + urllib.quote('"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")') +
self.assertEqual('q=' + 'bibstem:(' + urllib.quote('"ApJ"') + ' OR ' + urllib.quote('"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]') +
self.assertEqual('q=' + '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') +
self.assertEqual('q=' + '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"') +
self.assertEqual('q=' + 'volume:' + urllib.quote('"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"') +
self.assertEqual('q=' + 'page:' + urllib.quote('"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"') +
self.assertEqual('q=' + 'bibstem:(' + urllib.quote('"Ap&SS"') + ')' + urllib.quote(' AND ') + 'year:1987' + urllib.quote(' AND ') + 'page:' + urllib.quote('"211"') +
'&sort=' + urllib.quote('date desc, bibcode desc') + '&format=SHORT/', search)

if __name__ == '__main__':
Expand Down
87 changes: 43 additions & 44 deletions tugboat/views.py
Expand Up @@ -1285,6 +1285,43 @@ def translate_arxiv_sel(self, args):
self.translation.unprocessed_fields.append('arxiv_sel')


def parse_bibstem(self, value):
"""
parse bibstem, no need for validating, just pass it to BBB, if any bibstem has been specified
"""
#
bibstem = ''
# 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:
ref_stems_positive = ''
ref_stems_negative = ''
for e in match:
if e.startswith('-'):
if len(ref_stems_negative) > 0:
ref_stems_negative += ' OR '
ref_stems_negative += urllib.quote('"' + e[1:] + '"')
else:
if len(ref_stems_positive) > 0:
ref_stems_positive += ' OR '
if e.startswith('+'):
ref_stems_positive += urllib.quote('"' + e[1:] + '"')
else:
ref_stems_positive += urllib.quote('"' + e + '"')
if len(ref_stems_positive) > 0 and len(ref_stems_negative) > 0:
bibstem = 'bibstem:(' + ref_stems_positive + ') AND ' + '-bibstem:(' + ref_stems_negative + ')'
elif len(ref_stems_positive) > 0:
bibstem = 'bibstem:(' + ref_stems_positive + ')'
elif len(ref_stems_negative) > 0:
bibstem = '-bibstem:(' + ref_stems_negative + ')'
else:
self.translation.error_message.append('UNRECOGNIZABLE_VALUE')
self.translation.unprocessed_fields.append(value)

return bibstem

def translate_ref_stems(self, args):
"""
BBB: bibstem:(ApJ.. OR AJ..); classic: ref_stems="ApJ..,AJ..."
Expand All @@ -1296,31 +1333,7 @@ def translate_ref_stems(self, args):
# not validating, just pass it to BBB, if any bibstem has been specified
ref_stems = ''
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:
ref_stems_positive = ''
ref_stems_negative = ''
for e in match:
if e.startswith('-'):
if len(ref_stems_negative) > 0:
ref_stems_negative += ' OR '
ref_stems_negative += urllib.quote('"' + e[1:] + '"')
else:
if len(ref_stems_positive) > 0:
ref_stems_positive += ' OR '
if e.startswith('+'):
ref_stems_positive += urllib.quote('"' + e[1:] + '"')
else:
ref_stems_positive += urllib.quote('"' + e + '"')
if len(ref_stems_positive) > 0 and len(ref_stems_negative) > 0:
self.translation.search.append('bibstem:(' + ref_stems_positive + ') AND ' + '-bibstem:(' + ref_stems_negative + ')')
elif len(ref_stems_positive) > 0:
self.translation.search.append('bibstem:(' + ref_stems_positive + ')')
elif len(ref_stems_negative) > 0:
self.translation.search.append('-bibstem:(' + ref_stems_negative + ')')
self.translation.search.append(self.parse_bibstem(value))

def translate_search_docs(self, args):
"""
Expand All @@ -1333,21 +1346,7 @@ def translate_search_docs(self, args):
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)
search = self.parse_bibstem(value)

value = args.pop('year', None)
if value:
Expand All @@ -1359,23 +1358,23 @@ def translate_search_docs(self, args):
year = '[' + value[0] + ' TO ' + value[1] + ']'
else:
year = value[0]
search += (' AND ' if len(search)>0 else '') + 'year:' + year
search += urllib.quote(' 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 + '"'
search += urllib.quote(' AND ' if len(search)>0 else '') + 'page:' + urllib.quote('"' + value + '"')

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

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

@staticmethod
def classic_field_to_array(value):
Expand Down

0 comments on commit 5383fa5

Please sign in to comment.