|
17 | 17 | # limitations under the License. |
18 | 18 | """properties for extensions.""" |
19 | 19 |
|
20 | | -from typing import Annotated, Any, Optional, Union |
| 20 | +from typing import Annotated, Any, List, Optional, Union |
21 | 21 |
|
22 | 22 | import attr |
23 | 23 | from eodag.api.product.metadata_mapping import ONLINE_STATUS |
@@ -48,7 +48,8 @@ def __attrs_post_init__(self) -> None: |
48 | 48 | if self.field_name_prefix: |
49 | 49 | fields: dict[str, Any] = getattr(self.FIELDS, "model_fields", {}) |
50 | 50 | 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}" |
52 | 53 | v.metadata.insert(0, {"extension": self.__class__.__name__}) |
53 | 54 |
|
54 | 55 |
|
@@ -292,3 +293,66 @@ class FederationExtension(BaseStacExtension): |
292 | 293 |
|
293 | 294 | schema_href: str = attr.ib(default="https://api.openeo.org/extensions/federation/0.1.0") |
294 | 295 | 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