Skip to content
This repository was archived by the owner on Apr 2, 2025. It is now read-only.

Commit f87b225

Browse files
committed
WIP: order types
1 parent 387590f commit f87b225

File tree

4 files changed

+17
-21
lines changed

4 files changed

+17
-21
lines changed

src/stapi_fastapi/models/order.py

Lines changed: 11 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,25 @@
1-
from typing import Literal
1+
from typing import Literal, TypeVar, Generic, Any
22

33
from geojson_pydantic import Feature, FeatureCollection
44
from geojson_pydantic.geometries import Geometry
55
from pydantic import BaseModel, ConfigDict, Field, StrictInt, StrictStr
66

7+
from stapi_fastapi.models.opportunity import OpportunityRequest, OpportunityPropertiesBase
78
from stapi_fastapi.models.shared import Link
8-
from stapi_fastapi.types.datetime_interval import DatetimeInterval
9-
from stapi_fastapi.types.filter import CQL2Filter
109

1110

12-
class OrderParametersBase(BaseModel): ...
11+
class OrderParametersBase(BaseModel):
12+
model_config = ConfigDict(extra="forbid")
1313

14+
P = TypeVar("P", bound=OrderParametersBase)
15+
O = TypeVar("O", bound=OpportunityPropertiesBase)
1416

15-
class OrderRequest(BaseModel):
16-
datetime: DatetimeInterval
17-
geometry: Geometry
18-
# TODO: validate the CQL2 filter?
19-
filter: CQL2Filter | None = None
20-
order_parameters: OrderParametersBase | None = None
21-
model_config = ConfigDict(strict=True)
17+
class OrderRequest(OpportunityRequest, Generic[P]):
18+
order_parameters: P
2219

23-
24-
class OrderProperties(BaseModel):
25-
datetime: DatetimeInterval
26-
model_config = ConfigDict(extra="allow")
20+
class OrderProperties(BaseModel, Generic[O]):
21+
opportunity_properties: O
22+
order_parameters: dict[str, Any]
2723

2824

2925
class Order(Feature[Geometry, OrderProperties]):
@@ -33,7 +29,6 @@ class Order(Feature[Geometry, OrderProperties]):
3329
type: Literal["Feature"] = "Feature"
3430
links: list[Link] = Field(default_factory=list)
3531

36-
3732
class OrderCollection(FeatureCollection[Order]):
3833
type: Literal["FeatureCollection"] = "FeatureCollection"
3934
links: list[Link] = Field(default_factory=list)

src/stapi_fastapi/models/product.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ class Product(BaseModel):
4646

4747
# we don't want to include these in the model fields
4848
_constraints: type[OpportunityPropertiesBase]
49-
_order_parameters: type[OrderParametersBase]
49+
_order_parameters: OrderParametersBase
5050
_backend: ProductBackend
5151

5252
def __init__(

src/stapi_fastapi/routers/product_router.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from __future__ import annotations
22

3-
from typing import TYPE_CHECKING, Self
3+
from typing import TYPE_CHECKING, Self, Any
44

55
from fastapi import APIRouter, HTTPException, Request, Response, status
66
from geojson_pydantic.geometries import Geometry
@@ -67,6 +67,7 @@ def __init__(
6767
summary="Get order parameters for the product",
6868
)
6969

70+
7071
self.add_api_route(
7172
path="/order",
7273
endpoint=self.create_order,
@@ -107,13 +108,13 @@ async def search_opportunities(
107108

108109
return OpportunityCollection(features=opportunities)
109110

110-
async def get_product_constraints(self: Self) -> JsonSchemaModel:
111+
def get_product_constraints(self: Self) -> JsonSchemaModel:
111112
"""
112113
Return supported constraints of a specific product
113114
"""
114115
return self.product.constraints
115116

116-
async def get_product_order_parameters(self: Self) -> JsonSchemaModel:
117+
def get_product_order_parameters(self: Self) -> JsonSchemaModel:
117118
"""
118119
Return supported order parameters of a specific product
119120
"""

tests/conftest.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,6 @@ def allowed_payloads() -> list[OrderRequest]:
139139
),
140140
datetime=(datetime.now(UTC), datetime.now(UTC)),
141141
filter={},
142-
order_parameters={"s3_path": "BUCKET"},
142+
order_parameters=TestSpotlightOrderProperties(s3_path="BUCKET"),
143143
),
144144
]

0 commit comments

Comments
 (0)