@@ -342,7 +342,15 @@ def apply_collections_filter(search: Search, collection_ids: List[str]):
342342
343343 @staticmethod
344344 def apply_datetime_filter (search : Search , datetime_search ):
345- """Database logic to search datetime field."""
345+ """Apply a filter to search based on datetime field.
346+
347+ Args:
348+ search (Search): The search object to filter.
349+ datetime_search (dict): The datetime filter criteria.
350+
351+ Returns:
352+ Search: The filtered search object.
353+ """
346354 if "eq" in datetime_search :
347355 search = search .filter (
348356 "term" , ** {"properties__datetime" : datetime_search ["eq" ]}
@@ -392,7 +400,18 @@ def apply_intersects_filter(
392400 search : Search ,
393401 intersects : Geometry ,
394402 ):
395- """Database logic to search a geojson object."""
403+ """Filter search results based on intersecting geometry.
404+
405+ Args:
406+ search (Search): The search object to apply the filter to.
407+ intersects (Geometry): The intersecting geometry, represented as a GeoJSON-like object.
408+
409+ Returns:
410+ search (Search): The search object with the intersecting geometry filter applied.
411+
412+ Notes:
413+ A geo_shape filter is added to the search object, set to intersect with the specified geometry.
414+ """
396415 return search .filter (
397416 Q (
398417 {
@@ -411,7 +430,18 @@ def apply_intersects_filter(
411430
412431 @staticmethod
413432 def apply_stacql_filter (search : Search , op : str , field : str , value : float ):
414- """Database logic to perform query for search endpoint."""
433+ """Filter search results based on a comparison between a field and a value.
434+
435+ Args:
436+ search (Search): The search object to apply the filter to.
437+ op (str): The comparison operator to use. Can be 'eq' (equal), 'gt' (greater than), 'gte' (greater than or equal),
438+ 'lt' (less than), or 'lte' (less than or equal).
439+ field (str): The field to perform the comparison on.
440+ value (float): The value to compare the field against.
441+
442+ Returns:
443+ search (Search): The search object with the specified filter applied.
444+ """
415445 if op != "eq" :
416446 key_filter = {field : {f"{ op } " : value }}
417447 search = search .filter (Q ("range" , ** key_filter ))
@@ -444,7 +474,27 @@ async def execute_search(
444474 collection_ids : Optional [List [str ]],
445475 ignore_unavailable : bool = True ,
446476 ) -> Tuple [Iterable [Dict [str , Any ]], Optional [int ], Optional [str ]]:
447- """Database logic to execute search with limit."""
477+ """Execute a search query with limit and other optional parameters.
478+
479+ Args:
480+ search (Search): The search query to be executed.
481+ limit (int): The maximum number of results to be returned.
482+ token (Optional[str]): The token used to return the next set of results.
483+ sort (Optional[Dict[str, Dict[str, str]]]): Specifies how the results should be sorted.
484+ collection_ids (Optional[List[str]]): The collection ids to search.
485+ ignore_unavailable (bool, optional): Whether to ignore unavailable collections. Defaults to True.
486+
487+ Returns:
488+ Tuple[Iterable[Dict[str, Any]], Optional[int], Optional[str]]: A tuple containing:
489+ - An iterable of search results, where each result is a dictionary with keys and values representing the
490+ fields and values of each document.
491+ - The total number of results (if the count could be computed), or None if the count could not be
492+ computed.
493+ - The token to be used to retrieve the next set of results, or None if there are no more results.
494+
495+ Raises:
496+ NotFoundError: If the collections specified in `collection_ids` do not exist.
497+ """
448498 search_after = None
449499 if token :
450500 search_after = urlsafe_b64decode (token .encode ()).decode ().split ("," )
@@ -536,7 +586,18 @@ def sync_prep_create_item(self, item: Item, base_url: str) -> Item:
536586 return self .item_serializer .stac_to_db (item , base_url )
537587
538588 async def create_item (self , item : Item , refresh : bool = False ):
539- """Database logic for creating one item."""
589+ """Database logic for creating one item.
590+
591+ Args:
592+ item (Item): The item to be created.
593+ refresh (bool, optional): Refresh the index after performing the operation. Defaults to False.
594+
595+ Raises:
596+ ConflictError: If the item already exists in the database.
597+
598+ Returns:
599+ None
600+ """
540601 # todo: check if collection exists, but cache
541602 item_id = item ["id" ]
542603 collection_id = item ["collection" ]
@@ -555,7 +616,16 @@ async def create_item(self, item: Item, refresh: bool = False):
555616 async def delete_item (
556617 self , item_id : str , collection_id : str , refresh : bool = False
557618 ):
558- """Database logic for deleting one item."""
619+ """Delete a single item from the database.
620+
621+ Args:
622+ item_id (str): The id of the Item to be deleted.
623+ collection_id (str): The id of the Collection that the Item belongs to.
624+ refresh (bool, optional): Whether to refresh the index after the deletion. Default is False.
625+
626+ Raises:
627+ NotFoundError: If the Item does not exist in the database.
628+ """
559629 try :
560630 await self .client .delete (
561631 index = index_by_collection_id (collection_id ),
0 commit comments