Skip to content

collection_search

Collection-Search extension.

CollectionSearchConformanceClasses

Bases: str, Enum

Conformance classes for the Collection-Search extension.

See stac-api-extensions/collection-search

Source code in stac_fastapi/extensions/core/collection_search/collection_search.py
20
21
22
23
24
25
26
27
28
class CollectionSearchConformanceClasses(str, Enum):
    """Conformance classes for the Collection-Search extension.

    See
    https://github.com/stac-api-extensions/collection-search
    """

    COLLECTIONSEARCH = "https://api.stacspec.org/v1.0.0-rc.1/collection-search"
    BASIS = "http://www.opengis.net/spec/ogcapi-common-2/1.0/conf/simple-query"

CollectionSearchExtension

Bases: ApiExtension

Collection-Search Extension.

The Collection-Search extension adds functionality to the GET - /collections endpoint which allows the caller to include or exclude specific from the API response. Registering this extension with the application has the added effect of removing the ItemCollection response model from the /search endpoint, as the Fields extension allows the API to return potentially invalid responses by excluding fields which are required by the STAC spec, such as geometry.

stac-api-extensions/collection-search

Attributes:

  • conformance_classes (list) –

    Defines the list of conformance classes for the extension

Source code in stac_fastapi/extensions/core/collection_search/collection_search.py
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
@attr.s
class CollectionSearchExtension(ApiExtension):
    """Collection-Search Extension.

    The Collection-Search extension adds functionality to the `GET - /collections`
    endpoint which allows the caller to include or exclude specific from the API
    response.
    Registering this extension with the application has the added effect of
    removing the `ItemCollection` response model from the `/search` endpoint, as
    the Fields extension allows the API to return potentially invalid responses
    by excluding fields which are required by the STAC spec, such as geometry.

    https://github.com/stac-api-extensions/collection-search

    Attributes:
        conformance_classes (list): Defines the list of conformance classes for
            the extension
    """

    GET: BaseCollectionSearchGetRequest = attr.ib(default=BaseCollectionSearchGetRequest)
    POST = None

    conformance_classes: List[str] = attr.ib(
        default=[
            CollectionSearchConformanceClasses.COLLECTIONSEARCH,
            CollectionSearchConformanceClasses.BASIS,
        ]
    )
    schema_href: Optional[str] = attr.ib(default=None)

    def register(self, app: FastAPI) -> None:
        """Register the extension with a FastAPI application.

        Args:
            app (fastapi.FastAPI): target FastAPI application.

        Returns:
            None
        """
        pass

    @classmethod
    def from_extensions(
        cls,
        extensions: List[ApiExtension],
        schema_href: Optional[str] = None,
    ) -> "CollectionSearchExtension":
        """Create CollectionSearchExtension object from extensions."""

        conformance_classes = [
            CollectionSearchConformanceClasses.COLLECTIONSEARCH,
            CollectionSearchConformanceClasses.BASIS,
        ]
        for ext in extensions:
            conformance_classes.extend(ext.conformance_classes)

        get_request_model = create_request_model(
            model_name="CollectionsGetRequest",
            base_model=BaseCollectionSearchGetRequest,
            extensions=extensions,
            request_type="GET",
        )

        return cls(
            GET=get_request_model,
            conformance_classes=conformance_classes,
            schema_href=schema_href,
        )

from_extensions classmethod

from_extensions(
    extensions: List[ApiExtension], schema_href: Optional[str] = None
) -> CollectionSearchExtension

Create CollectionSearchExtension object from extensions.

Source code in stac_fastapi/extensions/core/collection_search/collection_search.py
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
@classmethod
def from_extensions(
    cls,
    extensions: List[ApiExtension],
    schema_href: Optional[str] = None,
) -> "CollectionSearchExtension":
    """Create CollectionSearchExtension object from extensions."""

    conformance_classes = [
        CollectionSearchConformanceClasses.COLLECTIONSEARCH,
        CollectionSearchConformanceClasses.BASIS,
    ]
    for ext in extensions:
        conformance_classes.extend(ext.conformance_classes)

    get_request_model = create_request_model(
        model_name="CollectionsGetRequest",
        base_model=BaseCollectionSearchGetRequest,
        extensions=extensions,
        request_type="GET",
    )

    return cls(
        GET=get_request_model,
        conformance_classes=conformance_classes,
        schema_href=schema_href,
    )

register

register(app: FastAPI) -> None

Register the extension with a FastAPI application.

Parameters:

  • app (FastAPI) –

    target FastAPI application.

Returns:

  • None

    None

Source code in stac_fastapi/extensions/core/collection_search/collection_search.py
61
62
63
64
65
66
67
68
69
70
def register(self, app: FastAPI) -> None:
    """Register the extension with a FastAPI application.

    Args:
        app (fastapi.FastAPI): target FastAPI application.

    Returns:
        None
    """
    pass

CollectionSearchPostExtension

Bases: CollectionSearchExtension

Collection-Search Extension.

Extents the collection-search extension with an additional POST - /collections endpoint

NOTE: the POST - /collections endpoint can be conflicting with the POST /collections endpoint registered for the Transaction extension.

stac-api-extensions/collection-search

Attributes:

  • conformance_classes (list) –

    Defines the list of conformance classes for the extension

Source code in stac_fastapi/extensions/core/collection_search/collection_search.py
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
@attr.s
class CollectionSearchPostExtension(CollectionSearchExtension):
    """Collection-Search Extension.

    Extents the collection-search extension with an additional
    POST - /collections endpoint

    NOTE: the POST - /collections endpoint can be conflicting with the
    POST /collections endpoint registered for the Transaction extension.

    https://github.com/stac-api-extensions/collection-search

    Attributes:
        conformance_classes (list): Defines the list of conformance classes for
            the extension
    """

    client: Union[AsyncBaseCollectionSearchClient, BaseCollectionSearchClient] = attr.ib()
    settings: ApiSettings = attr.ib()
    conformance_classes: List[str] = attr.ib(
        default=[
            CollectionSearchConformanceClasses.COLLECTIONSEARCH,
            CollectionSearchConformanceClasses.BASIS,
        ]
    )
    schema_href: Optional[str] = attr.ib(default=None)
    router: APIRouter = attr.ib(factory=APIRouter)

    GET: BaseCollectionSearchGetRequest = attr.ib(default=BaseCollectionSearchGetRequest)
    POST: BaseCollectionSearchPostRequest = attr.ib(
        default=BaseCollectionSearchPostRequest
    )

    def register(self, app: FastAPI) -> None:
        """Register the extension with a FastAPI application.

        Args:
            app: target FastAPI application.

        Returns:
            None
        """
        self.router.prefix = app.state.router_prefix

        self.router.add_api_route(
            name="Collections",
            path="/collections",
            methods=["POST"],
            response_model=(
                Collections if self.settings.enable_response_models else None
            ),
            responses={
                200: {
                    "content": {
                        MimeTypes.json.value: {},
                    },
                    "model": Collections,
                },
            },
            response_class=GeoJSONResponse,
            endpoint=create_async_endpoint(self.client.post_all_collections, self.POST),
        )
        app.include_router(self.router)

    @classmethod
    def from_extensions(
        cls,
        extensions: List[ApiExtension],
        *,
        client: Union[AsyncBaseCollectionSearchClient, BaseCollectionSearchClient],
        settings: ApiSettings,
        schema_href: Optional[str] = None,
        router: Optional[APIRouter] = None,
    ) -> "CollectionSearchPostExtension":
        """Create CollectionSearchPostExtension object from extensions."""
        conformance_classes = [
            CollectionSearchConformanceClasses.COLLECTIONSEARCH,
            CollectionSearchConformanceClasses.BASIS,
        ]
        for ext in extensions:
            conformance_classes.extend(ext.conformance_classes)

        get_request_model = create_request_model(
            model_name="CollectionsGetRequest",
            base_model=BaseCollectionSearchGetRequest,
            extensions=extensions,
            request_type="GET",
        )

        post_request_model = create_request_model(
            model_name="CollectionsPostRequest",
            base_model=BaseCollectionSearchPostRequest,
            extensions=extensions,
            request_type="POST",
        )

        return cls(
            client=client,
            settings=settings,
            GET=get_request_model,
            POST=post_request_model,
            conformance_classes=conformance_classes,
            router=router or APIRouter(),
            schema_href=schema_href,
        )

from_extensions classmethod

from_extensions(
    extensions: List[ApiExtension],
    *,
    client: Union[AsyncBaseCollectionSearchClient, BaseCollectionSearchClient],
    settings: ApiSettings,
    schema_href: Optional[str] = None,
    router: Optional[APIRouter] = None
) -> CollectionSearchPostExtension

Create CollectionSearchPostExtension object from extensions.

Source code in stac_fastapi/extensions/core/collection_search/collection_search.py
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
@classmethod
def from_extensions(
    cls,
    extensions: List[ApiExtension],
    *,
    client: Union[AsyncBaseCollectionSearchClient, BaseCollectionSearchClient],
    settings: ApiSettings,
    schema_href: Optional[str] = None,
    router: Optional[APIRouter] = None,
) -> "CollectionSearchPostExtension":
    """Create CollectionSearchPostExtension object from extensions."""
    conformance_classes = [
        CollectionSearchConformanceClasses.COLLECTIONSEARCH,
        CollectionSearchConformanceClasses.BASIS,
    ]
    for ext in extensions:
        conformance_classes.extend(ext.conformance_classes)

    get_request_model = create_request_model(
        model_name="CollectionsGetRequest",
        base_model=BaseCollectionSearchGetRequest,
        extensions=extensions,
        request_type="GET",
    )

    post_request_model = create_request_model(
        model_name="CollectionsPostRequest",
        base_model=BaseCollectionSearchPostRequest,
        extensions=extensions,
        request_type="POST",
    )

    return cls(
        client=client,
        settings=settings,
        GET=get_request_model,
        POST=post_request_model,
        conformance_classes=conformance_classes,
        router=router or APIRouter(),
        schema_href=schema_href,
    )

register

register(app: FastAPI) -> None

Register the extension with a FastAPI application.

Parameters:

  • app (FastAPI) –

    target FastAPI application.

Returns:

  • None

    None

Source code in stac_fastapi/extensions/core/collection_search/collection_search.py
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
def register(self, app: FastAPI) -> None:
    """Register the extension with a FastAPI application.

    Args:
        app: target FastAPI application.

    Returns:
        None
    """
    self.router.prefix = app.state.router_prefix

    self.router.add_api_route(
        name="Collections",
        path="/collections",
        methods=["POST"],
        response_model=(
            Collections if self.settings.enable_response_models else None
        ),
        responses={
            200: {
                "content": {
                    MimeTypes.json.value: {},
                },
                "model": Collections,
            },
        },
        response_class=GeoJSONResponse,
        endpoint=create_async_endpoint(self.client.post_all_collections, self.POST),
    )
    app.include_router(self.router)