Source code for viapy.views
from dal import autocomplete
from django.http import JsonResponse
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": [
{
"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": [
{
# '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.VIAFCluster.birthDate,
"death": item.recordData.VIAFCluster.deathDate,
# exclude any names that are not personal
}
for item in result
]
}
)