Source code for psnawp_api.models.search.universal_search
"""Provides Universal Search Class to search the Playstation network."""
from __future__ import annotations
from typing import TYPE_CHECKING
from psnawp_api.models.search.games_search import UniversalDomainSearchIterator
from psnawp_api.models.search.users_search import UniversalUsersSearchIterator
if TYPE_CHECKING:
from collections.abc import Generator
from psnawp_api.core import Authenticator
from psnawp_api.models.listing import PaginationArguments
from psnawp_api.models.search.games_search_datatypes import GameSearchResultItem, SearchDomain
from psnawp_api.models.search.users_result_datatypes import UserSearchResultItem
[docs]
class UniversalSearch:
"""A class to interact with the PlayStation Universal Search endpoint.
The UniversalSearch class allows querying the PlayStation API to search for video games, add-ons, and other users.
It constructs the necessary parameters and handles pagination for performing the search.
:var Authenticator authenticator: An instance of :py:class:`~psnawp_api.core.authenticator.Authenticator` used to
authenticate and make HTTPS requests.
:var PaginationArguments pagination_args: Pagination-specific arguments, such as page size and limit, passed to the
endpoint.
:var str search_query: The search query string that will be passed to the API endpoint to search for content.
.. note::
This class is intended to be used via PSNAWP class. See :py:meth:`psnawp_api.psnawp.PSNAWP.search`.
"""
[docs]
def __init__(
self,
authenticator: Authenticator,
pagination_args: PaginationArguments,
search_query: str,
) -> None:
"""Initializes the UniversalSearch object.
:param authenticator: The Authenticator instance used for making authenticated requests to the API.
:param pagination_args: Arguments related to pagination like limit and offset.
:param search_query: The search query string that will be passed to the API endpoint to search for content.
"""
self.authenticator = authenticator
self.pagination_args = pagination_args
self.search_query = search_query
[docs]
def search_game(self, search_domain: SearchDomain) -> Generator[GameSearchResultItem, None, None]:
"""Searches games/game-addons on the Playstation Network.
:param search_domain: The specific domain within which the search is performed (e.g., games, add-ons, users).
"""
return UniversalDomainSearchIterator.fetch_results(
authenticator=self.authenticator,
pagination_args=self.pagination_args,
search_query=self.search_query,
search_domain=search_domain,
)
[docs]
def search_user(self) -> Generator[UserSearchResultItem, None, None]:
"""Searches users on the Playstation Network."""
return UniversalUsersSearchIterator.fetch_results(
authenticator=self.authenticator,
pagination_args=self.pagination_args,
search_query=self.search_query,
)