11from typing import Iterator , Optional
22
33import pystac_client
4+ from owslib .ogcapi .records import Records
45from pystac import Collection , Item
56
67from .opensearch import OpenSearchClient , OpenSearchFeature
@@ -59,9 +60,7 @@ def extract_stac_api_collections(url: str) -> Iterator[Collection]:
5960
6061
6162def extract_opensearch_features (
62- url : str ,
63- product_types : list [str ],
64- limit : int = 0 ,
63+ url : str , product_types : list [str ], limit : int = 0
6564) -> Iterator [OpenSearchFeature ]:
6665 """Extracts OpenSearch Features from an OpenSearch API
6766
@@ -83,3 +82,53 @@ def extract_opensearch_features(
8382 if limit and i >= limit :
8483 break
8584 yield feature
85+
86+
87+ def extract_ogcapi_records_catalogs (url : str ) -> Iterator [dict ]:
88+ """Extracts OGC API Records from an OGC API Records endpoint
89+
90+ Args:
91+ url (str): Link to OGC API Records endpoint
92+
93+ Yields:
94+ Iterator[Item]: OGC API Records Catalogs(collections)
95+ """
96+
97+ records = Records (url )
98+ for record in records .collections ()["collections" ]:
99+ yield record
100+
101+
102+ def extract_ogcapi_records (
103+ url : str ,
104+ catalog_ids : list [str ],
105+ datetime_interval : str | None = None ,
106+ bbox : list [float ] | None = None ,
107+ filter : str | None = None ,
108+ limit : int | None = None ,
109+ ) -> Iterator [dict ]:
110+ """Extracts OGC API Records from an OGC API Records endpoint
111+
112+ Args:
113+ url (str): Link to OGC API Records endpoint
114+ catalog_ids (list[str]): List of catalog/collection IDs to search for
115+ datetime_interval (str | None, optional): Datetime interval to search. ISO8601
116+ datetime or interval Defaults to None.
117+ bbox (list[float, float, float, float] | None, optional): Bounding box to search.
118+ filter (str, optional): CQL filter to apply. Defaults to None.
119+ limit (int | None, optional): Limit query to given number. Defaults to None.
120+
121+ Yields:
122+ Iterator[Item]: OGC API Records Items
123+ """
124+
125+ records = Records (url )
126+ for catalog_id in catalog_ids :
127+ for record in records .collection_items (
128+ catalog_id ,
129+ bbox = bbox ,
130+ datetime_ = datetime_interval ,
131+ filter = filter ,
132+ limit = limit ,
133+ )["features" ]:
134+ yield record
0 commit comments