Source code for viapy.views

from django.http import JsonResponse
from dal import autocomplete

from viapy.api import ViafAPI


[docs]class ViafLookup(autocomplete.Select2ListView): '''View to provide VIAF suggestions for autocomplete lookup. Based on :class:`dal.autocompleteSelect2ListView`. Expects search term as query string parameter `q`. Returns viaf URI as identifier and display form as text. '''
[docs] def get(self, request, *args, **kwargs): """Return JSON with suggested VIAF ids and display names.""" viaf = ViafAPI() result = viaf.suggest(self.q) # optionally filter by nametype if set if 'nametype' in self.kwargs: result = [item for item in result if item['nametype'] == self.kwargs['nametype']] return JsonResponse({ 'results': [dict( id=viaf.uri_from_id(item['viafid']), id_number=item['viafid'], text=item['displayForm'], nametype=item['nametype'] # exclude any names that are not personal ) for item in result] })
[docs]class ViafSearch(autocomplete.Select2ListView): '''View to provide VIAF suggestions for autocomplete lookup. Based on :class:`dal.autocompleteSelect2ListView`. Expects search term as query string parameter `q`. Returns viaf URI as identifier and display form as text. '''
[docs] def get(self, request, *args, **kwargs): """Return JSON with suggested VIAF ids and display names.""" viaf = ViafAPI() # search for specific kind of name if set nametype = self.kwargs.get('nametype', None) if nametype == 'personal': result = viaf.find_person(self.q) else: result = viaf.search(self.q) # check for empty search result and return empty json response if result is None: return JsonResponse({'results': []}) return JsonResponse({ 'results': [dict( # id=viaf.uri_from_id(item.recordData.viafID), id=item.uri, id_number=item.viaf_id, text=item.label, nametype=item.nametype, # possibly useful to include, since we have them (for people) birth=item.recordData.birthDate, death=item.recordData.deathDate, # exclude any names that are not personal ) for item in result] })