Skip to content

Commit d8528ae

Browse files
deprecate Fields default-includes (#706)
1 parent 9a8ab84 commit d8528ae

File tree

7 files changed

+71
-27
lines changed

7 files changed

+71
-27
lines changed

CHANGES.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,9 @@
99
### Changed
1010

1111
* Added option for default route dependencies `*` can be used for `path` or `method` to match all allowed route. ([#705](https://github.com/stac-utils/stac-fastapi/pull/705))
12-
* moved `AsyncBaseFiltersClient` and `BaseFiltersClient` classes in `stac_fastapi.extensions.core.filter.client` submodule ([#704](https://github.com/stac-utils/stac-fastapi/pull/704))
12+
* Moved `AsyncBaseFiltersClient` and `BaseFiltersClient` classes in `stac_fastapi.extensions.core.filter.client` submodule ([#704](https://github.com/stac-utils/stac-fastapi/pull/704))
13+
* Removed `default_includes` from `stac_fastapi.types.config.ApiSettings` ([#706](https://github.com/stac-utils/stac-fastapi/pull/706))
14+
* Deprecated *Fields* extension `PostFieldsExtension.filter_fields` property ([#706](https://github.com/stac-utils/stac-fastapi/pull/706))
1315

1416
## [3.0.0a2] - 2024-05-31
1517

docs/src/tips-and-tricks.md

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,3 +45,55 @@ For the landing page, you can set the API title, description and version using e
4545
- `STAC FASTAPI_TITLE` (string) should be a self-explanatory title for your API.
4646
- `STAC FASTAPI_DESCRIPTION` (string) should be a good description for your API. It can contain CommonMark.
4747
- `STAC_FASTAPI_LANDING_ID` (string) is a unique identifier for your Landing page.
48+
49+
50+
## Default `includes` in Fields extension (POST request)
51+
52+
The [**Fields** API extension](https://github.com/stac-api-extensions/fields) enables to filter in/out STAC Items keys (e.g `geometry`). The default behavior is to not filter out anything, but this can be overridden by providing a custom `FieldsExtensionPostRequest` class:
53+
54+
```python
55+
from typing import Optional, Set
56+
57+
import attr
58+
from stac_fastapi.extensions import FieldsExtension as FieldsExtensionBase
59+
from stac_fastapi.extensions.core.fields import requests
60+
from pydantic import BaseModel, Field
61+
62+
63+
class PostFieldsExtension(requests.PostFieldsExtension):
64+
include: Optional[Set[str]] = Field(
65+
default_factory=lambda: {
66+
"id",
67+
"type",
68+
"stac_version",
69+
"geometry",
70+
"bbox",
71+
"links",
72+
"assets",
73+
"properties.datetime",
74+
"collection",
75+
}
76+
)
77+
exclude: Optional[Set[str]] = set()
78+
79+
80+
class FieldsExtensionPostRequest(BaseModel):
81+
"""Additional fields and schema for the POST request."""
82+
83+
fields: Optional[PostFieldsExtension] = Field(PostFieldsExtension())
84+
85+
86+
class FieldsExtension(FieldsExtensionBase):
87+
"""Override the POST model"""
88+
89+
POST = FieldsExtensionPostRequest
90+
91+
92+
from stac_fastapi.api.app import StacApi
93+
94+
stac = StacApi(
95+
extensions=[
96+
FieldsExtension()
97+
]
98+
)
99+
```

stac_fastapi/api/stac_fastapi/api/app.py

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -458,10 +458,6 @@ def __attrs_post_init__(self):
458458
self.client.title = self.title
459459
self.client.description = self.description
460460

461-
fields_ext = self.get_extension(FieldsExtension)
462-
if fields_ext:
463-
self.settings.default_includes = fields_ext.default_includes
464-
465461
Settings.set(self.settings)
466462
self.app.state.settings = self.settings
467463

stac_fastapi/api/tests/test_api.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,10 @@
22
from starlette.testclient import TestClient
33

44
from stac_fastapi.api.app import StacApi
5-
from stac_fastapi.extensions.core import TokenPaginationExtension, TransactionExtension
5+
from stac_fastapi.extensions.core import (
6+
TokenPaginationExtension,
7+
TransactionExtension,
8+
)
69
from stac_fastapi.types import config, core
710

811

stac_fastapi/extensions/stac_fastapi/extensions/core/fields/fields.py

Lines changed: 1 addition & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
"""Fields extension."""
22

3-
from typing import List, Optional, Set
3+
from typing import List, Optional
44

55
import attr
66
from fastapi import FastAPI
@@ -35,19 +35,6 @@ class FieldsExtension(ApiExtension):
3535
conformance_classes: List[str] = attr.ib(
3636
factory=lambda: ["https://api.stacspec.org/v1.0.0/item-search#fields"]
3737
)
38-
default_includes: Set[str] = attr.ib(
39-
factory=lambda: {
40-
"id",
41-
"type",
42-
"stac_version",
43-
"geometry",
44-
"bbox",
45-
"links",
46-
"assets",
47-
"properties.datetime",
48-
"collection",
49-
}
50-
)
5138
schema_href: Optional[str] = attr.ib(default=None)
5239

5340
def register(self, app: FastAPI) -> None:

stac_fastapi/extensions/stac_fastapi/extensions/core/fields/request.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
"""Request models for the fields extension."""
22

3+
import warnings
34
from typing import Dict, Optional, Set
45

56
import attr
67
from pydantic import BaseModel, Field
78

8-
from stac_fastapi.types.config import Settings
99
from stac_fastapi.types.search import APIRequest, str2list
1010

1111

@@ -39,6 +39,7 @@ def _get_field_dict(fields: Optional[Set[str]]) -> Dict:
3939
field_dict[parent].add(key)
4040
else:
4141
field_dict[field] = ... # type:ignore
42+
4243
return field_dict
4344

4445
@property
@@ -49,10 +50,17 @@ def filter_fields(self) -> Dict:
4950
the included and excluded fields passed to the API
5051
Ref: https://pydantic-docs.helpmanual.io/usage/exporting_models/#advanced-include-and-exclude
5152
"""
53+
warnings.warn(
54+
"""The `PostFieldsExtension.filter_fields`
55+
method is deprecated and will be removed in 3.0.""",
56+
DeprecationWarning,
57+
stacklevel=1,
58+
)
59+
5260
# Always include default_includes, even if they
5361
# exist in the exclude list.
5462
include = (self.include or set()) - (self.exclude or set())
55-
include |= Settings.get().default_includes or set()
63+
include |= set()
5664

5765
return {
5866
"include": self._get_field_dict(include),

stac_fastapi/types/stac_fastapi/types/config.py

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
"""stac_fastapi.types.config module."""
22

3-
from typing import Optional, Set
3+
from typing import Optional
44

55
from pydantic_settings import BaseSettings, SettingsConfigDict
66

@@ -19,10 +19,6 @@ class ApiSettings(BaseSettings):
1919
as distinct columns in the database.
2020
"""
2121

22-
# TODO: Remove `default_includes` attribute so we can use
23-
# `pydantic.BaseSettings` instead
24-
default_includes: Optional[Set[str]] = None
25-
2622
stac_fastapi_title: str = "stac-fastapi"
2723
stac_fastapi_description: str = "stac-fastapi"
2824
stac_fastapi_version: str = "0.1"

0 commit comments

Comments
 (0)