Source code for provenaclient.clients.search_client

'''
Created Date: Thursday May 30th 2024 +1000
Author: Peter Baker
-----
Last Modified: Thursday May 30th 2024 10:17:36 am +1000
Modified By: Peter Baker
-----
Description: Search API L2 Client.
-----
HISTORY:
Date      	By	Comments
----------	---	---------------------------------------------------------
'''

from provenaclient.auth.manager import AuthManager
from provenaclient.utils.config import Config
from enum import Enum
from ProvenaInterfaces.RegistryModels import ItemSubType
from ProvenaInterfaces.SearchAPI import QueryResults
from provenaclient.utils.helpers import *
from provenaclient.clients.client_helpers import *


[docs] class SearchEndpoints(str, Enum): """An ENUM containing the datastore-api endpoints. """ SEARCH_REGISTRY: str = "/search/entity-registry"
# L2 interface.
[docs] class SearchClient(ClientService): def __init__(self, auth: AuthManager, config: Config) -> None: """Initialises the SearchClient with authentication and configuration. Parameters ---------- auth : AuthManager An abstract interface containing the user's requested auth flow method. config : Config A config object which contains information related to the Provena instance. """ self._auth = auth self._config = config
[docs] def _build_endpoint(self, endpoint: SearchEndpoints) -> str: return self._config.search_api_endpoint + endpoint.value
[docs] async def search_registry(self, query: str, limit: Optional[int], subtype_filter: Optional[ItemSubType]) -> QueryResults: """ Searches registry using search API for given query, limit and subtype. Args: query (str): The query limit (Optional[int]): The record result limit subtype_filter (Optional[ItemSubType]): The subtype to filter if desired Raises: e: Generic exceptions as usual Returns: QueryResults: The results, not loaded. """ return await parsed_get_request_with_status( client=self, url=self._build_endpoint( SearchEndpoints.SEARCH_REGISTRY), error_message=f"Search with query '{query}' failed!...", params={"query": query, "record_limit": limit, "subtype_filter": subtype_filter.value if subtype_filter else None}, model=QueryResults )