Skip to content

Commit

Permalink
WIP: order types
Browse files Browse the repository at this point in the history
  • Loading branch information
tylanderson committed Nov 7, 2024
1 parent 387590f commit f87b225
Show file tree
Hide file tree
Showing 4 changed files with 17 additions and 21 deletions.
27 changes: 11 additions & 16 deletions src/stapi_fastapi/models/order.py
Original file line number Diff line number Diff line change
@@ -1,29 +1,25 @@
from typing import Literal
from typing import Literal, TypeVar, Generic, Any

from geojson_pydantic import Feature, FeatureCollection
from geojson_pydantic.geometries import Geometry
from pydantic import BaseModel, ConfigDict, Field, StrictInt, StrictStr

from stapi_fastapi.models.opportunity import OpportunityRequest, OpportunityPropertiesBase
from stapi_fastapi.models.shared import Link
from stapi_fastapi.types.datetime_interval import DatetimeInterval
from stapi_fastapi.types.filter import CQL2Filter


class OrderParametersBase(BaseModel): ...
class OrderParametersBase(BaseModel):
model_config = ConfigDict(extra="forbid")

P = TypeVar("P", bound=OrderParametersBase)
O = TypeVar("O", bound=OpportunityPropertiesBase)

class OrderRequest(BaseModel):
datetime: DatetimeInterval
geometry: Geometry
# TODO: validate the CQL2 filter?
filter: CQL2Filter | None = None
order_parameters: OrderParametersBase | None = None
model_config = ConfigDict(strict=True)
class OrderRequest(OpportunityRequest, Generic[P]):
order_parameters: P


class OrderProperties(BaseModel):
datetime: DatetimeInterval
model_config = ConfigDict(extra="allow")
class OrderProperties(BaseModel, Generic[O]):
opportunity_properties: O
order_parameters: dict[str, Any]


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


class OrderCollection(FeatureCollection[Order]):
type: Literal["FeatureCollection"] = "FeatureCollection"
links: list[Link] = Field(default_factory=list)
2 changes: 1 addition & 1 deletion src/stapi_fastapi/models/product.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ class Product(BaseModel):

# we don't want to include these in the model fields
_constraints: type[OpportunityPropertiesBase]
_order_parameters: type[OrderParametersBase]
_order_parameters: OrderParametersBase
_backend: ProductBackend

def __init__(
Expand Down
7 changes: 4 additions & 3 deletions src/stapi_fastapi/routers/product_router.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from __future__ import annotations

from typing import TYPE_CHECKING, Self
from typing import TYPE_CHECKING, Self, Any

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


self.add_api_route(
path="/order",
endpoint=self.create_order,
Expand Down Expand Up @@ -107,13 +108,13 @@ async def search_opportunities(

return OpportunityCollection(features=opportunities)

async def get_product_constraints(self: Self) -> JsonSchemaModel:
def get_product_constraints(self: Self) -> JsonSchemaModel:
"""
Return supported constraints of a specific product
"""
return self.product.constraints

async def get_product_order_parameters(self: Self) -> JsonSchemaModel:
def get_product_order_parameters(self: Self) -> JsonSchemaModel:
"""
Return supported order parameters of a specific product
"""
Expand Down
2 changes: 1 addition & 1 deletion tests/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -139,6 +139,6 @@ def allowed_payloads() -> list[OrderRequest]:
),
datetime=(datetime.now(UTC), datetime.now(UTC)),
filter={},
order_parameters={"s3_path": "BUCKET"},
order_parameters=TestSpotlightOrderProperties(s3_path="BUCKET"),
),
]

0 comments on commit f87b225

Please sign in to comment.