Skip to content

Module stac_fastapi.core.catalogs_client

Catalogs client implementation for multi-tenant catalogs extension.

Variables

COLLECTIONS_INDEX
logger

Classes

CatalogsClient

class CatalogsClient(
    database: stac_fastapi.core.base_database_logic.BaseDatabaseLogic,
    catalog_serializer: stac_fastapi.core.serializers.CatalogSerializer = <class 'stac_fastapi.core.serializers.CatalogSerializer'>,
    collection_serializer: stac_fastapi.core.serializers.CollectionSerializer = <class 'stac_fastapi.core.serializers.CollectionSerializer'>,
    item_serializer: stac_fastapi.core.serializers.ItemSerializer = <class 'stac_fastapi.core.serializers.ItemSerializer'>,
    core_client: Any = None
)

Catalogs client implementation for the multi-tenant catalogs extension.

This client implements the AsyncBaseCatalogsClient and AsyncCatalogsSearchClient interfaces and delegates to the database layer for all catalog operations.

Ancestors (in MRO)

  • stac_fastapi_catalogs_extension.client.AsyncBaseCatalogsClient
  • stac_fastapi_catalogs_extension.client.AsyncCatalogsSearchClient
  • abc.ABC

Methods

catalog_search_get

def catalog_search_get(
    self,
    catalog_id: str,
    collections: Optional[List[str]] = None,
    ids: Optional[List[str]] = None,
    bbox: Optional[List[float]] = None,
    intersects: str | None = None,
    datetime: str | None = None,
    limit: int | None = None,
    token: str | None = None,
    request: starlette.requests.Request | None = None,
    **kwargs
) -> stac_pydantic.item_collection.ItemCollection | starlette.responses.Response

Search items within a catalog using GET parameters.

Parameters:

Name Type Description Default
catalog_id None The catalog ID to search within. None
collections None List of collection IDs to search within. None
ids None List of item IDs to search for. None
bbox None Bounding box to search within. None
intersects None GeoJSON geometry to search within. None
datetime None Datetime range to search within. None
limit None Maximum number of results to return. None
token None Pagination token. None
request None FastAPI request object. None
**kwargs None Search parameters from GET query string (contains extensions like 'filter'). None

Returns:

Type Description
None ItemCollection with matching items.

catalog_search_post

def catalog_search_post(
    self,
    catalog_id: str,
    search_request: stac_fastapi.types.search.BaseSearchPostRequest,
    request: starlette.requests.Request | None = None,
    **kwargs
) -> stac_pydantic.item_collection.ItemCollection | starlette.responses.Response

Search items within a catalog and its descendants.

Parameters:

Name Type Description Default
catalog_id None The catalog ID to search within. None
search_request None The search request parameters. None
request None FastAPI request object. None
**kwargs None Additional keyword arguments. None

Returns:

Type Description
None ItemCollection with matching items.

Raises:

Type Description
HTTPException If requested collections are outside catalog scope.

create_catalog

def create_catalog(
    self,
    catalog: stac_pydantic.catalog.Catalog,
    request: starlette.requests.Request | None = None,
    **kwargs
) -> stac_pydantic.catalog.Catalog | starlette.responses.Response

Create a new catalog.

create_catalog_collection

def create_catalog_collection(
    self,
    catalog_id: str,
    collection: stac_pydantic.collection.Collection | stac_fastapi_catalogs_extension.types.ObjectUri,
    request: starlette.requests.Request | None = None,
    **kwargs
) -> stac_pydantic.collection.Collection | starlette.responses.Response

Create a new collection or link an existing collection to catalog.

create_sub_catalog

def create_sub_catalog(
    self,
    catalog_id: str,
    catalog: stac_pydantic.catalog.Catalog | stac_fastapi_catalogs_extension.types.ObjectUri,
    request: starlette.requests.Request | None = None,
    **kwargs
) -> stac_pydantic.catalog.Catalog | starlette.responses.Response

Create a new catalog or link an existing catalog as a sub-catalog.

delete_catalog

def delete_catalog(
    self,
    catalog_id: str,
    request: starlette.requests.Request | None = None,
    **kwargs
) -> None

Delete a catalog.

get_all_descendant_collections

def get_all_descendant_collections(
    self,
    catalog_id: str,
    request: starlette.requests.Request | None = None,
    **kwargs
) -> List[str]

BFS DAG crawl to find all descendant collections using parent_ids field.

Parameters:

Name Type Description Default
catalog_id None The root catalog ID to start traversal from. None
request None FastAPI request object. None
**kwargs None Additional keyword arguments. None

Returns:

Type Description
None List of all descendant collection IDs.

Raises:

Type Description
NotFoundError If the catalog does not exist.

get_catalog

def get_catalog(
    self,
    catalog_id: str,
    request: starlette.requests.Request | None = None,
    **kwargs
) -> stac_pydantic.catalog.Catalog

Get a specific catalog by ID according to the Multi-Tenant specification.

get_catalog_children

def get_catalog_children(
    self,
    catalog_id: str,
    limit: int | None = None,
    token: str | None = None,
    type: Optional[Literal['Catalog', 'Collection']] = None,
    request: starlette.requests.Request | None = None,
    **kwargs
) -> stac_fastapi_catalogs_extension.types.Children | starlette.responses.Response

Get all children (Catalogs and Collections) of a specific catalog.

get_catalog_collection

def get_catalog_collection(
    self,
    catalog_id: str,
    collection_id: str,
    request: starlette.requests.Request | None = None,
    **kwargs
) -> stac_pydantic.collection.Collection | starlette.responses.Response

Get a specific collection from a catalog (Scoped Route).

get_catalog_collection_item

def get_catalog_collection_item(
    self,
    catalog_id: str,
    collection_id: str,
    item_id: str,
    request: starlette.requests.Request | None = None,
    **kwargs
) -> stac_pydantic.item.Item | starlette.responses.Response

Get a specific item from a collection in a catalog.

get_catalog_collection_items

def get_catalog_collection_items(
    self,
    catalog_id: str,
    collection_id: str,
    bbox: list[float] | None = None,
    datetime: str | datetime.datetime | None = None,
    limit: int | None = 10,
    token: str | None = None,
    request: starlette.requests.Request | None = None,
    **kwargs
) -> stac_pydantic.item_collection.ItemCollection | starlette.responses.Response

Get items from a collection in a catalog with search support.

get_catalog_collections

def get_catalog_collections(
    self,
    catalog_id: str,
    limit: int | None = None,
    token: str | None = None,
    request: starlette.requests.Request | None = None,
    **kwargs
) -> stac_pydantic.api.collections.Collections | starlette.responses.Response

Get collections linked from a specific catalog.

get_catalog_conformance

def get_catalog_conformance(
    self,
    catalog_id: str,
    request: starlette.requests.Request | None = None,
    **kwargs
) -> dict | starlette.responses.Response

Get conformance classes specific to this sub-catalog.

get_catalog_queryables

def get_catalog_queryables(
    self,
    catalog_id: str,
    request: starlette.requests.Request | None = None,
    **kwargs
) -> dict | starlette.responses.Response

Get queryable fields available for filtering in this sub-catalog.

get_catalogs

def get_catalogs(
    self,
    limit: int | None = None,
    token: str | None = None,
    request: starlette.requests.Request | None = None,
    **kwargs
) -> stac_fastapi_catalogs_extension.types.Catalogs | starlette.responses.Response

Get all catalogs with pagination support.

get_sub_catalogs

def get_sub_catalogs(
    self,
    catalog_id: str,
    limit: int | None = None,
    token: str | None = None,
    request: starlette.requests.Request | None = None,
    **kwargs
) -> stac_fastapi_catalogs_extension.types.Catalogs | starlette.responses.Response

Get all sub-catalogs of a specific catalog with pagination.

def unlink_catalog_collection(
    self,
    catalog_id: str,
    collection_id: str,
    request: starlette.requests.Request | None = None,
    **kwargs
) -> None

Unlink a collection from a catalog.

def unlink_sub_catalog(
    self,
    catalog_id: str,
    sub_catalog_id: str,
    request: starlette.requests.Request | None = None,
    **kwargs
) -> None

Unlink a sub-catalog from its parent.

update_catalog

def update_catalog(
    self,
    catalog_id: str,
    catalog: stac_pydantic.catalog.Catalog,
    request: starlette.requests.Request | None = None,
    **kwargs
) -> stac_pydantic.catalog.Catalog | starlette.responses.Response

Update an existing catalog.

update_catalog_collection

def update_catalog_collection(
    self,
    catalog_id: str,
    collection_id: str,
    collection: stac_pydantic.collection.Collection,
    request: starlette.requests.Request | None = None,
    **kwargs
) -> stac_pydantic.collection.Collection | starlette.responses.Response

Update a collection's metadata within a catalog context (Scoped Route).

This method updates collection metadata while ensuring the collection remains linked to the specified catalog. This provides DAG safety by operating within a specific catalog context.

Parameters:

Name Type Description Default
catalog_id None The ID of the catalog. None
collection_id None The ID of the collection to update. None
collection None The updated collection data. None
request None FastAPI request object. None
**kwargs None Additional keyword arguments. None

Returns:

Type Description
None The updated collection.

Raises:

Type Description
NotFoundError If the catalog or collection is not found, or if the
collection is not linked to the catalog.