Source code for dhlab.metadata.natbib2

"Query service for natbib metadata"


import requests


[docs] class QueryBuilder: """Query builder for the metadata_query2 service. This service allows for querying the Norwegian National Bibliography using Marc 21 fields and values. Example of usage: builder = QueryBuilder() result = (builder.add_field("field1", "subfield1", "value1") .add_field("field2", "subfield2", "value2") .set_return_fields("returnField1", "returnField2", "returnField3") .set_limit(1000) .post()) """ endpoint = ( "https://api.nb.no/dhlab/metadata_query2" ) def __init__(self): self.query = {"fields": [], "returnFields": [], "limit": None}
[docs] def add_field(self, field, subfield=None, value=None): """Add a field constraint to the query. Should be field + value for marc21 without subfields (<11) and field + subfield + value for marc21 with subfields (>=11 """ field_entry = {"field": field} if subfield: field_entry["subfield"] = subfield if value: field_entry["value"] = value self.query["fields"].append(field_entry) return self
[docs] def set_return_fields(self, *fields): "Specify which fields to return in the response." self.query["returnFields"] = list(fields) return self
[docs] def set_limit(self, limit): "Specify the maximum number of records to return." self.query["limit"] = limit return self
[docs] def build(self): "Build the query." # Remove optional keys if they are not set if not self.query["returnFields"]: del self.query["returnFields"] if self.query["limit"] is None: del self.query["limit"] return self.query
[docs] def post(self): "Post the query to the service and return the response." constructed_query = self.build() response = requests.post(self.endpoint, json=constructed_query) return response.json()