Source code for starmap_client.providers.memory

from typing import Any, Dict, List, Optional

from starmap_client.models import QueryResponseContainer, QueryResponseEntity
from starmap_client.providers.base import StarmapProvider
from starmap_client.providers.utils import get_image_name


[docs] class InMemoryMapProviderV2(StarmapProvider): """Provide in memory (RAM) QueryResponseContainer objects for APIv2.""" api = "v2"
[docs] def __init__(self, container: QueryResponseContainer, *args, **kwargs) -> None: """Crete a new InMemoryMapProvider object. Args: container (QueryResponseContainer) QueryResponseContainer object to load into memory. It will be used by query to return the correct response based on name and workflow. """ self._container = container super(StarmapProvider, self).__init__()
[docs] def query(self, params: Dict[str, Any]) -> Optional[QueryResponseContainer]: """Retrieve the mapping without using the server. It relies in the local provider to retrieve the correct mappings according to the parameters. Args: params (dict): The request params to retrieve the mapping. Returns: The requested container with mappings when found. """ filter_params = {"name": params.get("name") or get_image_name(params.get("image"))} for k in ["cloud", "workflow"]: v = params.get(k) if v: filter_params.update({k: v}) res = self._container.filter_by(**filter_params) if res: return QueryResponseContainer(res) return None
[docs] def list_content(self) -> List[QueryResponseEntity]: """Return a the responses stored in the container.""" return self._container.responses
[docs] def store(self, response: QueryResponseEntity) -> None: """Store a single response into the local provider's container. Args: container (container): The container to store. """ self._container.responses.append(response)