Skip to content

Commit c619501

Browse files
caurioljlahovnik
andauthored
feat: Add label extensions (#76)
Add label extensions. This is needed for sapcenet items --------- Co-authored-by: jlahovnik <julia.lahovnik@csgroup.eu>
1 parent 28682e8 commit c619501

2 files changed

Lines changed: 68 additions & 2 deletions

File tree

stac_fastapi/eodag/app.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@
6464
from stac_fastapi.eodag.extensions.stac import (
6565
ElectroOpticalExtension,
6666
FederationExtension,
67+
LabelExtension,
6768
OrderExtension,
6869
ProcessingExtension,
6970
ProductExtension,
@@ -99,6 +100,7 @@
99100
StorageExtension(),
100101
OrderExtension(),
101102
EcmwfExtension(),
103+
LabelExtension(),
102104
]
103105
)
104106

stac_fastapi/eodag/extensions/stac.py

Lines changed: 66 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
# limitations under the License.
1818
"""properties for extensions."""
1919

20-
from typing import Annotated, Any, Optional, Union
20+
from typing import Annotated, Any, List, Optional, Union
2121

2222
import attr
2323
from eodag.api.product.metadata_mapping import ONLINE_STATUS
@@ -48,7 +48,8 @@ def __attrs_post_init__(self) -> None:
4848
if self.field_name_prefix:
4949
fields: dict[str, Any] = getattr(self.FIELDS, "model_fields", {})
5050
for k, v in fields.items():
51-
v.serialization_alias = f"{self.field_name_prefix}:{k}"
51+
if not v.serialization_alias:
52+
v.serialization_alias = f"{self.field_name_prefix}:{k}"
5253
v.metadata.insert(0, {"extension": self.__class__.__name__})
5354

5455

@@ -292,3 +293,66 @@ class FederationExtension(BaseStacExtension):
292293

293294
schema_href: str = attr.ib(default="https://api.openeo.org/extensions/federation/0.1.0")
294295
field_name_prefix: Optional[str] = attr.ib(default="federation")
296+
297+
298+
class LabelCountObject(BaseModel):
299+
"""
300+
https://github.com/stac-extensions/label
301+
"""
302+
303+
name: Optional[str] = Field(default=None)
304+
count: Optional[int] = Field(default=None)
305+
306+
307+
class LabelStatsObject(BaseModel):
308+
"""
309+
https://github.com/stac-extensions/label
310+
"""
311+
312+
name: Optional[str] = Field(default=None)
313+
value: Optional[float] = Field(default=None)
314+
315+
316+
class LabelClassObject(BaseModel):
317+
"""
318+
https://github.com/stac-extensions/label
319+
"""
320+
321+
name: Optional[str] = Field(default=None) # required but may be null
322+
classes: Optional[List[Union[str, int]]] = Field(default=None)
323+
324+
325+
class LabelOverview(BaseModel):
326+
"""
327+
https://github.com/stac-extensions/label
328+
"""
329+
330+
property_key: Optional[str] = Field(default=None)
331+
counts: Optional[List[LabelCountObject]] = Field(default=None)
332+
statistics: Optional[List[LabelStatsObject]] = Field(default=None)
333+
334+
335+
class LabelFields(BaseModel):
336+
"""
337+
https://github.com/stac-extensions/label
338+
"""
339+
340+
properties: Optional[List[str]] = Field(default=None)
341+
classes: Optional[List[LabelClassObject]] = Field(default=None)
342+
label_description: str = Field(
343+
default="", validation_alias="label:description", serialization_alias="label:description"
344+
)
345+
label_type: str = Field(default="", validation_alias="label:type", serialization_alias="label:type")
346+
tasks: Optional[List[str]] = Field(default=None)
347+
methods: Optional[List[str]] = Field(default=None)
348+
overviews: Optional[List[LabelOverview]] = Field(default=None)
349+
350+
351+
@attr.s
352+
class LabelExtension(BaseStacExtension):
353+
"""STAC label extension."""
354+
355+
FIELDS = LabelFields
356+
357+
schema_href: str = attr.ib(default="https://stac-extensions.github.io/label/v1.0.1/schema.json")
358+
field_name_prefix: Optional[str] = attr.ib(default="label")

0 commit comments

Comments
 (0)